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

Leerzeichen ersetzen durch neue Zellen

Leerzeichen ersetzen durch neue Zellen
12.11.2019 17:33:13
Erdnusskrieger
Hallo liebe VBA-Spezis.
Auf der Arbeit habe ich mir ein größeres VBA-Projekt angelacht, welches ich nun bewältigen darf. Ich beschäftige mich schon seit Tagen mit diesem Projekt, leider komme ich mangels VBA-Erfahrung an meine Grenzen, da ich ein absoluter Neuling in dem Gebiet bin.
Folgende Problemstellung:
Aus einem beliebig aufrufbaren Textdokument (haben alle vom Prinzip die selbe Struktur, Textdokument besitzt mehr als 15000 Zeilen) brauche ich einige Informationen.
Eine Zeile sieht bspw. so aus wovon es ca. 10 Zeilen gibt (Anzahl der Zeilen kann variieren, die Leerzeichen ebenfalls!):
XX ABCD OKAY SA's : 1AB 192 1J9 1K0 1L9 213 222 279 2A7 2T9
Ich benötige nun von allen Zeilen des Textdokuments, in der sich das Wort SA's befindet, die Zahlenkollone die sich hinterm : befindet. Die einzelnen Zeichenketten (1AB, 192) sind immer durch Leerzeichen getrennt.
Wichtig ist, dass die einzelnen Zeichenketten ihre eigene Zelle bekommen.
Ebenfalls sollen die Zeichenkette in das Worksheet "SA-Konfiguration" geladen werden beginnend bei C1.
Also C1 C2 C3 C4 C5 C6 C7 C8 C9 C10.
Gibt es nun eine neue Zeile so soll diese unten angefügt werden, bis alle SA's notiert sind.
Also C1 C2 C3 C4 C5 C6 C7 C8 C9 C10
D1 D2 D3 D4 ...
E1 E2 ...
...
Mein Problem ist nun, das mittels meines Codes, alle SA's einer Zeile in eine Zelle gepackt werden.
Also werden bei mir nur C1, D1, E1, usw. befüllt und nicht in die benachbarten Zellen befüllt.
Also C1=1AB 192 1J9 ..., D1=...
Ich hoffe ich konnte mich einigermaßen verständlich ausdrücken und viele Informationen meines Problemes geben. Könnt ihr mir hier weiterhelfen?
Mein bisheriger Code sieht folgendermaßen aus:
Sub SA_einlesen()
'Variablen definieren
Dim Quelldatei As String        'Speicherort der Textdatei
Dim Inhalt As String            'Inhalt der Textdatei
Dim Zeile As Integer            'Laufvariable
Dim sWord1 As String            'Wort nach dem gesucht werden soll
Dim AnsFound As Integer
AnzFound = 0
'Wort nach denen gesucht werden soll
sWord1 = "SA's"
'Quelldatei ansprechen
Quelldatei = Application.GetOpenFilename("Textdateien (*.txt), *.txt")
'Tabellenblatt aktivieren
ThisWorkbook.Worksheets("SA-Konfiguration").Activate
'Quelldatei öffnen
Open Quelldatei For Input As #1
'SA-Codes in SA-Konfiguration eintragen
Do While Not EOF(1)           'Schleife bis Datenende
'Inhalt der Quelldatei zeilenweise einlesen
Line Input #1, Inhalt
If InStr(1, Inhalt, sWord1) > 0 Then
'Zeile mit Suchwort gefunden
AnzFound = AnzFound + 1
Sheets("SA-Konfiguration").Cells(AnzFound, 3) = Mid(Inhalt, 46) 'Nur die SA-Codes  _
ausgeben
End If
Loop
'Quelldatei schließen
Close #1
End Sub

Über jede Hilfe würde ich mich sehr freuen!

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Leerzeichen ersetzen durch neue Zellen
12.11.2019 17:34:55
Erdnusskrieger
Edit:
Selbstverständlich habe ich auch schon hier im Forum sowie Google nach Lösungen befragt, leider erfolglos..
AW: Leerzeichen ersetzen durch neue Zellen
12.11.2019 17:38:49
Daniel
Hi
ich kanns mir noch nicht so richtig vorstellen.
kannst du mal ne Beispieldatei hochladen, welche zeigt wie die ausangsdaten vorliegen und wie das Ergebnis aussehen soll (von Hand erstellt)?
Gruß Daniel
AW: Leerzeichen ersetzen durch neue Zellen
13.11.2019 18:01:35
Erdnusskrieger
Hi Daniel.
Problem wurde in ein anderen Beitrag verschoben und hier vom User NoNet gelöst.
Dennoch vielen Dank!
Werte in Array splitten und ausgeben
12.11.2019 17:48:21
NoNet
Hallo Erdnusskrieger,
der Code ist ja schon fast ganz OK (kleiner Schreibfehler bei DIM AnsFound anstatt AnzFound ;-) )
Hier mal der etwas erweiterte Code : Die SAs werden in ein ARRAY (bzw. MATRIX) eingelesen und dann ab Spalte C untereinander ausgegeben :
Sub SA_einlesen()
'Variablen definieren
Dim Quelldatei As String        'Speicherort der Textdatei
Dim Inhalt As String            'Inhalt der Textdatei
Dim Zeile As Integer            'Laufvariable
Dim sWord1 As String            'Wort nach dem gesucht werden soll
Dim AnzFound As Integer
Dim lngStelle As Long           'Stelle, an der das sWord1 gefunden wurde
Dim arSAs                       'ARRAY für die SAs einer Zeile
AnzFound = 0
'Wort nach denen gesucht werden soll
sWord1 = "SA's"
'Quelldatei ansprechen
Quelldatei = Application.GetOpenFilename("Textdateien (*.txt), *.txt")
'Tabellenblatt aktivieren
ThisWorkbook.Worksheets("SA-Konfiguration").Activate
'Quelldatei öffnen
Open Quelldatei For Input As #1
'SA-Codes in SA-Konfiguration eintragen
Do While Not EOF(1)           'Schleife bis Datenende
'Inhalt der Quelldatei zeilenweise einlesen
Line Input #1, Inhalt
lngStelle = InStr(1, Inhalt, sWord1)
If lngStelle > 0 Then
'Zeile mit Suchwort gefunden
AnzFound = AnzFound + 1
'Sheets("SA-Konfiguration").Cells(AnzFound, 3) = Mid(Inhalt, 46) 'Nur die SA-Codes  _
ausgeben
arSAs = Split(Mid(Inhalt, lngStelle + 7), " ")
Sheets("SA-Konfiguration").Cells(AnzFound, 3).Resize(, UBound(arSAs) + 1) = arSAs ' _
Nur die SA-Codes
End If
Loop
'Quelldatei schließen
Close #1
End Sub
An den Bezeichnungen "Spalten" und "Zeilen" solltest Du noch etwas arbeiten, denn eine "Zeile C" gibt es in Excel nicht :-P
Salut, NoNet

Hast Du Interesse, andere Excel-Begeisterte kennenzulernen ? - Dann komme zum

Exceltreffen 12.-14.06.2020 in Freiberg/Sachsen

http://www.exceltreffen.de/index.php?page=291


Anmeldungen sind noch bis 31.03.2020 möglich ! - Schau doch mal rein !

Anzeige
AW: Werte in Array splitten und ausgeben
13.11.2019 17:53:09
Erdnusskrieger
Hi NoNet!
Super, klappt einwandfrei! Ich habe noch

arSAs = Split(Mid(Inhalt, lngStelle + 7), " ")

durch

arSAs = Split(Mid(Inhalt, lngStelle + 19), " ")

ersetzt, da ich mehr Leerzeichen in der .txt-datei hatte, als er in diesem Beitrag angezeigt hatte.
Aber das konntest du ja nicht wissen! :)
Eine Frage hab ich noch, und zwar suche ich nun noch drei einzelne Wörter. Ich hab das Gefühl, dass ich den schweren Part nun mit dir gemeinsam geschafft habe, den leichten aber nicht programmiert bekomme. Und zwar suche ich nun noch die Begriffe FGNR, Bau und Stelle.
Zu Bau:
Bau_____:_A1CD (Unterstriche sind Leerzeichen!) (So schaut die Zeile in der .txt-datei aus)
Hier brauch ich quasi das ABCD (es ist möglich, dass die Zeichenkette in der Länge variabel ist, sprich es können auch nur 3 Zeichen sein). Bau kommt öfters in der Datei vor. Ich brauche aber nur die Zeichenkette (in dem Fall A1CD) wo es zum ersten mal auftritt. Diese soll in die Sheets "Prüf" und "Bew" in die Zelle "I1"
Zu FGNR:
XX__ABCD_______blub_______FGNR_____________:_3O92J37 (Unterstriche sind Leerzeichen) (So schaut die Zeile in der .txt-datei aus)
Hier brauch ich quasi das 3O92J37(die Zeichenkette ist immer 7-stellig). FGNR kommt öfters in der Datei vor. Ich brauche aber nur die Zeichenkette (in diesem Fall3O92J37) wo es zum ersten mal auftritt. Diese soll in die Sheets "Prüf" und "Bew" in die Zelle "I2"
Zu Stelle:
XX__ABCD_______Blub_______Stelle_____________:_A22A-22-22-222 (Unterstriche sind Leerzeichen)(So schaut die Zeile in der .txt-datei aus)
Hier brauch ich quasi das A22A-22-22-222 in diesem Fall(die Zeichenkette kann unterschiedlich lang sein). Stelle kommt nur einmal in der Datei vor. Diese soll in die Sheets "Prüf" und "Bew" in die Zelle "I3"
Wie gesagt, ich hab es den ganzen Tag versucht, dachte wenn ich quasi die Schleife einfach wiederhole, nur mit den neuen Variablen, sollte es funktionieren. Jedoch komm ich nicht zum gewünschten Ergebnis bzw. bekomme kein Ergebnis. Dr. Google hab ich auch wieder durchforstet, leider ohne Erfolg.. Könntest du mir hierbei noch behilflich sein? Dann sollte ich auch fürs erste zufriedengestellt sein :)
Code sieht nun folgendermaßen aus:

Sub SA_einlesen()
'Variablen definieren
Dim Quelldatei As String        'Speicherort der Textdatei
Dim Inhalt As String            'Inhalt der Textdatei
Dim Zeile As Integer            'Laufvariable
Dim sWord1 As String            'Wort nach dem gesucht werden soll
Dim sWord2 As String            'Wort nach dem gesucht werden soll
Dim sWord3 As String            'Wort nach dem gesucht werden soll
Dim sWord4 As String            'Wort nach dem gesucht werden soll
Dim AnzFound As Integer
Dim lngStelle As Long           'Stelle, an der das sWord1 gefunden wurde
Dim arSAs                       'ARRAY für die SAs einer Zeile
AnzFound = 0
'Wörter nach denen gesucht werden soll
sWord1 = "SA's"
sWord2 = "FGNR"
sWord3 = "Bau"
sWord4 = "Stelle"
'Quelldatei ansprechen
Quelldatei = Application.GetOpenFilename("Textdateien (*.txt), *.txt")
'Tabellenblatt aktivieren
ThisWorkbook.Worksheets("SA-Konfiguration").Activate
'Quelldatei öffnen
Open Quelldatei For Input As #1
'SA-Codes in SA-Konfiguration eintragen
Do While Not EOF(1)           'Schleife bis Datenende
'Inhalt der Quelldatei zeilenweise einlesen
Line Input #1, Inhalt
lngStelle = InStr(1, Inhalt, sWord1)
If lngStelle > 0 Then
'Zeile mit Suchwort gefunden
AnzFound = AnzFound + 1
'Sheets("SA-Konfiguration").Cells(AnzFound, 3) = Mid(Inhalt, 46) 'Nur die SA-Codes   _
_
ausgeben
arSAs = Split(Mid(Inhalt, lngStelle + 19), " ")
Sheets("SA-Konfiguration").Cells(AnzFound, 3).Resize(, UBound(arSAs) + 1) = arSAs '  _
_
Nur die SA-Codes
End If
Loop
'Quelldatei schließen
Close #1
End Sub

Anzeige
AW: Werte in Array splitten und ausgeben
14.11.2019 10:19:03
Erdnusskrieger
Hat eventuell jmd. eine Idee? :)
Grüße.
AW: Werte in Array splitten und ausgeben
14.11.2019 23:58:26
Pierre
Hallo,
Ich bin gerade zwar nur am Handy, aber eine Idee zu FGNR zumindest: du müsstest den ersten Treffer finden (vom Code her leider keine Ahnung) und dann via Formel die letzten 7 Zeichen in I2 eintragen lassen. Heißt ganz schlecht ausgedrückt so etwas ähnliches wie "Range("I2").value =right(gefZelle, 7)
Zu den anderen beiden: kann man nicht per Formel die letzte Leerstelle suchen und alles rechts davon in die gewünschte Zelle schreiben? Wäre gerade die einfachste Methode, die mir einfällt.
Hier ein Link, wie man das letzte Leerzeichen finden kann: https://www.fasteasy.at/tippshop/index.php?mp=1&id=1&id2=14&id3=1194
Das kannst du ja vielleicht in VBA dann entsprechend programmieren.
Du musst nur bei Bau wieder den ersten Treffer finden. Und dann quasi wieder wie oben Range("I2").value 'Formel'...
Bei Stelle ist es vielleicht möglich, über InStr den Text Stelle zu suchen und ebenfalls wieder mit dieser Formel mit der du das letzte Leerzeichen findest, die letzten x Zeichen in Zelle I3 auszugeben.
Falls ich morgen die Zeit habe, Versuche ich dir das ein bisschen sinnvoller in Codeschnipsel darzustellen.
Ich Stelle weiterhin auf offen!
Gruß Pierre
Anzeige
AW: Leerzeichen ersetzen durch neue Zellen
16.11.2019 13:43:54
Piet
Hallo Erdnusskrieger
hier der fehlende Code um die drei Texte "Bau", "Stelle" und "FGNR" auszuwerten. Wohin das Ergebnis der Variablen "Txt" dann geschrieben werden muss bitte selbst ergzenzen. Dim musst du noch um Txt as String und c as İnteger erweitern. Viel Spass beim testen ...
mfg Piet
Sub test()
Inhalt = Range("D1")
If InStr(Inhalt, "Bau ") Then
c = InStr(Inhalt, "Bau ")
Txt = Trim(Mid(Inhalt, InStr(c, Inhalt, ":") + 1, 100))
Txt = Trim(Left(Txt, InStr(Txt, " ")))
'Wohin laden?  Bitte selbst ergaenzen
End If
If InStr(Inhalt, "Stelle ") Then
c = InStr(Inhalt, "Stelle ")
Txt = Trim(Mid(Inhalt, InStr(c, Inhalt, ":") + 1, 100))
Txt = Trim(Left(Txt, InStr(Txt, " ")))
End If
If InStr(Inhalt, "FGNR") Then
c = InStr(Inhalt, "FGNR")
Txt = Trim(Mid(Inhalt, InStr(c, Inhalt, ":") + 1, 100))
Txt = Trim(Left(Txt, InStr(Txt, " ")))
End If
End Sub

Anzeige

246 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige