Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1600to1604
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

Anfangsziffernkombinationen in jeder Zeile prüfen

Anfangsziffernkombinationen in jeder Zeile prüfen
09.01.2018 18:15:35
Rahel
Hallo liebes Forum,
ich möchte in beigefügter Tabelle gerne in Spalte B (IPC) in jeder Zeile die ersten 4 Ziffern prüfen - wenn es immer die gleichen ersten vier Ziffern sind soll in Spalte C eine "1" ausgegeben werden. Wenn es unterschiedliche sind soll im besten Fall (falls möglich) die Anzahl der unterschiedlichen Kombinationen ausgegeben werden. (also z.B. in C4 eine "3" da drei unterschiedliche 4er Anfangskombinationen)
Mit einer simplen WENN Formel komme ich hier leider nicht weiter, da ich hunderte von verschiedenen Kombinationen in meinem Sheet habe.
Userbild
Hat jemand eine gute Idee wie ich das z.B. in VBA umsetzen kann?
Tausend Dank im Vorhinein!
Rahel

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

Betreff
Datum
Anwender
Anzeige
AW: VBA vom 4.1.
09.01.2018 19:51:11
Fennek
Hallo,
nimm doch den Code vom 4.1. und prüfe bei jeder Zeile auf "left(Tx(i),4)". Die Anzahl erhält man, wenn das Ergebnis noch einmal geplittet wird mit Ubound().
mfg
AW: VBA vom 4.1.
09.01.2018 20:12:34
Rahel
Hi Fennek,
ach cool, stimmt. Bräuchte lediglich noch eine kleine Starthilfe, wie ich Ubound() erfolgreich einbaue, denn das hier stimmt wohl noch nicht ganz:
Sub Main()
Dim B As String
Dim Array(2 To Cells(Rows.Count, 2).End(xlUp).Row)as Variant
Debug.Print UBound(Array)
For i = 2 To Cells(Rows.Count, 2).End(xlUp).Row
Tx = Split(Cells(i, 2), Chr(10))
B = ""
For k = 0 To UBound(Tx)
If InStr(1, B, Left(Tx(i), 4)) = 0 Then B = B & ", " & Left(Tx(k), 1)
Next k
Cells(i, 3) = Mid(B, 3)
Next i
End Sub
Vielen Dank
Rahel
Anzeige
AW: VBA vom 4.1.
09.01.2018 20:58:34
Rahel
Ich habe es auch mal ohne Ubound() probiert, aber da bekomme ich den Laufzeitfehler '9' - weißt du warum? (da sich die Spalten verschoben haben habe ich das dementsprechend verschoben - hoffe ich)
Sub Main()
Dim B As String
For i = 10 To Cells(Rows.Count, 10).End(xlUp).Row
Tx = Split(Cells(i, 10), Chr(10))
B = ""
For k = 0 To UBound(Tx)
If InStr(1, B, Left(Tx(i), 4)) = 0 Then B = B & ", " & Left(Tx(k), 1)
Next k
Cells(i, 6) = Mid(B, 6)
Next i
End Sub
Vielen Dank!!
AW: VBA vom 4.1.
09.01.2018 22:40:23
Rahel
Funktioniert leider immer noch nicht ... :-(
AW: VBA vom 4.1.
10.01.2018 01:40:05
Daniel
Hi
probiers mal so (ungetestet)
damit solltest du jetzt die Anzahl der Unterschiedlichen Werte bekommen (immer die ersten 4 Buchstaben am Anfang und nach dem Zeilenumbruch)

Sub Main()
Dim B As String
Dim Array(2 To Cells(Rows.Count, 2).End(xlUp).Row)as Variant
Debug.Print UBound(Array)
For i = 2 To Cells(Rows.Count, 2).End(xlUp).Row
Tx = Split(Cells(i, 2), Chr(10))
B = ""
For k = 0 To UBound(Tx)
If InStr(1, B, Left(Tx(i), 4)) = 0 Then B = B & "," & Left(Tx(k), 4)
Next k
Cells(i, 3) = Len(B) / 5
Next i
End Sub
Gruß Daniel
Anzeige
AW: VBA vom 4.1.
10.01.2018 10:29:08
Rahel
Hi Daniel,
vielen Dank für deinen Input - leider bekomme ich einen Fehler beim Kompilieren. Hast du (oder irgendjemand) eine Idee warum?
Userbild
Also nur damit ich es richtig verstehe: in der drittletzten Zeile des Codes gebe ich doch an, wo die durch den Ubound() gezählten Werte eingetragen werden sollen (in meinem Fall in Spalte 7 ab Zeile 2), richtig?
Herzlichen Dank
Rahel
AW: VBA vom 4.1.
10.01.2018 11:12:37
Daniel
Hi
ich hab deinen Code jetzt nur kopiert und mich auf das Hauptproblem konzentriert.
die Variable Array brauchst du hier doch gar nicht, dh du kannst diese Zeile weglassen.
generell solltest du beim Dimensionieren von Array-Variablen folgendes beachten:
1. "Array" ist kein zulässiger Variablenname, sondern eine Funktion. Du solltest nur Begriffe als Variablenname verwenden, die keine VBA-Schlüsselbegriffe sind (Funktionen, Systemvariablen)
2. möchtest du ein Array mit flexibler bzw berechneter Größe verwenden, so musst du mit ReDim dimensionieren. Bei Dim kann man nur feste Zahlen als Größe angeben.
Gruß Daniel
Anzeige
AW: VBA vom 4.1.
10.01.2018 11:24:38
Rahel
Hi Daniel,
vielen Dank für den Hinweis - auch für die generellen Kommentare zum Thema Array!!
Ich habe die Zeile nun rausgelöscht und erhalte leider immer noch den Laufzeitfehler '9' da der Index anscheinend außerhalb des gültigen Bereichs ist ... mir fehlt leider das Grundverständnis um zu verstehen, wie ich das beheben kann. Hast du einen Tip?
Sub Main()
Dim B As String
For i = 2 To Cells(Rows.Count, 2).End(xlUp).Row
Tx = Split(Cells(i, 2), Chr(10))
B = ""
For k = 0 To UBound(Tx)
If InStr(1, B, Left(Tx(i), 4)) = 0 Then B = B & "," & Left(Tx(k), 4)
Next k
Cells(i, 7) = Len(B) / 5
Next i
End Sub
Vielen Dank
Rahel
Anzeige
AW: VBA vom 4.1.
10.01.2018 12:21:04
Daniel
Hi
prüf nochmal die Verwendung deiner Schleifenzähler.
Welches ist der Zähler für die Zellen (Zeilennummer)?
Welches ist der Zähler für die Indexnummern der Teile von Tx?
Hast du diese überall richtig eingesetzt? (die Antwort ist NEIN)
ich empfehle hier auch, eher sprechende Variablennamen zu verwenden.
z.B. würde ich hier für die Schleife über die Zellen sowas wie ZE verwenden, da hier der Wert der ZEilennummer im Excelblatt entspricht.
Für die Schleife über die Teile von Tx würde ich "i_Tx" verwenden, dann weißt du, dies ist der Indexzähler für das Array Tx. somit fallen dann solche Verwechslungen der der Variablen, wie sie dir passiert sind, schneller auf.
Gruß Daniel
Anzeige
AW: VBA vom 4.1.
10.01.2018 12:37:37
Rahel
Hi,
komme da leider alleine nicht weiter, habe es deshalb mit dem Code von Fennek nochmal als neuen Beitrag geposted.
Danke dennoch für die Tips.
Gruß
Rahel
AW: VBA vom 4.1.
10.01.2018 12:37:38
Rahel
Hi,
komme da leider alleine nicht weiter, habe es deshalb mit dem Code von Fennek nochmal als neuen Beitrag geposted.
Danke dennoch für die Tips.
Gruß
Rahel
AW: VBA vom 4.1.
10.01.2018 12:43:26
Daniel
du sollst die Codes nicht nur kopieren, sondern auch mal lesen und versuchen zu verstehen.
falls es dir nicht aufgefallen ist, du verwendest für das Array Tx einmal die Schleifenvariabele i und einmal die Schleifenvariable k.
die Variable i ist aber der Zeilenzähler für die Schleife über die Zellen und darf nicht mit Tx verwendet werden!
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige