• ベストアンサー

VBAでリスト通りにフォルダを作成

excelのvbaでアクティブブックが入っているフォルダの中に"sheet1"のA列のリスト通りに名前を付けフォルダを作成したいです。リストに重複した名前がない場合はできますが、図のように重複した名前が入っているとどうすればいいか分からなく、ここに質問します。 どなたか知恵を貸していただけませんか? どうぞよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • SI299792
  • ベストアンサー率47% (788/1646)
回答No.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

bwcnn017
質問者

お礼

ご回答ありがとうございました。 望んでいたぴったりのご回答でした。 お二人ともありがとうございました。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.1

同じ名前のブックは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されている。 ブックの例に修正するのは簡単だろう。

bwcnn017
質問者

補足

さっそくのご回答ありがとうございました。 同じ名前のフォルダは名前の後ろに(番号)を付けて作成することはよくわかりました。 ただし、リストにある重複フォルダ名の数だけ作りたいのではなく、1個だけ作る場合はどうすればよろしいでしょうか? 説明が足りなかったので申し訳ございませんでした。 よろしくお願いいたします。

関連するQ&A