Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
936to940
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
936to940
936to940
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

bestimmte Merkmale aus einem Text filtern

bestimmte Merkmale aus einem Text filtern
30.12.2007 00:24:00
snetz
Hallo alle zusammen,
ich habe mal wieder ein Problem, wobei Ihr mir bestimmt helfen könnt.
Ich habe eine Datei mit nur einer sehr sehr sehr langer Zeile. Jetzt möchte ich aus dieser Datei bestimmte Zahlen und Wörter herausfiltern und zwar wenn eine 31 kommt, möchte ich die 7 Zahlen links von der 31 in einer Spalte haben und rechts von der 31 alle Wörter und Zahlen bis ¸Û in einer anderen Spalte
Was ich da dick makiert habe sollte dann so aussehen:
0000106,ABSINTHIUM D 12 Globuli
0000112,ACALYPHA INDICA D 3 Globuli
...
...
...
Û000010600¸Û000010602362¸Û0000106032¸Û000010604697¸Û000010605266659¸Û0000106062¸Û0000106071¸Û0000106081¸Û0000106100¸Û0000106111¸Û0000106120¸Û000010614g¸Û0000106160¸Û000010618304¸Û00001061920010115¸Û00001062020010115¸Û00001062120070101¸Û0000106230¸Û0000106240¸Û0000106251¸Û000010626ABSINTHIUM D12¸Û0000106280¸Û000010631ABSINTHIUM D 12 Globuli¸Û00001063360¸Û0000106340¸Û0000106350¸Û0000106361¸Û0000106371¸Û00001063910¸Û0000106401¸Û0000106410¸Û0000106420¸Û00001064436245¸Û000010645GLO¸Û000010647BX01¸Û000010648ABSINTHIUM0DHU36245D212GLOBULI0000010G¸Û0000106491¸Û0000106501¸Û0000106512¸Û0000106522¸Û0000106530¸Û0000106541¸Û0000106552¸Û0000106562¸Û0000106572¸Û0000106582¸Û0000106591¸Û0000106630¸Û0000106641¸Û0000106682¸Û0000106721¸Û00001067418¸Û0000106762¸Û0000106771¸Û0000106782¸Û0000106790¸Û0000106801¸Û0000106811¸Û0000106831¸Û00001068614¸Û0000106871¸Û0000106880¸Û000011200¸Û000011202362¸Û0000112032¸Û000011204697¸Û000011205507891¸Û0000112062¸Û0000112071¸Û0000112081¸Û0000112100¸Û0000112111¸Û0000112120¸Û000011214g¸Û0000112160¸Û000011218304¸Û00001121920010115¸Û00001122020010115¸Û00001122120070101¸Û0000112230¸Û0000112240¸Û0000112251¸Û000011226ACALYPHA INDICA D 3¸Û0000112280¸Û000011231ACALYPHA INDICA D 3 Globuli¸Û00001123360¸Û0000112340¸Û0000112350¸Û0000112361¸Û0000112371¸Û00001123910¸Û0000112401¸Û0000112410¸Û0000112420¸Û00001124436245¸Û000011245GLO¸Û000011247BX01¸Û000011248ACALYPHA0DHU36245INDICAD13GLOBULI0000010G¸Û0000112491¸Û0000112501¸Û0000112512¸Û0000112522¸Û0000112530¸Û0000112541¸Û0000112552¸Û0000112562¸Û0000112572¸Û0000112582¸Û0000112591¸Û0000112630¸Û0000112641¸Û0000112682¸Û0000112721¸Û00001127418¸Û0000112762¸Û0000112771¸Û0000112782¸Û0000112790¸Û0000112801¸Û0000112811¸Û0000112831¸Û00001128614¸Û0000112871¸Û0000112880¸Û000012900¸Û000012902362¸Û0000129032¸Û000012904697¸Û000012905283645¸Û0000129062¸Û0000129071¸Û0000129081¸Û0000129100¸Û0000129111¸Û0000129120¸Û000012914g¸Û0000129160¸Û000012918304¸Û00001291920010115¸Û00001292020010115¸Û00001292120070101¸Û0000129230¸Û0000129240¸Û0000129251¸Û000012926ACIDUM ACETICUM D12¸Û0000129280¸Û000012931ACIDUM ACETICUM D 12
Vielen Dank für Eure hilfe

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: bestimmte Merkmale aus einem Text filtern
30.12.2007 01:28:35
MichaV
Hallo,
eine Lösungsmöglichkeit:


Sub bla()
Dim strQuelltext As String
Dim strZeilen() As String
Dim strDavor As String, strDanach As String
Dim x As Integer, i As Integer
Dim t As Integer, tt As Integer
'Ausgabe beginnen in Zeile
x = 3
strQuelltext = Range("A1") 'oder wo auch immer du ihn herholst
'Aufteilen des Textes in einzelne Zeilen, das Trennzeichen ist das "¸Û"
strZeilen = Split(strQuelltext, "¸Û")
For i = 0 To UBound(strZeilen)
    'alle Zeilen prüfen, ob darin eine 31 mit einem Buchstaben dahinter vorkommt.
    If strZeilen(i) Like "*31[!0-9]*" Then
        'an welcher Position steht der Buchstabe?
        '...hierfür gibt es sicher eine bessere Lösung
        On Error Resume Next
        For t = 1 To Len(strZeilen(i))
            tt = CStr(Mid(strZeilen(i), t, 1))
            If Err.Number <> 0 Then Exit For
        Next t
        On Error GoTo 0
        'der erste Buchstabe steht also an Stelle t
        strDavor = Mid(strZeilen(i), t - 7 - 2, 7) '-2 ist die Länge von "31"
        strDanach = Mid(strZeilen(i), t)
        'Ausgabe
        Cells(x, 1) = strDavor
        Cells(x, 2) = strDanach
        x = x + 1
    End If
Next i
End Sub


Gruß- Micha
PS: Rückmeldung wäre nett.

Anzeige
Guten Rutsch, Micha! - Gruß orT
30.12.2007 04:54:37
Luc:-?
Luc :-?

AW: Guten Rutsch, Micha! - Gruß orT
30.12.2007 12:52:57
snetz
Hi Micha,
vielen Dank für Deine Antwort, soweit klappt auch alles!!
Wenn ich die Datei in Excel öffne macht er daraus mehrere Zeilen , aber alle packt er in A:A rein. Jetzt möchte ich ganz gerne das er ein neues Arbeitsblatt öffnet und die Antworten (A:A) dortreinschreibt.
Leider weiß ich nicht wie man das in Deinem Code ändert.
Muss man vorher die Datei in Excel öffnen, da Sie ziemlich groß ist? Am Liebsten wäre mir wenn man die direkt aus einem Textprogramm rausliest und die Antworten natürlich in Excel reinschreibt.
Nochmals vielen Dank
und einen guten Rutsch ins neue!
Gruß
Kai

Anzeige
AW: bestimmte Merkmale aus einem Text filtern
30.12.2007 12:54:00
snetz
Hi Micha,
vielen Dank für Deine Antwort, soweit klappt auch alles!!
Wenn ich die Datei in Excel öffne macht er daraus mehrere Zeilen , aber alle packt er in A:A rein. Jetzt möchte ich ganz gerne das er ein neues Arbeitsblatt öffnet und die Antworten (A:A) dortreinschreibt.
Leider weiß ich nicht wie man das in Deinem Code ändert.
Muss man vorher die Datei in Excel öffnen, da Sie ziemlich groß ist? Am Liebsten wäre mir wenn man die direkt aus einem Textprogramm rausliest und die Antworten natürlich in Excel reinschreibt.
Nochmals vielen Dank
und einen guten Rutsch ins neue!
Gruß
Kai

Anzeige
AW: bestimmte Merkmale aus einem Text filtern
30.12.2007 19:00:00
MichaV
Hallo,
Dein erstes Problem mit der Spalte A:A verstehe ich nicht. Was genau meinst Du?
Zur (zweiten) Frage: ja, das geht. z.B. so:


Option Explicit
Sub bla()
Dim strQuelltext As String
Dim DateiName As Variant
Dim strZeilen() As String
Dim strDavor As String, strDanach As String
Dim x As Integer, i As Integer
Dim t As Integer, tt As Integer
'Ausgabe beginnen in Zeile
x = 1
DateiName = Application.GetOpenFilename(, , "Datei mit langem Text wählen")
If VarType(DateiName) = vbBoolean Then Exit Sub
Open DateiName For Binary As #1
    strQuelltext = Space(LOF(1))
    Get #1, , strQuelltext
Close #1
'Aufteilen des Textes in einzelne Zeilen, das Trennzeichen ist das "\'b8\'db"
strZeilen = Split(strQuelltext, "\'b8\'db")
For i = 0 To UBound(strZeilen)
    'alle Zeilen prüfen, ob darin eine 31 mit einem Buchstaben dahinter vorkommt.
    If strZeilen(i) Like "*31[!0-9]*" Then
        'an welcher Position steht der Buchstabe?
        'danke an Gerd für die Lösung mit Val() wewewe.online-excel.de/fom/fo_read.php?f=1&bzh=24318&h=24310&ao=1#a123x
        t = InStr(1, strZeilen(i), Val(strZeilen(i))) + Len(CStr(Val(strZeilen(i))))
        'der erste Buchstabe steht also an Stelle t
        strDavor = Mid(strZeilen(i), t - 7 - 2, 7) '-2 ist die Länge von "31"
        strDanach = Mid(strZeilen(i), t)
        'Ausgabe
        Cells(x, 1) = strDavor 'Ausgabe in 1. Spalte, diese ggf. vorher als Text markieren
        Cells(x, 2) = strDanach 'Ausgabe in 2. Spalte
        x = x + 1
    End If
Next i
End Sub


Gruß- Micha
PS: Rückmeldung wäre nett.

Anzeige
AW: bestimmte Merkmale aus einem Text filtern
30.12.2007 20:11:25
snetz
Hallo,
Danke für Deine Antwort, aber leider funktioniert es bei mir nicht.
Wenn ich das Makro starte, kann ich die Datei auswählen und danach kommt sofort:
Laufzeitfehler '5'
Ungültiger Prozeduraufruf oder Ungültiges Argument.
Beim Debuggen makiert er mir: strDavor = Mid(strZeilen(i), t - 7 - 2, 7) '-2 ist die Länge von "31"
Einen kleinen Ausschnitt der Datei findest Du unter www.vitaapotheke.eu/namen.txt
Bitte schau doch noch mal
Gruß
Kai

AW: bestimmte Merkmale aus einem Text filtern
30.12.2007 20:29:00
MichaV
Hallo,
mein Fehler. Du hast sicher das Makro einfach nur kopiert, zwei Zeilen wurden aber falsch dargestellt. Guck mal, ob die beiden Zeilen bei Dir so aussehen:
'Aufteilen des Textes in einzelne Zeilen, das Trennzeichen ist das "¸Û"
strZeilen = Split(strQuelltext, "¸Û")
...und ganz oben musst Du noch eine Zeile ändern:
Dim x As Long, i As Long
Dann funzt es.
Gruß- Micha
PS: Rückmeldung wäre nett.

Anzeige
AW: bestimmte Merkmale aus einem Text filtern
30.12.2007 20:47:00
snetz
super damit funktioniert es :-)
So nun wollte ich die Große Datei (333mb) ausprobieren, da schreit er jetzt nach:
Nicht genügend Zeichenfolgespeicher
und makiert: strQuelltext = Space(LOF(1))
Da auch noch eine Idee?
Gruß
Kai

AW: bestimmte Merkmale aus einem Text filtern
30.12.2007 21:13:57
MichaV
Hallo,
nö. Theoretisch sollte es bis zu einer Dateigröße von ca. 2 GB gehen. Unter http://www.xlam.ch/xlimits/speicher.htm wird vorgeschlagen, alle anderen Anwendungen zu schließen und nochmal zu versuchen.
Kannst Du die Datei nicht in 2 Dateien aufteilen?
Wenn die Datei Zeilen hätte (in allen Beispielen hatte sie immer nur eine Zeile), könnte man das Makro zeilenweise importieren lassen.
Gruß- Micha
PS: Rückmeldung wäre nett.
Anzeige

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige