Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zellwerte als Ordner erstellen

Zellwerte als Ordner erstellen
14.07.2015 14:58:58
Bernd
Wunderschönen guten Tag,
ich habe da eine etwas kompliziertere Frage, und zwar:
Ist es möglich, via VBA, dass mir Excel aus den Zellinhalten F2:F1280, unter dem Pfad D:\FLAG, die dort enthaltenen Zellwerte, es sind Namen, als Ordner erstellen kann?
Dies müsste aber für jeden Zellinhalt ein eigener Ordner sein, also z.B.:
F2 enthält den Text Hubert
F3 enthält den Text Maria
F4 enthält den Text Franz
usw. bis F1280
Nun sollte nach Makroausführung in meinem Ordner (FLAG) für jeden Namen ein eigener leerer Ordner vorhanden sein.
Falls es Doppelnamen gibt, würde es genügen diese einfach, Windowstypisch, mit fortlaufenden Nummern zu versehen, also z.B.: Maria, Maria (1), Maria (2) usw.
Ich denke eine Beispielmappe für mein Problem ist sicher nicht von Nöten da nichts kompliziertes nachgebaut werden muss/soll.
Ich Danke Euch schon mal vorab recht herzlich für Eure Mühen. Sollte es so nicht realisierbar sein, würde ich trotzdem um Mitteilung bitten, dann muss ich die Ordner wohl oder übel, händisch erstellen.
lg aus Kärnten wünscht
Bernd

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellwerte als Ordner erstellen
14.07.2015 16:04:02
Michael
Hallo Bernd!
Bspw. so, in ein allgemeines Modul (Alt + F11 in der betr. Mappe, Einfügen... Modul):
Option Explicit
Sub OrdnerStapelanlage()
Dim Pfad As String
Dim Namensliste As Range
Dim Name As Range
Dim Ordner As String
Dim i As Integer
'Hauptpfad in dem Ordner angelegt werden sollen
Pfad = "D:\FLAG"
'Wo stehen die Ordnernamen
Set Namensliste = ThisWorkbook.Worksheets("Tabelle1").Range("F2:F1280")
'Ordner nach Liste anlegen, ggf. "hochzählen"
For Each Name In Namensliste
Ordner = OrdnerSauber(Name.Value)
If Dir(Pfad & "\" & Ordner, vbDirectory) = "" Then
MkDir Pfad & "\" & Ordner
Else:
i = 1
Do Until Dir(Pfad & "\" & Ordner & "_" & i, vbDirectory) = ""
i = i + 1
Loop
MkDir Pfad & "\" & Ordner & "_" & i
End If
Next
'[OPTIONAL - ggf. löschen] Hauptpfad nach Stapelanlage öffnen
Shell "Explorer.exe " & Pfad, vbNormalFocus
End Sub
Function OrdnerSauber(Name As String) As String
'Ordnernamen dürfen nur Buchstaben A-Z inkl. Umlaute enthalten
Dim i As Integer
Dim Klar As String
For i = 1 To Len(Name)
Select Case LCase(Mid(Name, i, 1))
Case Is = "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", _
"n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", _
Klar = Klar & Mid(Name, i, 1)
Case Else
Klar = Klar
End Select
Next i
OrdnerSauber = Klar
End Function
Bei Set Namensliste = ... musst Du [Tabelle1] auf Deinen Tabellenblattnamen tauschen.
Passt?
LG
Michael

Anzeige
AW: Zellwerte als Ordner erstellen
14.07.2015 16:08:47
Bernd
Hallo Michael!
ich kann es erst morgen testen, Du bekommst aber sicher dann eine Rückmeldung.
Danke vorerst und schönen Abend wünsche ich,
mfg Bernd

AW: Ja, melde Dich morgen! Schönen Abend, owT
14.07.2015 16:11:09
Michael
.

AW: Hier noch eine verbesserte Version
14.07.2015 16:45:03
Michael
Hallo Bernd!
Hier noch eine überarbeitete Version von oben; hier kannst Du den Pfad an dem die Ordner angelegt werden sollen direkt aus einem Dialog wählen (muss also nicht im Makro-Code definiert werden), und der Namensbereich kann variabel lang sein (d.h. es wird das Spaltenende von F:F identifziert), ebenso können nun Leerzeilen vorhanden sein.
Option Explicit
Sub OrdnerStapelanlage()
Dim Info As String
Dim Pfad As String
Dim LeZeile As Long
Dim Namensliste As Range
Dim Name As Range
Dim Ordner As String
Dim i As Integer
'[OPTIONAL] Benutzer-Info und Abbruchsmöglichkeit
Info = MsgBox("Für jeden in Spalte F ab Zeile 2 eingetragenen Namen " & _
"(Zellwert) wird nun ein Ordner in [D:\FLAG] angelegt." & vbCrLf & _
vbCrLf & "Das kann einige Zeit in Anspruch nehmen. Starten?", vbOKCancel, _
"Ordner Stapelanlage starten?")
If Info = vbCancel Then Exit Sub
'Hauptpfad in dem Ordner angelegt werden sollen
Pfad = PfadWahl
'Wenn Namensliste ggf. Leerzeilen enthält
LeZeile = ThisWorkbook.Worksheets("Tabelle1"). _
Cells(ThisWorkbook.Worksheets("Tabelle1").Rows.Count, 6).End(xlUp).Row
'Wo stehen die Ordnernamen
Set Namensliste = ThisWorkbook.Worksheets("Tabelle1").Range("F2:F" & LeZeile)
'Ordner nach Liste anlegen, ggf. "hochzählen"
For Each Name In Namensliste
Select Case Name.Value
Case Is = ""
'Leere Zellen überspringen
Case Else
Ordner = OrdnerSauber(Name.Value)
If Dir(Pfad & "\" & Ordner, vbDirectory) = "" Then
MkDir Pfad & "\" & Ordner
Else:
i = 2
Do Until Dir(Pfad & "\" & Ordner & "_" & i, vbDirectory) = ""
i = i + 1
Loop
MkDir Pfad & "\" & Ordner & "_" & i
End If
End Select
Next
'[OPTIONAL] Benutzer-Info und Hauptpfad nach Stapelanlage öffnen
Info = MsgBox("Ordner wurden angelegt. Verzeichnis wird geöffnet... ", vbInformation, _
"Stapelanlage abgeschlossen!")
Shell "Explorer.exe " & Pfad, vbNormalFocus
End Sub
Function OrdnerSauber(Name As String) As String
'Ordnernamen dürfen nur Buchstaben A-Z inkl. Umlaute enthalten
Dim i As Integer
Dim Klar As String
For i = 1 To Len(Name)
Select Case LCase(Mid(Name, i, 1))
Case Is = "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", _
"n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", _
Klar = Klar & Mid(Name, i, 1)
Case Else
Klar = Klar
End Select
Next i
OrdnerSauber = Klar
End Function
Function PfadWahl() As String
'Verzeichnis, in das Ordner per Stapelanlage erzeugt werden sollen, über
'Datei-Dialog wählen
Dim SuchDialog As FileDialog
Set SuchDialog = Application.FileDialog(msoFileDialogFolderPicker)
With SuchDialog
.Title = "Bitte Verzeichnis wählen"
.AllowMultiSelect = False
If .Show  -1 Then
MsgBox "Vorgang abgebrochen", vbInformation
Exit Function
Else: PfadWahl = .SelectedItems(1)
End If
End With
End Function
Also teste evtl. diesen Code zuerst; Anmerkungen von oben treffen nach wie vor zu.
LG
Michael

Anzeige
AW: @ Michael
15.07.2015 05:45:17
Bernd
Hallo Michael!
ich kann nur sagen WOW und TAUSEND DANK !!!
Dein Code funktioniert einwandfrei. Ich habe, so wie Du vorgeschlagen hast, den zweiten genommen.
Anfangs erhielt ich eine Debuggerwarnung, konnte diese selbst lösen.
Grund war der, dass ich so wie Du geschrieben hast, bei Set Namensliste meinen Blattnamen geändert habe, aber sonst nirgends.
Musste diesen hier:
LeZeile = ThisWorkbook.Worksheets("Tabelle1"). _
Cells(ThisWorkbook.Worksheets("Tabelle1").Rows.Count, 6).End(xlUp).Row
auch ändern, somit erfüllt die Funktion zu 100% meine Wünsche.
Ich sage nochmals ein riesen Dankeschön, Du hast mir sehr viel Arbeit erspart, wünsche Dir und Deinen liebsten alles Gute und viel Glück am weiteren Lebensweg.
Gruß aus Kärnten wünscht der (nun) glückliche
Bernd

Anzeige
AW: So macht Helfen Spaß...
15.07.2015 08:56:18
Michael
Bernd,
...vielen Dank für Deine äußerst nette Rückmeldung. Super, dass Du Dir bzgl. der Fehlermeldung selbst helfen konntest; hab ich dann vergessen anzumerken!
Dir ebenfalls alles Liebe und viele Grüße zurück aus Wien
Michael
;
Anzeige
Anzeige

Infobox / Tutorial

Zellwerte als Ordner erstellen


Schritt-für-Schritt-Anleitung

Um aus Zellwerten in Excel Ordner zu erstellen, kannst du VBA (Visual Basic for Applications) nutzen. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Öffne den VBA-Editor: Drücke Alt + F11 in Excel.

  2. Füge ein neues Modul hinzu: Klicke auf Einfügen -> Modul.

  3. Kopiere den folgenden VBA-Code in das Modul:

    Option Explicit
    Sub OrdnerStapelanlage()
       Dim Info As String
       Dim Pfad As String
       Dim LeZeile As Long
       Dim Namensliste As Range
       Dim Name As Range
       Dim Ordner As String
       Dim i As Integer
    
       Info = MsgBox("Für jeden in Spalte F ab Zeile 2 eingetragenen Namen " & _
       "(Zellwert) wird nun ein Ordner in [D:\FLAG] angelegt." & vbCrLf & _
       vbCrLf & "Das kann einige Zeit in Anspruch nehmen. Starten?", vbOKCancel, _
       "Ordner Stapelanlage starten?")
       If Info = vbCancel Then Exit Sub
    
       Pfad = PfadWahl
       LeZeile = ThisWorkbook.Worksheets("Tabelle1").Cells(ThisWorkbook.Worksheets("Tabelle1").Rows.Count, 6).End(xlUp).Row
       Set Namensliste = ThisWorkbook.Worksheets("Tabelle1").Range("F2:F" & LeZeile)
    
       For Each Name In Namensliste
           Select Case Name.Value
           Case Is = ""
               'Leere Zellen überspringen
           Case Else
               Ordner = OrdnerSauber(Name.Value)
               If Dir(Pfad & "\" & Ordner, vbDirectory) = "" Then
                   MkDir Pfad & "\" & Ordner
               Else
                   i = 2
                   Do Until Dir(Pfad & "\" & Ordner & "_" & i, vbDirectory) = ""
                       i = i + 1
                   Loop
                   MkDir Pfad & "\" & Ordner & "_" & i
               End If
           End Select
       Next
    
       Info = MsgBox("Ordner wurden angelegt. Verzeichnis wird geöffnet... ", vbInformation, _
       "Stapelanlage abgeschlossen!")
       Shell "Explorer.exe " & Pfad, vbNormalFocus
    End Sub
    
    Function OrdnerSauber(Name As String) As String
       Dim i As Integer
       Dim Klar As String
       For i = 1 To Len(Name)
           Select Case LCase(Mid(Name, i, 1))
               Case Is = "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", _
                   "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"
                   Klar = Klar & Mid(Name, i, 1)
           End Select
       Next i
       OrdnerSauber = Klar
    End Function
    
    Function PfadWahl() As String
       Dim SuchDialog As FileDialog
       Set SuchDialog = Application.FileDialog(msoFileDialogFolderPicker)
       With SuchDialog
           .Title = "Bitte Verzeichnis wählen"
           .AllowMultiSelect = False
           If .Show = -1 Then
               PfadWahl = .SelectedItems(1)
           Else
               MsgBox "Vorgang abgebrochen", vbInformation
               Exit Function
           End If
       End With
    End Function
  4. Ändere den Blattnamen: Stelle sicher, dass der Blattname in Set Namensliste = ThisWorkbook.Worksheets("Tabelle1").Range("F2:F" & LeZeile) mit deinem tatsächlichen Blattnamen übereinstimmt.

  5. Führe das Makro aus: Drücke F5 oder gehe zu Run -> Run Sub/UserForm.

Dieser Code erstellt für jeden Namen in den Zellen F2 bis F1280 einen Ordner im gewählten Verzeichnis.


Häufige Fehler und Lösungen

  • Debugging-Fehlermeldung: Wenn du eine Fehlermeldung erhältst, überprüfe, ob der Blattname korrekt ist. Ändere ihn entsprechend in der Zeile, wo die Namensliste definiert wird.
  • Leere Zellen: Der Code überspringt automatisch leere Zellen, aber stelle sicher, dass du keine unerwarteten Leerzeilen in deiner Liste hast.
  • Zugriffsrechte: Stelle sicher, dass du Schreibrechte im Zielordner hast.

Alternative Methoden

Falls du kein VBA verwenden möchtest, kannst du auch manuell Ordner in Windows erstellen, aber das ist zeitaufwendig. Eine andere Möglichkeit wäre, ein PowerShell-Skript zu verwenden, um die Ordner aus einer Textdatei zu erstellen.


Praktische Beispiele

  • Wenn in Zelle F2 „Hubert“ steht, wird im Zielverzeichnis ein Ordner mit dem Namen „Hubert“ erstellt.
  • Bei Duplikaten wie „Maria“ in F3 und F4 werden die Ordner „Maria“ und „Maria_1“ für die jeweiligen Zellen erstellt.

Tipps für Profis

  • Fehlerbehandlung einfügen: Du kannst die Fehlerbehandlung im VBA-Code hinzufügen, um spezifische Fehlermeldungen auszugeben.
  • Dynamische Bereiche: Überlege, wie du den Bereich dynamisch anpassen kannst, falls du mehr oder weniger Namen hast.
  • Benutzerfreundlichkeit: Füge eine Fortschrittsanzeige ein, wenn du viele Ordner erstellst, um die Benutzererfahrung zu verbessern.

FAQ: Häufige Fragen

1. Kann ich die Funktion auch für andere Spalten verwenden?
Ja, du kannst die Spalte in der Zeile Set Namensliste = ThisWorkbook.Worksheets("Tabelle1").Range("F2:F" & LeZeile) ändern, um eine andere Spalte zu verwenden.

2. Welche Excel-Version wird benötigt?
Der Code funktioniert in allen Versionen von Excel, die VBA unterstützen, wie Excel 2010, 2013, 2016 und 2019.

3. Was passiert, wenn der Ordner bereits existiert?
Der Code erstellt einen neuen Ordner mit einer fortlaufenden Nummer, wenn der Ordner bereits existiert.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige