- ベストアンサー
VBAでリスト通りにフォルダを作成
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
on error gotoを使ってエラーを無視すればいいです。 ' Sub Macro1() ' For iy = 1 To Cells(Rows.Count, "A").End(xlUp).Row On Error Resume Next MkDir Cells(iy, "A") On Error GoTo 0 Next iy End Sub on error gotoが嫌なら、以下の方法があります。 dir で、vbDirectoryを指定すれば、フォルダの有無がわかります。 ' Sub Macro2() ' Dim FileName As String ' For iy = 1 To Cells(Rows.Count, "A").End(xlUp).Row FileName = Cells(iy, "A") Debug.Print Dir(FileName) ' If Dir(FileName, vbDirectory) = "" Then MkDir FileName End If Next iy End Sub
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17070)
同じ名前のブックは1つのフォルダーでは作れないのだから、こんなことを言っても仕方がないのではないか。たとえば シートの自動的命名例があるように、(1)、(2)、・・のようなものを、1,2,3・・などのあとに、ひつっけて作るのがどうか。 ()内の数字はWorkSheetFunction.COUNTIF関数を使えば簡単。 Sheet名の例でテスト。 下記で”Sheet” の部分は、他の文字列にすることはできる。 Sub test01() Set sh1 = Worksheets("シート名リスト") For i = 1 To 7 c = Application.WorksheetFunction.CountIf(sh1.Range("A1:A" & i), sh1.Cells(i, "A")) If c = 1 Then a = "" Else a = "(" & c & ")" End If MsgBox a '-- Worksheets.Add n = "Sheet" & sh1.Cells(i, "A") & a sh1.Cells(i, "B") = n MsgBox n ActiveSheet.Name = n Next i End Sub 「シート名リスト」シートではA列は元データ、B列で作ってはという案 A列 B列 1 Sheet1 1 Sheet1(2) 2 Sheet2 2 Sheet2(2) 5 Sheet5 5 Sheet5(2) 5 Sheet5(3) となり、上記は確認用だが、シート名はB列の名でADDされている。 ブックの例に修正するのは簡単だろう。
補足
さっそくのご回答ありがとうございました。 同じ名前のフォルダは名前の後ろに(番号)を付けて作成することはよくわかりました。 ただし、リストにある重複フォルダ名の数だけ作りたいのではなく、1個だけ作る場合はどうすればよろしいでしょうか? 説明が足りなかったので申し訳ございませんでした。 よろしくお願いいたします。
お礼
ご回答ありがとうございました。 望んでいたぴったりのご回答でした。 お二人ともありがとうございました。