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

bestimmte zeichen in string zählen

bestimmte zeichen in string zählen
fabz
Einen wunderschönen guten (späten) Morgen zusammen!
- Ich versuche, mich kurz zu fassen, zu diesem Zweck setzte ich auch Pseudocode ein.
- Voneinander unabhängige Fragen werde ich in einzelnen Beiträgen stellen.
- Sollte ich von den Meistern in diesem Forum Hilfe bekommen (davon gehe ich aus), werde ich das Resultat (gut dokumentiert) unter die GPL stellen und auch hier veröffentlichen.

Ich möchte gerne aus einem per DOS-Befehl erzeugten Verzeichnislisting eine Excel-Tabelle generieren, die sich anschließend relativ einfach weiterformatieren lässt.
Schritt A: Metadaten aus Strings generieren, die dann für Schritt C und B die Formatierung in Abhängigkeit möglich machen.
Schritt B: Liste umsortieren
Schritt C: Formatierung in Abhängingkeit der Metadaten.
Dieser Beitrag betrifft Schritt A:
Workbooks("Verzeichnisliste").Worksheets("Tabelle1").Range("A"):
c:\programme\dingsda\
c:\programme\dingsda\doku\
c:\programme\dingsda\data\
c:\programme\dingsda\doku\help.pdf
c:\programme\dingsda\doku\manual.pdf
c:\programme\dingsda\data\datei1.dat
c:\programme\dingsda\data\datei2.dat
folgende Befehle sollen als Erstes auf diese Strings angewandt werden:
  • 1) Endet der String in Ai mit einem Backslash? THEN Xi Cell.Value = "DIR"
  • 2) Endet ein String nicht mit \ then Xi Cell.Value = "DAT"

  • Damit wäre für alle Einträge der Liste festgestellt, ob sie ein Verzeichnis oder ein Datei betreffen. Dann zweiter Durchlauf:
  • 3) für jede zeile bis ende:
  • 3.1) IF Xi == "DIR" set verzeichnisTiefe = (AnzahlDerBackslashes - 1) ; Yi Cell.Value = verzeichnisTiefe
  • 3.2) IF Xi == "DAT" set verzeichnisTiefe = (AnzahlDerBackslashes ) ; Yi CellValue = verzeichnisTiefe

  • Damit wäre jedem Eintrag ein Wert zugewiesen, der aussagt, in wievielen Ordnern und Unterordnern der entsprechende Eintrag ist. Dieser Wert kann nachher dazu benutzt werden, Einrückungen oder andere Formatierungen durch ein zweites "stylesheet"-VBA zu definieren.
    Wahrscheinlich ist es besser, die Reihenfolge folgend zu wählen:
    1) dann 3.1) respektive 2) dann 3.2)
    ich habs jetzt nur zwecks leichterem Verständnis so aufgeschrieben
    - Ausführungsgeschwindigkeit ist nicht wichtig.
    - Referenzieren ist besser als Selektieren.
    - Code-lesbarkeit ist sehr wichtig.
    - Ich bin für kurze Dokumenation im Code sehr dankbar.

    3
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Benutzer
    Anzeige
    AW: bestimmte zeichen in string zählen
    16.08.2010 12:09:09
    JogyB
    Hall fabz,
    teste das mal:
    Sub typUndTiefe()
    Dim zeiLe As Long
    Dim bsCount As Long
    With Workbooks("Verzeichnisliste.xlsm").Worksheets("Tabelle1")
    ' geht von zweiter bis letzter Zeile
    ' nimmt an, dass in erster Zeile eine Überschrift steht
    For zeiLe = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
    With .Cells(zeiLe, 1)
    ' Nur für nichtleere Zellen
    If .Value  "" Then
    ' Teilt den Zellinhalt mit dem Backslash als
    ' Trennzeichen in einen Array auf. Dieser hat
    ' ein Element mehr, als Backslashs vorhanden waren,
    ' da er aber bei 0 startet, ist die obere Grenze
    ' genau die Anzahl der Backslashs
    bsCount = UBound(Split(.Value, "\"))
    ' Ist ein Verzeichnis
    If Right(.Value, 1) = "\" Then
    ' Art in Zelle rechts daneben
    .Offset(0, 1) = "DIR"
    ' Tiefe zwei Zellen rechts daneben
    .Offset(0, 2) = bsCount - 1
    ' ist eine Datei
    Else
    ' Art in Zelle rechts daneben
    .Offset(0, 1) = "DAT"
    ' Tiefe zwei Zellen rechts daneben
    .Offset(0, 2) = bsCount
    End If
    End If
    End With
    Next
    End With
    End Sub
    

    Bei der Endung der Vezeichnisliste musst Du aufpassen, ich hatte jetzt den Code in der Arbeitsmappe, deswegen war es eine .xlsm, ohne Code wäre es eine .xlsx
    Wobei: Wenn der Code tatsächlich immer in dieser Mappe sein sollte, dann wäre ThisWorkbook statt Workbooks(...) natürlich besser.
    Gruß, Jogy
    Anzeige
    AW: bestimmte zeichen in string zählen
    16.08.2010 13:58:16
    fabz
    Vielen Dank, Jogy!
    Ich habe noch die Zellenreferenzierung von .Offset auf Range("L" & zeiLe) umgestellt, um die Ergebniszellen absolut angeben zu können und den kleinen Fehler bei der Überschrift-Zeile behoben. Hier das Ergebnis für alle.
    Sub typUndTiefe()
    ' Original by JogyB @ herber.de
    Dim zeiLe As Long
    Dim bsCount As Long
    With ThisWorkbook.WorkSheets("Tabelle3")
    ' geht von zweiter bis letzter Zeile
    ' nimmt an, dass in erster Zeile eine Überschrift steht
    For zeiLe = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
    With .Cells(zeiLe, 1)
    ' Nur für nichtleere Zellen
    If .Value  "" Then
    ' Teilt den Zellinhalt mit dem Backslash als
    ' Trennzeichen in einen Array auf. Dieser hat
    ' ein Element mehr, als Backslashs vorhanden waren,
    ' da er aber bei 0 startet, ist die obere Grenze
    ' genau die Anzahl der Backslashs
    bsCount = UBound(Split(.Value, "\"))
    ' Ist ein Verzeichnis
    If Right(.Value, 1) = "\" Then
    ' Art in Zelle rechts daneben
    '.Offset(0, 1) = "DIR"
    Range("K" & zeiLe) = "DIR"
    ' Tiefe zwei Zellen rechts daneben
    '.Offset(0, 2) = bsCount - 1
    Range("L" & zeiLe) = bsCount - 1
    ' ist eine Datei
    Else
    ' Art in Zelle rechts daneben
    '.Offset(0, 1) = "DAT"
    Range("K" & zeiLe) = "DAT"
    ' Tiefe zwei Zellen rechts daneben
    '.Offset(0, 2) = bsCount
    Range("L" & zeiLe) = bsCount
    End If
    End If
    End With
    Next
    End With
    End Sub
    
    Nochmal herlichen Dank!
    dann schraub ich mal weiter...
    Anzeige
    AW: bestimmte zeichen in string zählen
    16.08.2010 17:00:49
    JogyB
    Hallo fabz,
    es muss .Range(...) lauten, sonst schreibt es immer in das aktive Tabellenblatt. Außerdem solltest Du Dir angewöhnen mit Cells(zeile, spalte) zu arbeiten, das Range mag zunächst einfacher ausschauen, aber versuch mal damit eine Schleife über mehrere Spalten zu basteln - vor allem wenn es mal über Z hinausgeht.
    Gruß, Jogy

    327 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige