Search code examples
vbadirectoryspace

Create folders using 2 column values from Excel


So I need to make a whole bunch of folders from a spreadsheet. I have in column A the Surname and in Column B the name of a person, I need to generate folders based on this.

I have found a bit of code that someone else posted, that works, but I need to add a space between the name and surname in the created folder. The original poster said that they did manage to add a space, but never indicated how.

Sub MakeFoldersForEachRow()
Dim Rng As Range
Dim maxRows, maxCols, r, c As Integer
Dim s As String
Set Rng = Selection
maxRows = Rng.Rows.Count
maxCols = Rng.Columns.Count
For r = 1 To maxRows
    s = ""
    For c = 1 To maxCols
        s = s & Rng(r, c)
    Next c
    If Len(Dir(ActiveWorkbook.Path & "\" & s, vbDirectory)) = 0 Then
        MkDir (ActiveWorkbook.Path & "\" & s)
        On Error Resume Next
    End If
Next r

End Sub


Solution

  • Please, try the next code:

    Sub createFoldNamesFromTwoColumns()
     Dim sh As Worksheet, lastR As Long, fldName As String, i As Long
     
     Set sh = ActiveSheet 'use here your necessary sheet
     lastR = sh.Range("A" & sh.Rows.count).End(xlUp).row
     For i = 1 To lastR
        fldName = sh.Range("A" & i) & " " & sh.Range("B" & i)
        If Dir(ActiveWorkbook.Path & "\" & fldName, vbDirectory) = "" Then
            MkDir ActiveWorkbook.Path & "\" & fldName
        End If
     Next i
    End Sub
    

    Edited:

    I could see now your last request, meaning to process the selected columns:

    Sub createFoldNamesFromTwoSelectedColumns()
     Dim sh As Worksheet, rngSel As Range, C1 As Long, lastR As Long, fldName As String, i As Long
     
     Set sh = ActiveSheet
     Set rngSel = Selection
    
     If rngSel.Columns.count <> 2 Then MsgBox "You must select two columns!": Exit Sub
     C1 = rngSel.cells(1).Column: Stop
     
     lastR = sh.cells(sh.Rows.count, C1).End(xlUp).row
     For i = 1 To lastR
        fldName = sh.cells(i, C1) & " " & sh.cells(i, C1 + 1)
        If Dir(ActiveWorkbook.Path & "\" & fldName, vbDirectory) = "" Then
            MkDir ActiveWorkbook.Path & "\" & fldName
        End If
     Next i
    End Sub