Excel VBA bestimmte Werte suchen und ausgeben

tobias_2

Cadet 4th Year
Registriert
Nov. 2009
Beiträge
84
Hallo,

ich möchte ein Prog schreiben, welches die Spalte B in Excel durch iteriert und immer wenn ein Wert mit Zeichenfolge
"81" oder "82" oder "83" beginnt den kompletten Wert (bestehend aus 8 Zeichen) in einer seperaten anderen Zelle ausgeben.
Da mehrere Werte ausgelesen werden sollen, soll die Ausgabe z.B. jeweils eine Zeile weiter nach rechts erfolgen.

Code:
    For i = 1 To LastRowAll
        If Cells(i, 2) = 870103216 Then
        Z = 0
        Cells(Z + 1, 3) = Cells(i, 2)
            End If
    Next i

Hoffe mir kann da einer schnell weiterhelfen :)
 
Wenn der Wert immer 8 Zeichen lang ist würd ich einfach mit WENN in die besagte ausgabezeile was einfügen, und das VBA zeug weglassen.
Sprich: beginnend mit 81 - 83 wäre dann >80999999 UND <84000000
Das ganze noch in einen wenn verpackt und fertig.
Deutlich weniger aufwand als der ganze VBA for-each row kram
 
Du schreibst in eine Spalte rechts daneben folgende Formel und ziehst sie nach unten:
=WENN(ODER(ZAHLENWERT(LINKS(A1;2))=81;ZAHLENWERT(LINKS(A1;2))=82;ZAHLENWERT(LINKS(A1;2))=83);A1;"")

Dann kopierst du die Spalte und übernimmst nur die Werte, sortieren sodass die leeren Zellen unten stehen, fertig.

(Natürlich B1 statt A1 wenn du dich auf Spalte B beziehst)
 
Ne, ich möchte das ganze per VBA realisieren.. aus bestimmten automatisierungs-Gründen, da das nur ein Teil des Programms ist.

Hoffe mir kann da einer helfen
Ergänzung ()

Das der Text anhand der ersten beiden Zeichen ausgewertet wird und eine Ausgabe erfolgt, funktioniert schonmal:
Code:
    For i = 1 To LastRowAll
    
        If Left(Cells(i, 2), 2) = 87 Or Left(Cells(i, 2), 2) = 84 Then
        Cells(1, 3) = Cells(i, 2)
        End If
        
    Next i
Aber es erfolgt nur die Ausgabe des letzten Wertes, der eine 87 oder 84 drin hat..
Ich brauche sozusagen eine weitere verschachtelte Schleife, die ihren Wert immer um 1 erhöht, wenn die If-Anweisung true ist..
Dann könnte ich einfach
Cells(1, 3 + z) = Cells(i, 2) beispielsweise schreiben

Klingt kompliziert, aber hoffe da kann einer helfen..
 
Dein Code gibt doch - wenn die Bedingung wahr ist - den aktuellen Wert in Zeile i zurück. Danach wird i eins erhöht, die Schleife läuft weiter, bis die Bedingung wieder erfüllt ist, und gibt dann den Wert aus der aktuelle Zeile i zurück.

Welcher Wert soll denn zurückgegeben werden?

ZeileZahlRückgabe wenn 87 oder 84
143563147
28458291084582910
398049103
48729291187292911
58799092187990921
 
Ne, ich möchte das ganze per VBA realisieren
Das was du mit deinem Code rausbekommst ist aber auch nichts anderes als es Formeln schaffen - und die kann man in jedes Spalte (jedes Blatt) genauso einkopieren.
→ In irgendwas müssen die Quelldaten ja eingefügt werden, warum also nicht in ein entsprechend präpariertes Blatt?

Code:
j=0
For i = 1 To LastRowAll
 If Left(Cells(i, 2), 2) = 87 Or Left(Cells(i, 2), 2) = 84 Then
  j = j + 1
  Cells(j, 3) = Cells(i, 2) 'das sollte vorne sicherlich nicht Cells(eins, 3) heißen?
 End If
Next i
Damit ist es wenigstens schon mal kompaktiert.

Code:
j=0
For i = 1 To LastRowAll
 L2 = Left(Cells(i, 2), 2)
 Select Case L2 'ja, man könnt hier auch direkt Left(Cells(i, 2), 2) einsetzen ohne L2 zu bemühen
  Case "87", "84"
   j = j + 1
   Cells(j, 3) = Cells(i, 2)
 End Select 
Next i
Mit so einer Syntax lässt sich die Auswahlliste ein wenig bequemer handhaben.

CN8
 
Zurück
Oben