Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1020to1024
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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
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
Anzeige
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

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

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige