Excel VBA

エクセルVBAのFileSystemObjectで大量のフォルダを作成する。

ファイルを管理するのに便利な「フォルダ」

きれいにまとめると、ファイルの検索もラクになります。

そんな便利なフォルダですが、大量に作成する時は大変です。
(大量にフォルダを作成する経験はあまり無いですが、年度や会計期間が変わった時にファイルを格納するフォルダを準備しておくのかもしれません)

この記事では「フォルダを作っておいてほしい」という作業をすぐに終わらせる「エクセルVBAコード」を紹介します。

こんな方におすすめ

  • フォルダ作成作業に追われている方
  • エクセルVBAで出来ることを知りたい方
  • 業務効率化をしたい方


フォルダを一つだけ作るのはとてもかんたん

誰もが一度は経験のある「フォルダ作成」

一つだけフォルダを作成する場合はとても簡単です。

フォルダ作成方法

  1. マウスを右クリック
  2. 【新規作成】→【フォルダ】を選択
  3. フォルダに名前を付ける

ただ、大量のフォルダを作成する場合は、時間がかかってしまいます。


大量のフォルダ作成となると大変

例えば、作成するフォルダの数が数百個だとしたら・・・。

さらに「すぐにフォルダを作成してほしい」と言われたら・・・とても大変です。

フォルダ名を間違えてしまうかもしれないし、作成漏れがあるかもしれません。


単純作業は自動化してしまうのが得策

大量のフォルダ作成などの単純作業は、自分でなんとかできるかもしれない・・・でもやりたくない。

そのように感じた業務は自動化すると「仕事が速くなる」だけでなく「ストレスを軽減」することにもつながります。


フォルダ作成はエクセルVBAでできる

エクセルVBAというと「エクセルの処理を自動化する」というイメージだと思います。

実は、エクセルVBAはフォルダ操作もできてしまいます。

しかもプログラムのコードもそこまで長くないので、マネをすれば誰でも使えるようになります。


ポイント

エクセルVBAの作業自動化は「速さ」「正確性」だけではありません。

一度プログラムを作ってしまえば、次回以降の作業も自動化できてしまいます。

例えば、「毎年同じフォルダを作成しないといけない」場合は、メリットがあります。
やることは、翌年に同じプログラムを動かすだけです。

前回作ったプログラムがあれば、プログラムを作る時間も必要ないのでさらに時短につながります。


フォルダ作成プログラムの紹介

フォルダ作成プログラムの紹介をします。

  • プログラム作成の準備
  • コードの紹介
  • プログラムの動作確認
  • コードの解説

の順番に紹介していきます。


プログラム作成の準備

エクセルVBAプログラムを作成したことがない方は「環境設定」が必要です。
(5分程でできてしまいます)


こちらもCHECK

【お手軽】エクセルVBAの開発環境の作り方を紹介

仕事でエクセルを使う方は多いと思います。 毎日使っていると「作業を自動化するプログラムができたらいいな」と感じている方もいらっしゃるかもしれません。 エクセルVBAを始めるためには「プログラムを開発す ...

続きを見る

エクセルの環境設定ができている方はこちらの設定をしてください。

メモ

  1. マクロ有効ブックを作成
  2. エクセルファイルを開いた後【Alt + F11】を押してVBE画面を開く
  3. メニューバーより【ツール】→【参照設定】を選択
  4. 参照設定より【Microsoft Scripting Runtime】にチェックを入れて【OK】ボタンを押す。


参照設定でMicrosoft Scripting Runtimeにチェックを入れる



コードはこちら

フォルダ作成のコードはこちらです。

Sub フォルダの作成()
  Dim fs As Object, folderName As String, i As Long, lastRow As Long
  Set fs = New Scripting.FileSystemObject
  
  lastRow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
  
  For i = 1 To lastRow
  folderName = Sheet1.Cells(i, 1)
    Select Case fs.FolderExists(ThisWorkbook.Path & "\" & folderName)
      Case True
        'フォルダが存在する場合は何もしない
      Case False
      fs.CreateFolder (ThisWorkbook.Path & "\" & folderName)
    End Select
  Next
  Set fs = Nothing
End Sub

このコードを書くことで、このエクセルファイルと同じフォルダの場所に「フォルダを作成」することができます。


プログラムの動作を確認

コードだけだとイメージが浮かびにくいので、具体的な例を紹介します。

作成するフォルダの例

このようなフォルダ作成で試してみたいと思います。

  • 都道府県名ごとにフォルダを作成

合計で47個フォルダを作成する必要があります。
手作業でもなんとかできますが、できればやりたくない作業・・だと思います。

フォルダ作成プログラムのコードを書く他にやることがあります。

やること

  • 作成するフォルダ名をエクセルのセルに入力する

都道府県名をエクセルセルに入力するのは思いのほか大変・・・と思いますが、インターネットで調べると簡単に見つけられます。


都道府県名はこちらのサイトのモノを使いました。

都道府県名一覧


先ほどのサイトでコピーした都道府県一覧をエクセルシート(シート1)のA列に貼り付けます。

都道府県名一覧を貼り付ける


都道府県名一覧の入力ができたら、プログラムを実行するだけです。

プログラムのコードを書いたエクセルファイルを開いた状態で【Alt + F8】を押します。

その後、実行したプログラムを選んで【実行】ボタンを押します


プログラムを実行する前は、プログラム実行用のエクセル(マクロ有効ブック)がフォルダに一つだけ入っている状態です。

プログラム実行前




プログラムを実行すると、先ほど入力した都道府県一覧文のフォルダが作成されました。

プログラム実行後


都道府県名ごとのフォルダを作る方はそのまま使えると思います。

それ以外の方も、例えば「支店名」「取引先名」「商品名」・・・のように作成するフォルダを変えると便利かもしれません。


少しだけコードを解説

プログラムがどのようになっているのか気になる方もいらっしゃるかもしれません。

少しだけコードを解説します。

まず、最初のコードから

Dim fs As Object, folderName As String, i As Long, lastRow As Long

このコードは「変数の宣言」をしています。

この後に使うデータを入れるための入れ物のようなものです。

fs:フォルダ作成をするための道具を入れるためのもの

folderName:作成するフォルダ名を入れるもの

i:プログラムの繰り返し分(For文)で処理する回数を管理するためのもの

lastRow:フォルダ作成をする回数(数字)を入れるもの

この時点では変数を作っただけなので、中には何も入っていません。


次のコードです。

Set fs = New Scripting.FileSystemObject

先ほど作成した変数【fs】にフォルダ操作をするための道具を入れています。
(FileSystemObjectがフォルダ作成などを行うものです)

このコードを書くことで、【fs】という名前を使えば、FileSystemObjectの持っているワザ(フォルダ管理関連の操作)が使えるようになります。


こちらのコードは最終行を取得するものです。

lastRow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row

作成したいフォルダの数だけ、エクセルセルに名前を入力しました。(今回は都道府県名一覧)

作成するフォルダ数が毎回決まっていればいいのですが、実務では毎回違うのが当たり前です。
(今回は10個、次回は1000個など一定ではありません)

そんな時に、毎回データ数を数えてからプログラムを書き換えるのは大変です。
対策としては、最終行を取得してフォルダ作成する数をプログラムに自動的に数えてもらうのが便利です。

最終行取得についてはこちらの記事で紹介しています。

こちらもCHECK

タイトル画像
Excel VBAで最終行を取得する方法【繰り返し処理で必須】

Excel VBAでプログラムを作っていると、よく使うのが「最終行の取得」です。 目次1 最終行の取得方法はこれ1.1 コードの説明2 最終行取得が活躍するのはFor文2.1 For文と相性がいい理由 ...

続きを見る

今回のコードでは、lastRowという変数に【47】という数字が入ります。
(都道府県の数の合計と一致しています)

次は繰り返し文です。

For i = 1 To lastRow

Next

1からlastRow(今回は47)まで処理を続けるという意味です。

1回目の処理では【i】の中に1が入ってプログラムが動きます。
1回目の処理が終わったら【i】の中に2が入って同じ処理が行われます。

これを繰り返して最後(47回)まで処理を繰り返していきます。

※繰り返す処理はForとNextの間に書きます。


こちらのコードは繰り返す処理の内容です。

  folderName = Sheet1.Cells(i, 1)
    Select Case fs.FolderExists(ThisWorkbook.Path & "\" & folderName)
      Case True
        'フォルダが存在する場合は何もしない
      Case False
      fs.CreateFolder (ThisWorkbook.Path & "\" & folderName)
    End Select

行っていることは・・・

  1. folderNameという変数に作成したいフォルダ名を入れる。
    (A列のセルの値を変数folderNameに入れています)
  2. Select Caseでは、フォルダ作成前に「これから作成するフォルダが既に作られているか」判定しています。
    同じフォルダの中に同じ名前のフォルダを作成するとエラーになってしまうので、事前に防ぐようにしています。
  3. もしフォルダが既に作られていた場合は、何もしない(フォルダを作成しないで次のフォルダ名を確認)
  4. まだフォルダを作っていない場合はfolderNameで取得した名前でフォルダを作成します。
  5. この処理を指定した回数だけ繰り返します。


ポイント

FileSystemObjectのコードを紹介します。

FolderExistsは「指定のフォルダの中」に「指定した名前のフォルダ」が存在しているか確認するコードです。
(存在していればTrue、存在していない場合はFalseを返すものです)

  • fs.FolderExists(ThisWorkbook.Path & "\" & folderName)

もうひとつのコードがこちら

  • fs.CreateFolder (ThisWorkbook.Path & "\" & folderName)

こちらはフォルダを作成するコードです。
(カッコの中にフォルダパスとフォルダ名を入力します)


【番外編】参照設定にチェックするのがイヤならこのコード

先ほど紹介したコードは【参照設定】→【Microsoft Scripting Runtimeにチェック】するのが面倒・・という場合のコードも紹介します。

その場合は、コードを少し変えることで同じ処理ができるようになります。

Sub フォルダの作成()
  Dim fs As Object, folderName As String, i As Long, lastRow As Long
  
  Set fs = CreateObject("Scripting.FileSystemObject")
  
  lastRow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
  
  For i = 1 To lastRow
  folderName = Sheet1.Cells(i, 1)
  
    Select Case fs.FolderExists(ThisWorkbook.Path & "\" & folderName)
      Case True
        'フォルダが存在する場合は何もしない
      Case False
      fs.CreateFolder (ThisWorkbook.Path & "\" & folderName)
    End Select
  Next
  Set fs = Nothing
End Sub


先ほどのコード(参照設定にチェックを入れた場合のコード)と違うのがこちらの部分です。

Set fs = CreateObject("Scripting.FileSystemObject")

この部分でFileSystemObjectを使えるようにすれば、それ以降のコードは同じように書くだけです。


追加でフォルダを作成したい場合は

これまで紹介したプログラムでは、A列のセルに入力した名前でフォルダを作成するものでした。

そこで気になるのが「追加でフォルダを作成したい場合」だと思います。


結論は「A列のセルに続けて入力」して「プログラムを実行する」だけです。
(今回の例でいうと、都道府県一覧の下・・・A列の48行目のセルに作成したいフォルダ名を入力)

ポイント

今回紹介したプログラムでは「既に作成した名前のフォルダの場合は、何もしない」ようになっています。

そのため、プログラムの処理は・・

  1. 今までのフォルダ名の処理はスキップ
  2. 新たに追加した名前のフォルダだけ作成

となります。


【結論】エクセルVBAはフォルダ操作もできる

最近では、Pythonなどのプログラミング言語が人気で「エクセルVBAは時代遅れ」と言われることがあります。

ですが、目的が違う場合はエクセルVBAが最適な場合もあります。

(できれば)実現したい目的ごとにプログラミング言語を使い分けるのが良いのかもしれませんが、少なくともMicrosoft Office製品の操作に関してはエクセルVBAで十分かな、と思います。
(フォルダ操作もできるので、便利です)

普段の仕事の中でエクセルを使う機会が多くて、メンドウな作業が多い方はエクセルVBAがお得です。


「エクセルVBAを使えるようになりたい」と思った方は、オンラインレッスンを活用すると習得しやすいと思います。

こちらもCHECK

Excel vbaを学びたいなら。レッスンサイトを紹介

「AIが仕事を奪う」などのニュースを聞くようになりました。単純作業はプログラムが得意とする分野なので、事務作業もAIが行う時代も遠くないかもしれません。 普段事務作業をしている方からすると「めんどうな ...

続きを見る

いろいろなサービスがありますが、金額面でもUdemyが始めやすい気がしています。
(とはいえ自分に合ったサービスの利用がスキルアップの近道です)


>>>世界最大級のオンライン学習サイトUdemy



あとがき

今回は、エクセルVBAでフォルダを作成する方法を紹介しました。

フォルダは、データの管理がしやすくなる半面「大量に作るのが面倒」な作業につながります。

フォルダの作成の目的は「ファイルの管理」なので、その手段である「フォルダ作成」はサクッと終わらせるのが得策です。

この記事を見て「エクセルVBAって面白そう」と感じていただければうれしいです。

今後も業務改善に役立つ情報を発信していきます。

-Excel VBA
-, , ,