Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Import txt bestimmte zeilen
#1
Hallo zusammen!

Ich importiere mit folgendem Code eine txt Datei in Excel ab Zelle A3 (habe ich mit Google gefunden).
Mit einem weiterem Code (TextInSpalten) werden die Daten dann auf Spalten aufgeteilt, funktioniert soweit.
Code:
Sub ImportTXT()
  ' liest alle Zeilen aus einer Textdatei und schreibt Inhalt in Spalte A
Dim intFF As Integer
Dim iZeile As Integer
Dim strDatei As String


strDatei = Sheets("Anleitung").Range("A1").Value
intFF = FreeFile
iZeile = 3                                 ' Variable für Zeilennummer

    Open strDatei For Input As #intFF       ' Öffnet Textdatei zum Lesen
    Do While Not EOF(intFF)                 ' Schleife: Laufe bis zur letzten Zeile
    Line Input #intFF, strDatei             ' Zeile Lesen und zwischenspeichern
    Cells(iZeile, 1) = strDatei             ' Zwischenspeicher an Zelle übergeben
    iZeile = iZeile + 1                     ' Zeilennummer erhöhen
    Loop                                    ' zurück zum Schleifenbeginn
    Close #intFF                            ' schließt die Textdatei
    
    TextInSpalten
    
End Sub

Ich möchte noch zwei Sachen in den Code einbauen.
1. Aus der selben Textdatei sollen aus der 1. Zeile die Zeichen 86 bis 93 ( ist ein Datum TT.MM.JJ) in mein Excel Zelle C1 importiert werden.
2. Es sollen nicht wie im Code alle Zeilen sondern nur Zeilen, die nicht leer sind und nicht mit bestimmten Werten beginnen zB 12345 oder KON oder # importiert werden.
Zeilen die nicht importiert werden sollen könnten auch noch nach anderen Zeichenfolgen innerhalb der Zeile ermittelt werden.

Danke für Eure Hilfe.
LG Herbert
Windows 10
Office 365
Antworten Top
#2
Hallo Herbert,

den Import würde ich so lassen und das Andere in Excel erledigen.
Wenn Du die Ausschlüsse genau definierst, kann man Dir auch einen Code zeigen.
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • herbert0803
Antworten Top
#3
Hallo Atilla,

das ist natürlich auch eine Möglichkeit.
Es sollen folgende Zeilen komplett gelöscht werden:
1. alle leeren Zeilen -> keine Inhalt in den Spalten A bis I
2. Alle Zeilen, bei denen in der Spalte A die Zeichen 1234/ oder #1234 oder KON vorhanden sind

Danke!
LG Herbert
Windows 10
Office 365
Antworten Top
#4
Hallo Herbert,

Kommen die Zeichen nur in einer Spalte vor oder können sie in unterschiedlichen Spalten auftauchen?

Eine Lösung, soweit kein anderer schon die Aufgabe gelöst hat, kann ich ab 20 Uhr anbieten.
Gruß Atilla
Antworten Top
#5
Hallo Atilla,

Die Zeichen kommen eigentlich nur in A3 bis letzte verwendete Zeile in A vor.
Ich habe auch schon etwas mit Google gefunden, aber das funktioniert nicht ganz, es wird die Zeichenfolge, die mit einer Raute # beginnt nicht gefunden.
hier mal mein Code, mit dem suche ich jetzt anstelle der Zeichenfolge mit # nach einem anderen in Spalte B.
Code:
Sub Ueberschriften_loeschen()

endrow = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row

For i = endrow To 3 Step -1

    If Worksheets("RevLi").Cells(i, 1) Like "12345/??" Then
    Worksheets("RevLi").Cells(i, 1).EntireRow.Delete
          
    End If
    
Next i

For i = endrow To 3 Step -1

    If Worksheets("RevLi").Cells(i, 2) Like "G*" Then
    Worksheets("RevLi").Cells(i, 2).EntireRow.Delete
          
    End If
    
Next i

For i = endrow To 3 Step -1

    If Worksheets("RevLi").Cells(i, 1) Like "KONT*" Then
    Worksheets("RevLi").Cells(i, 1).EntireRow.Delete
          
    End If
    
Next i

End Sub
Funktioniert, aber vielleicht kann man das noch verkürzen und weißt du wie ich nach der Zeichenfolge mi #12345 suchen kann?

Was mir noch fehlt ist, dass ich aus dem importierten Zellinhalt in A3 die Zeichen 86 bis 93 in die zelle C3 kopieren möchte.
LG Herbert
Windows 10
Office 365
Antworten Top
#6
Hallo zusammen,

ich würde die Daten schon beim Import ausschließen. Wenn die leeren Zeilen wirklich leer sind und keine Leerzeichen enthalten und KON immer KON und nicht mal kon geht es so. Ansonsten kann man sich auch etwas mehr dazu einfallen lassen. Wenn Du ein bestimmtes Trennzeichen hast, kann man das in Excel noch weiter treiben sodass Du auch keinen Text in Spalten brauchst.
Code ist jetzt hier geschrieben und nicht getestet.

Code:
If Len(strDatei) > 0 Then
  If Left(strDatei,5) <> "12345" And Left(strDatei,3) <> "KON" And Left(strDatei,1) <> "#" Then
    Cells(iZeile, 1) = strDatei             ' Zwischenspeicher an Zelle übergeben
    iZeile = iZeile + 1                     ' Zeilennummer erhöhen
  End If
End If
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • herbert0803
Antworten Top
#7
Hallo zusammen,

da habe ich wohl zu viel rein interpretiert.
Wenn die besagten Zeichen immer am Zeilenanfang vorkommen, dann ist das sicher einfach beim Einlesen zu bewerkstelligen.
Herbert hatte ja geschrieben, dass sie auch mit Zeichen innerhalb der Zeile auch identifizierbar sind.
Das geht dann natürlich alles beim Einlesen.

Sorry Herbert, dass ich Dich hingehalten habe.
Gruß Atilla
Antworten Top
#8
Hallo Atilla,
Deine Fragen haben geholfen, die Aufgabenstellung zu präzisieren und Dein Vorschlag ist doch auch gangbar, da was mit Text in Spalten zu machen. Da brauchst Du Dich nicht entschuldigen.
Ich habe auch nur eine Teillösung angeboten, bei mir fehlt dieser Teil mit Text in Spalten noch, gerade weil das in Excel auch ganz gut geht. Auf das Datum in C3 hab ich auch keine Rücksicht genommen.
Da könnten wir 20:00 Uhr dann Schichtwechsel machen Wink Ich hab jetzt schon mal Pause (finde keinen Smiley für's Abendbrot)
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#9
Hallo Atilla, Hallo Andre!

Danke euch Beiden für eure Vorschläge.
Ich hätte mich für die Lösung von Atilla entschieden, weil ich dort schon ziemlich weit bin und das was ich habe funktioniert auch so wie ich es brauche.
Ich würde nur noch brauchen wie ich aus A3 die Zeichen 86 bis 93 in die zelle C3 kopieren kann.

Und kann mir jemand sagen, warum dieser Code nicht funktioniert. Es wird alles andere gelöscht nur nicht die Zeilen in denen # am Anfang steht. Ist # eine Art Platzhalter?
Code:
For i = endrow To 3 Step -1

    If Worksheets("Test").Cells(i, 1) Like "#*" Then
    Worksheets("Test").Cells(i, 1).EntireRow.Delete
          
    End If
    
Next i
LG Herbert
Windows 10
Office 365
Antworten Top
#10
(27.11.2014, 08:36)herbert0803 schrieb: Und kann mir jemand sagen, warum dieser Code nicht funktioniert. Es wird alles andere gelöscht nur nicht die Zeilen in denen # am Anfang steht. Ist # eine Art Platzhalter?

Hallo Herbert,

die Raute ist - ähnlich wie der Stern (*) - ein Sonderzeichen und wird wie ein Joker oder eine "Wildcard" interpretiert.

Als Workaround funktioniert aber das Suchen und Ersetzen der Raute durch andere Zeichen (im untenstehenden Beispiel wird die Raute durch 3 X ("XXX") ersetzt, erst dann wird nach "XXX" gesucht und gelöscht ...

Code:
Sub weg_damit_1()
    Dim endrow As Long
    Dim i As Long
    endrow = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
    For i = endrow To 3 Step -1
        Cells(i, 1).Replace What:="~#", Replacement:="XXX", LookAt:=xlPart
        If Worksheets("Test").Cells(i, 1) Like "XXX*" Then
            Worksheets("Test").Cells(i, 1).EntireRow.Delete

        End If

    Next i
End Sub

Die Tilde (~) im Codeteil "Replace What:="~#" führt dazu, dass die Raute NICHT als Sonderzeichen interpretiert wird.
Aus welchen Gründen auch immer funktioniert das Voranstellen der Tilde allerdings nicht in dem Codeteil, der das Löschen der Zeilen bewirkt :2227:22:
Überlegen macht überlegen
Gruss aus dem schönen Hunsrück
_______ Klaus-Martin _______
[-] Folgende(r) 1 Nutzer sagt Danke an Kl@us-M. für diesen Beitrag:
  • herbert0803
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste