Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Statt Formeln VBA ?

Statt Formeln VBA ?
06.11.2008 07:00:08
Josef
Guten Morgen!
Mit folgender Formel, wird der dementsprechende Wert in Abhängigkeit des Eintrages in der Spalte BF in die Zelle eingetragen.
=WENN(BF35766="N";"NEIN";WENN(BF35766="J-xPV";"JA";WENN(BF35766="CHA/xPV";"eventuell"; WENN(BF35766="EV-N / FV-XPV";"eventuell";WENN(BF35766="I-J/N";"eventuell";"")))))
Nachdem jedoch durch viele Formeln die Arbeitsmappe von der Größe her aufgebläht wird, stellt sich die Frage ob die Lösung nicht über VBA oder Worksheet_Change Ereignis abgehandelt werden kann.
Wie würde bitte so eine Lösung aussehen bzw. lauten?
Danke
Josef
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
hier eine Möglichkeit
06.11.2008 07:34:00
Matthias
Hallo Josef
eine Lösung könnte so aussehen


Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("BF35766")) Is Nothing And Target.Count = 1 Then
Select Case (Target)
Case Is = "N"
Cells(2, 2) = "nein"
Case Is = "j-xPV"
Cells(2, 2) = "ja"
Case Is = "CHA/xPV", "EV-N / FV-XPV", "I-J/N"
Cells(2, 2) = "eventuell"
End Select
End If
End Sub



Cells(2,2) mußt Du natürlich an Deine Bedürfnisse anpassen.
Gruß Matthias
Anzeige
AW: hier eine Möglichkeit
06.11.2008 07:40:00
Josef
Hallo Matthias!
Herzlichen Dank für Deine Antwort und den Lösungsvorschlag.
Ich vergaß leider zu erwähnen dass der Eintrag immer in der Spalte AW erfolgen muss.
Muss ich dann beim Code noch etwas verändern?
Danke
Josef
AW: hier eine Möglichkeit
06.11.2008 07:49:00
Josef
Hallo Matthias!
Habe jetzt die Lösung für die richtige Spalte
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("BF35766")) Is Nothing And Target.Count = 1 Then
Select Case (Target)
Case Is = "N"
Cells(2, 75) = "nein"
Case Is = "j-xPV"
Cells(2, 75) = "ja"
Case Is = "CHA/xPV", "EV-N / FV-XPV", "I-J/N"
Cells(2, 75) = "eventuell"
End Select
End If
End Sub


Leider wird aber nur ein Eintrag getätigt. alle anderen Einträge werden ignoriert.
Josef

Anzeige
hier eine 2. Möglichkeit
06.11.2008 08:14:50
Matthias
Hallo Josef
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Columns(58)) Is Nothing And Target.Count = 1 Then
Select Case (Target)
Case Is = "N"
Target.Offset(, 17) = "nein"
Case Is = "j-xPV"
Target.Offset(, 17) = "ja"
Case Is = "CHA/xPV", "EV-N / FV-XPV", "I-J/N"
Target.Offset(, 17) = "eventuell"
End Select
End If
End Sub


Userbild
Bei Änderung in Spalte(58) =Spalte"BF"
wird 17 Spalten weiter rechts in Spalte(75) = Spalte"BW" in der gleichen Zeile das Ergebnis eingetragen.
War es das was Du meinst.
Nun sollte man aber noch die Zeilen begranzen in denen der Code greifen soll.
Gruß Matthias

Anzeige
AW: hier eine 2. Möglichkeit
06.11.2008 08:25:06
Josef
Hallo Matthias!
Danke für die zweite Lösung.
Die würde jetzt passen.
Herzlichen Danke für Deine Hilfe.
Schönen Tag noch
welche Zelle ist das Ziel ?
06.11.2008 07:56:16
Matthias
Hallo Josef
Wo genau soll den das Ergebnis der SelectCase-Abfrage eingetragen werden.
Ich bin davon ausgegangen in der Zelle BF35766 werden entweder
  • N

  • j-xPV ... oder eins der 3 Varianten

  • CHA/xPV, EV-N / FV-XPV, I-J/N

  • eingetragen.
    Wenn Du nun also nach dem Eintrag in Zelle BF35766 die Spalte "AW" befüllen willst,
    so weiß immer noch niemand in welche Zeile. Ich hatte ja geschrieben Cells(2,2) musst Du anpassen.
    Willst Du das Ergebnis in Zelle("AW35766") haben
    dann ersetze Cells(2,2) durch z.B cells(35766,"AW") oder cells(35766,49)
    Gruß Matthias
    Anzeige
    AW: welche Zelle ist das Ziel ?
    06.11.2008 08:18:00
    Josef
    Hallo Matthias!
    Danke für Deine Rückantwort.
    Ich habe ca. 40 -45000 Datensätze wobei in der Spalte "BF" besagte Werte eingetragen werden.
    Wird also z.B. in der Spalte BF ein "N" eingetragen dann soll in diesem Datensatz in der Spalte BW ein "NEIN" eingetragen werden.
    AW: Statt Formeln VBA ?
    06.11.2008 08:24:00
    Beverly
    Hi Josef,
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim arrDaten
    If Target.Count > 1 Then Exit Sub
    If Intersect(Target, Columns("BF")) Is Nothing Then Exit Sub
    Application.EnableEvents = False
    arrDaten = Array(Array("N", "J-xPV", "XHS/xPV", "EV-N/xPV", "I-J/N"), Array("Nein", "Ja", " _
    eventuell", "eventuell", "eventuell"))
    If Not IsError(Application.Match(Target, arrDaten(0), 0)) Then
    Target.Offset(0, -9) = arrDaten(1)(Application.Match(Target, arrDaten(0), 0) - 1)
    Else
    MsgBox "Suchbegriff nicht vorhanden"
    End If
    Application.EnableEvents = True
    End Sub
    




    Anzeige
    AW: Statt Formeln VBA ?
    06.11.2008 09:40:55
    Josef
    Hallo Beverly!
    Danke für Deine Antwort!
    So würde es passen:
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim arrDaten
    If Target.Count > 1 Then Exit Sub
    If Intersect(Target, Columns("BF")) Is Nothing Then Exit Sub
    Application.EnableEvents = False
    arrDaten = Array(Array("N", "J-xPV", "XHS/xPV", "EV-N/xPV", "I-J/N"), Array("Nein", "Ja", "  _
    _
    eventuell", "eventuell", "eventuell"))
    If Not IsError(Application.Match(Target, arrDaten(0), 0)) Then
    Target.Offset(0, 17) = arrDaten(1)(Application.Match(Target, arrDaten(0), 0) - 1)
    Else
    MsgBox "Suchbegriff nicht vorhanden"
    End If
    Application.EnableEvents = True
    End Sub
    


    Dies funktoniert, wenn man den Wert einzeln eingibt oder den Wert einmal kopiert und der Reihe nach einfügt. Wenn ich mehrere "N" kopiere und einfüge dann klappt es logischerweise nicht. Wäre aber interessant, ob ein mehrfachkopieren auch gehen würde?
    Danke
    Josef

    Anzeige
    AW: Statt Formeln VBA ?
    06.11.2008 10:55:00
    Beverly
    Hi Josef,
    in deinem Eröffnungsbeitrag stand, dass der Wert in Spalte AW eingetragen werden soll. In diesem Fall ist Target.Offset(0, -9) richtig gewesen.
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim arrDaten
    Dim raZelle As Range
    If Intersect(Target, Columns("BF")) Is Nothing Then Exit Sub
    Application.EnableEvents = False
    arrDaten = Array(Array("N", "J-xPV", "XHS/xPV", "EV-N/xPV", "I-J/N"), Array("Nein", "Ja", " _
    eventuell", "eventuell", "eventuell"))
    If Target.Count > 1 Then
    If Not IsError(Application.Match(Selection.Cells(1), arrDaten(0), 0)) And Selection.Cells( _
    1)  "" Then Selection.Offset(0, 17) = arrDaten(1)(Application.Match(Selection.Cells(1), arrDaten(0), 0) - 1)
    Else
    If Not IsError(Application.Match(Target, arrDaten(0), 0)) And Target  "" Then Target. _
    Offset(0, 17) = arrDaten(1)(Application.Match(Target, arrDaten(0), 0) - 1)
    End If
    Application.EnableEvents = True
    End Sub
    




    Anzeige
    AW: Statt Formeln VBA ?
    06.11.2008 11:42:00
    Josef
    Hallo Beverly!
    Danke für Deine Antwort und die Superlösung.
    Du hast natürlich vollkommen recht mit AW. Es war leider eine Schreibfehler von mir. Dafür möchte ich mich entschuldigen.
    Josef
    ;

    Forumthreads zu verwandten Themen

    Anzeige
    Anzeige
    Anzeige
    Entdecke relevante Threads

    Schau dir verwandte Threads basierend auf dem aktuellen Thema an

    Alle relevanten Threads mit Inhaltsvorschau entdecken
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Entdecke mehr
    Finde genau, was du suchst

    Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

    Suche nach den besten Antworten
    Unsere beliebtesten Threads

    Entdecke unsere meistgeklickten Beiträge in der Google Suche

    Top 100 Threads jetzt ansehen
    Anzeige