Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1108to1112
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
Tabs ersetzen
joko0803
Hallo an alle,
ich habe hier folgendes Problem zu lösen:
SAP liefert mir einen Download mit vielen Tabstopps in ein Textfile.
Das muss ich nun in Excel einlesen, wobei ich nur das erste Tabstopp-Zeichen verwenden darf.
Nun habe ich mir vorgestellt, dass ich die Datei erst mal ohne Konvertierung einlese.
Danach lösche ich alle Tabstopp-Zeichen mit Ausnahme des jeweils ersten heraus.
Dazu wäre ich dankbar, wenn ihr mir beim Makro helfen könntet. Da ist sicherlich super einfach, aber ich blicke das einfach nicht.
Oder gibt es gar eine noch einfachere Lösung für mein Problem?
Danke für eure Hilfe
Joko

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
noch fragen...
08.10.2009 16:19:52
Tino
Hallo,
wie liegen Dir die Daten vor, als kompletter String oder Zeilenweise in Zellen?
Gibt es ein Zeichen das in diesem Text nirgendwo vorkommt? z.Bsp. &gt oder &lt
Gruß Tino
AW: noch fragen... Antwort
08.10.2009 16:28:26
joko0803
Hallo Tino,
erst mal Danke dass Du dir meinen Eintrag angesehen hast.
Die Datei liegt erst mal als Text-Datei vor, die ich wie beschrieben in Excel einlese.
Wenn an der ersten Stelle ein Tab-Zeichen steht soll das erhalten bleiben.
Alle anderen sollen gelöscht werden.
Die Einlese-Datei in Excel habe ich verkürzt angehängt.
https://www.herber.de/bbs/user/64970.xls
Zeichen die nie vorkommen könnten sein: "xxxx"
Danke für Deine Hilfe
John
Anzeige
vielleicht geht es so.
08.10.2009 18:41:57
Tino
Hallo,
ich hoffe ich habe dich richtig verstanden.
Den richtigen vbTab kann man in Excel nicht darstellen,
also habe ich diese zuerst mit Space ersetzt (CHR(32)) und danach lösche ich alle mehrfach vorkommente Space- Zeichen.
Private Function Replace_Space(strString$, strPattern$)
Dim Regex As Object
Set Regex = CreateObject("Vbscript.Regexp")
With Regex
    .Pattern = strPattern & "{2,1000}"
    .Global = True
     Replace_Space = .Replace(strString, strPattern)
     Do While Left$(Replace_Space, 1) = strPattern
      Replace_Space = Right$(Replace_Space, Len(Replace_Space) - 1)
     Loop
End With
Set Regex = Nothing
End Function

Sub ErsetzeTabs()
Dim MeAr() As Variant
Dim A As Long
Dim strPattern As String

strPattern = Chr(32)

MeAr = Range("A1", Cells(Rows.Count, 1).End(xlUp))

For A = 1 To Ubound(MeAr)
 If InStr(MeAr(A, 1), strPattern) > 0 Then
      MeAr(A, 1) = Replace(MeAr(A, 1), vbTab, strPattern)
      MeAr(A, 1) = Replace_Space(CStr(MeAr(A, 1)), strPattern)
 End If
Next A

Range("A1").Resize(Ubound(MeAr)) = MeAr
End Sub
Gruß Tino
Anzeige
nicht so ganz aber danke für den Lösungsansatz
09.10.2009 09:31:50
joko0803
Hallo Tino,
danke für die viele Mühe die Du dir gemacht hast.
Das Makro als solches funktioniert super.
Leider: Die vielen Leerzeichen, die enthalten sind, brauche ich für eine spätere Einlese.
Die Struktur der Zahlenkolonnen muss erhalten bleiben.
Dein Ansatz ist toll und ich werde versuchen an statt der Umwandlung in Leerzeichen,
die Umwandlung in "xxx" zu machen, und im Anschluss alle "xxx" zu löschen.
Gruß und Danke
John
vielleicht jetzt...
09.10.2009 15:44:17
Tino
Hallo,
ok. wenn es wirklich nur um Tabs geht, versuchen wir es so.
Ich ersetze zuerst für jedes Tab durch ° (kann man besser erkennen),
in der Funktion ersetze ich alle ° die mehrfach nacheinander vorkommen durch ein Tab.
Private Function Replace_Space(strString$, strPattern$)
Dim Regex As Object
Set Regex = CreateObject("Vbscript.Regexp")
With Regex
    .Pattern = "°{2,1000}"
    .Global = True
     Replace_Space = .Replace(strString, strPattern)
     Do While Left$(Replace_Space, 1) = strPattern
      Replace_Space = Right$(Replace_Space, Len(Replace_Space) - 1)
     Loop
End With
Set Regex = Nothing
End Function

Sub ErsetzeTabs()
Dim MeAr() As Variant
Dim A As Long
Dim strPattern As String

strPattern = vbTab

MeAr = Range("A1", Cells(Rows.Count, 1).End(xlUp))

For A = 1 To Ubound(MeAr)
 If InStr(MeAr(A, 1), strPattern) > 0 Then
      MeAr(A, 1) = Replace(MeAr(A, 1), strPattern, "°")
      MeAr(A, 1) = Replace_Space(CStr(MeAr(A, 1)), strPattern)
 End If
Next A

Range("A1").Resize(Ubound(MeAr)) = MeAr
End Sub
Gruß Tino
Anzeige

207 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige