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

VBA - String aufteilen - Zahlen erkenn

VBA - String aufteilen - Zahlen erkenn
12.09.2020 12:49:57
Zo
Hallo zusammen,
ich möchte gerne mit VBA etwas prüfen.
In meinem Fall habe ich eine Tabelle, in welcher eine bestimmte Spalte auf Werte geprüft werden soll.
Sagen wir Spalte H, Zeile 10 - 13. In diesem Bereich möchte ich gerne jede Zelle scannen und herausfinden, ob diese ein Erkennungsmerkmal enthält.
Hier ein Beispiel, wie so eine Spalte aussieht:
G | H
09:00 Uhr | A 3
10:00 Uhr | A/B 4,6
13:00 Uhr | B 9, 12, 15
17:00 Uhr | A/B 23, 25, 26
Ich möchte, dass das Script erkennt, ob A, B oder A/B in der Zelle der Spalte H steht und dann die Uhrzeit der nebenstehenden Zelle den Zahlen zuordnet.
Das Ergebnis soll hier also sein
3 => A 09:00 Uhr
4 = A/B 10:00 Uhr
6 = A/B 10:00 Uhr
9 = B 13:00 Uhr
12 = B 13:00 Uhr
15 = B 13:00 Uhr
23 = A/B 17:00 Uhr
25 = A/B 17:00 Uhr
26 = A/B 17:00 Uhr

Ich hoffe ihr versteht, was ich meine.
Habe es mit einer Schleife versucht, die dann jeweils die Zelle in Spalte H mit Split auftrennt, aber komme irgendwie einfach nicht zu einer Lösung..
LG

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Deine 3-26 in A1:A9:
12.09.2020 13:29:54
lupo1
B1[:B9]: =INDEX(G:G;SUMMENPRODUKT((A1=WENNFEHLER(--GLÄTTEN(TEIL(WECHSELN(WECHSELN(H$10:H$13;", ";" ");" ";WIEDERHOLEN(" ";19));SPALTE(B1:E1)*19-18;19));))*ZEILE($10:$13)))
AW: Deine 3-26 in A1:A9:
12.09.2020 14:55:41
Zo
Da erscheint bei mir leider lediglich eine 0, ich würde es aber auch sehr gerne in VBA lösen und verstehen
AW: Deine 3-26 in A1:A9:
12.09.2020 15:36:28
onur
Dann poste mal eine Datei - ich werde nicht alles für dich nachbauen.
Ja, so ist es, ...
12.09.2020 19:13:43
Luc:?
…ZoBru,
außerdem könnte das 2.Argument von INDEX ungültig sein. Wenn man alles richtig anpasst, erhält man die Uhrzeiten zu den bereits in A vorgetragenen Nrn, allerdings ohne die Buchstaben. Ich bezweifle, dass du das so haben wolltest, allerdings scheint mir deine Zielvorgabe missdeutbar zu sein, weshalb ich genau das von dir Gezeigte mit 2 Fmln erzeuge, ohne dass zuvor eine NrnSpalte angelegt wdn muss. Allerdings bildet die 1.Fml erstmal ein zeilenweises Ergebnis in MatrixKonstantenForm, denn dein Ansinnen ist auf Grund der Unregelmäßigkeit der Daten nicht oW mit einer Fml ohne irgendwelche Hilfszellen bzw -konstrukte zu lösen. Das ist elegant wohl nur mit einer VBA-SubProzedur lösbar. Aber es gibt ja auch noch VBA-Fktsprozeduren, die man als sog UDFs (MakroFktt) gestalten kann, die dann idR sowohl in SubProzeduren (Makros) als auch in (Zell-)Fmln einsetzbar sind. Damit kannst du ebenfalls deine VBA-Kenntnisse erweitern, denn bei den folgd Fmln habe ich gleich mehrere aus dem Archiv eingesetzt (UDF-Namen in den Fmln sind idR maussensitive Links!). Allerdings könnten die für einen Anfänger etwas zu komplex sein, aber dann müsstest du dich halt an Onur wenden… ;-]
Ich habe die BspDaten übrigens auf 8 Zeilen erweitert, um eine andere EndFml-Variante zu testen, die dann bei dieser Datenmenge erwartungsgemäß versagt hat.
1. Singulare MatrixFmln (zur Erzeugung der MatrixKonstanten):
I1[:I8]: {="{"""&VJoin(VSplit(MaskOn(H1;"num"))&" ⇒ "&MaskOn(H1;"bst";"/")&" "&G1;""";""";;;3)&"""}"}
2. Plurale MatrixFml (zur Expansion der MxKonstanten-Werte):
P1:P21: {=TensEx(I1:I8)}
Solche Aufgaben wären relativ unkompliziert mit DatenStapelBildung zu lösen, was in Xl aber nicht vorgesehen und damit nicht oW machbar ist, obwohl Xl durchaus die Daten liefern kann. Damit könnte man dann zeilengerechte Lösungen erstellen. Hier würde sich so nämlich eher eine Matrix ergeben, aber du möchtest die Ergebnisse ja untereinander zu stehen haben.
Anmerkung: MaskOn erklärt sich iW selbst, die 3 anderen UDFs haben ausführlichere Erläuterungen (aber m.v.Abkk!) dabei.
Gruß, Luc :-?
„Die universelle Befähigung zur Unfähigkeit macht jede menschliche Leistung zu einem unglaublichen Wunder.“ Stapps ironisches Paradoxon
Nichtsdestotrotz Durchblick verbessern mit …

Anzeige
AW: VBA - String aufteilen - Zahlen erkenn
12.09.2020 19:58:14
Daniel
Hi
als VBA-Lösung probier mal dieses Makro:
Sub test()
Dim arr
Dim Erg
Dim z As Long, i As Long
Dim txt As String, txt1 As String, txt2 As String
Dim T
arr = Range("G10:H13").Value
For z = 1 To UBound(arr, 1)
txt = arr(z, 2)
For Each T In Array("/", ",", ";")
txt = Replace(txt, T, " ")
Next
txt = WorksheetFunction.Trim(txt)
T = Split(txt, " ")
txt1 = T(0)
For i = 1 To UBound(T)
If Not IsNumeric(T(i)) Then
txt1 = txt1 & "/" & T(i)
Else
Exit For
End If
Next
For i = i To UBound(T)
Erg = Erg & vbLf & T(i) & " = " & txt1 & " " & arr(z, 1)
Next
Next
Erg = Mid(Erg, 1)
MsgBox Erg
End Sub
Gruß Daniel
Anzeige
AW: VBA - String aufteilen - Zahlen erkenn
12.09.2020 20:39:17
GerdL
Moin,
probier mal:
Sub Unit()
Dim C As Range, X As String, Y As Variant, Zeile As Long
Zeile = 1
For Each C In Range("H10:H13")
X = Trim(C.Value)
If Left(X, 4) = "A/B " Or Left(X, 2) = "A " Or Left(X, 2) = "B " Then
For Each Y In Split((Replace(X, Split(X)(0), "")), ",")
Zeile = Zeile + 1
Range("J" & Zeile) = "'" & Trim(Y) & " = " & Left(X, InStr(X, " ")) & C.Offset(0, -1)
Next Y
End If
Next C
End Sub

Gruß Gerd
AW: VBA - String aufteilen - Zahlen erkenn
12.09.2020 21:49:21
Matthias
Hallo
Dazu benötigst Du lediglich die Vorbereitung mit
Daten Text in Spalten. Dort trennst Du Daten entsprechend.
Danach liegen die Daten so vor:
Tabelle1

 GHIJK
109:00:00 UhrA3  
210:00:00 UhrA/B46 
313:00:00 UhrB91215
417:00:00 UhrA/B232526


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8
Nach der Ausführung dieser Zeilen:
Option Explicit
Sub ml()
Dim x&, y&, ColZiel&, RowZiel&
ColZiel = 15: RowZiel = 1
For y = 1 To 4
For x = 9 To 11
If Cells(y, x)  "" Then
Cells(RowZiel, ColZiel) = Cells(y, x) & " => " & Cells(y, 8) & " " & Cells(y, 7)
RowZiel = RowZiel + 1
End If
Next
Next
End Sub
erhälst Du dieses Ergebnis, was mE von Dir angestrebt ist.
Tabelle1

 O
13 => A 09:00:00 Uhr
24 => A/B 10:00:00 Uhr
36 => A/B 10:00:00 Uhr
49 => B 13:00:00 Uhr
512 => B 13:00:00 Uhr
615 => B 13:00:00 Uhr
723 => A/B 17:00:00 Uhr
825 => A/B 17:00:00 Uhr
926 => A/B 17:00:00 Uhr


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8
Zeilen & Spalten musst Du für Dich anpassen.
Gruß Matthias
Anzeige

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige