パソコンスキルの教科書

パソコンスキルの教科書

東京大学大学院卒。博士課程に進学を志すも、担当教授と折が合わず、無職になる。医者を目指すも結局断念。田舎で派遣社員として働く。「スキルがなければ、仕事ももらえない」と悟り、ビジネススキルを学ぶ。プログラミング、英語を学び、一部上場企業へ転職。年間100時間以上の業務効率化を行い、社内講師に抜擢。海外の案件を担当し、数億円のプロジェクトに携わる。個人の事業でも、月売上100万を達成。現在は、自分の価値を高めるためのスキル向上支援を行う

エクセルマクロVBAでフォルダを階層別にまとめて一括作成する方法

ページを更新しました。

fastclassinfo.com 上記のページで、最新情報を記載しています。

このページの情報は古いので、ぜひ上記のページの情報をご覧ください。

あるフォルダの中に、複数の子フォルダを作成したいときがあります。

例えば、以下のようなフォルダがあるとします。ここにはエクセルファイルが一つだけで、子フォルダはありません。

f:id:gene320:20181105200228j:plain

このフォルダに階層別に複数の子フォルダを作ります。(以下はイメージ)

f:id:gene320:20181105221502j:plain

上記のようにフォルダを作成する作業は、手入力でも可能です。

しかし、作成したいフォルダ数が多いときはマクロを使った方がラクに仕事を終わらすことができます。

実際、マクロを使えば、10コでも100コでも自動で処理を行うことができます。また、フォルダ名称を間違えずに作成することができます。

そこで、マクロを使って処理する方法を紹介します。

ページを更新しました。

fastclassinfo.com 上記のページで、最新情報を記載しています。

このページの情報は古いので、ぜひ上記のページの情報をご覧ください。

フォルダを階層別にまとめて一括作成するマクロの解説

この記事で紹介するマクロは、以下の動画で説明しています。


エクセルマクロVBAでフォルダを階層別にまとめて一括作成する方法

動画の中では、「クリア」ボタンが設定されています。しかし、機能を持っていないため、説明をしていません。

フォルダを階層別にまとめて一括作成するマクロの概要

この記事で紹介するマクロについて説明していきます。

ステップ1|エクセルに階層別にフォルダURLと作成したいフォルダ名を記入する
ステップ2|フォルダを指定し、1で記入した名称をもとにフォルダを階層別に作成する

以下で実行する前の状態と実行後の結果について詳しく紹介します。

ステップ1|エクセルに階層別にフォルダURLと作成したいフォルダ名を記入する

[1] エクセルに階層別にフォルダURLを記入する
[2] エクセルに作成したいフォルダ名を記入する

詳細は、以下の画像で示した通りです。

f:id:gene320:20181105201826j:plain

ステップ2|ステップ1で記入した情報名称をもとにフォルダを階層別に作成する

マクロを実行すると、[1]で記入した情報をもとにフォルダが作成される。

実際に、マクロを動かした後のフォルダの階層は以下です。

f:id:gene320:20181105221502j:plain

フォルダ内のExcelファイル全てに処理をするマクロを作成する前の準備

プログラムを紹介する前に準備をします。以下の2つの準備を行います。

1. エクセルに必要情報を記入する
2. VBAのプログラムを作る前にFSO操作の参照設定を行う

以下で詳しく説明します。

1. エクセルに必要情報を記入する

以下の1と2にURLと作成したいフォルダ名称を記載する

f:id:gene320:20181105202610j:plain

2. VBAのプログラムを作る前にFSO操作の参照設定を行う

このマクロを使うときは、VBEの参照設定を変更する必要があります。参照設定とは、機能拡張のことです。

このプログラムを使うのには、参照設定で以下のライブラリに追加する必要があります。

設定方法

1.VBEを開いて頂いて、「ツール」→「参照設定」
2.このライブラリにチェックを入れて、OKをクリック
・Microsoft Scripting Runtime

この設定を変更しないとマクロが動きません。忘れずに設定するようにしてください。具体的な設定方法は以下の通りです。

1.VBEを開いて、「ツール」→「参照設定」

f:id:gene320:20170613213650p:plain

2.以下の2項目にチェックを入れて、OKをクリック
・Microsoft Scripting Runtime

f:id:gene320:20171229013436p:plain

なお、Microsoft Scripting RuntimeはVBAでフォルダを操作できるようにするために必要です。

VBAのプログラムは以下で紹介

このマクロの概要は以下です。

[1] セルB2にURLが記載されているかチェック
[2] 同じ行に複数回記入されていないことを確認
[3] 同じ行に複数回記入されていた場合、処理を止める
[4] 階層別にフォルダを作成する

マクロのプログラムは以下です。

Option Explicit

Sub makefolder()
    Dim i As Long, cmax As Long, x As Long, z As Long, cnt As Long, j As Long, k As Long
    Dim ws1 As Worksheet
    Dim str As String, url As String
    Dim s As String, s1 As String
    Dim n1 As Long
    
    Dim fs As FileSystemObject
    Set fs = New Scripting.FileSystemObject
    
    Set ws1 = Worksheets("フォルダ作成")
    
    cmax = ws1.Range("A65536").End(xlUp).Row
    cnt = ws1.Range("IV4").End(xlToLeft).Column
    
    '[1] セルB2にURLが記載されているかチェック
    
    If ws1.Range("B2").Value = "" Then
        MsgBox "セルB2に「作成先のフォルダURL」を入力して下さい"
        ws1.Range("B2").Activate
        Exit Sub
    End If
    
    url = ws1.Range("B2").Value
    
    '[2] 同じ行に複数回記入されていないことを確認
    
    For i = 5 To cmax
        
        x = 0
        
        For j = 0 To cnt - 2
            If ws1.Range("B" & i).Offset(0, j).Value <> "" Then
                x = x + 1
            End If
        Next
        
        If x > 1 Then
            z = z + 1
        End If
    Next
    
    '[3] 同じ行に複数回記入されていた場合、処理を止める
    
    If z > 0 Then
        MsgBox "入力情報を見直してください"
        Exit Sub
    End If
    
    '[4] 階層別にフォルダを作成する
   
    For j = 0 To cnt - 2
        For i = 5 To cmax
            s = ""
            
            If ws1.Range("B" & i).Offset(0, j).Value <> "" Then
                
                s1 = ws1.Range("B" & i).Offset(0, j).Value
                
                For k = 0 To j
                    
                    If k - j = 0 Then
                        Exit For
                    End If
                    
                    n1 = ws1.Range("B" & i).Offset(0, j - k - 1).End(xlUp).Row
                    s1 = ws1.Range("B" & n1).Offset(0, j - k - 1).Value & "\" & s1
                
                Next
                
                s = url & "\" & s1
                fs.CreateFolder s
    
            End If
        
        Next
    Next

    Set fs = Nothing

End Sub

動画で紹介したエクセル(マクロ入り)はこちらからダウンロードできます

この記事で紹介しているマクロ入りのエクセルファイルは以下のダウンロードできます。


エクセルマクロVBAでフォルダを階層別にまとめて一括作成する方法

動画の中では、「クリア」ボタンが設定されています。しかし、機能を持っていないため、説明をしていません。

以下のフォームにメールアドレスを入力いただくと、返信メールからエクセルファイルをダウンロードできます。

エクセルを自分用に編集アレンジして使いたいなら、エクセルマクロの無料動画で学ぼう

この記事では、フォルダ内のExcelファイル全てを処理をする方法を紹介しました。

しかし、この記事を見たとき、「もっと○○ができるのでは?」や「ここはなんとかならないのか」と感じる人は少なくないはずです。

例えば、「他の条件を付け加えたい」や「さらに機能を増やしたい」といった要望が出るかもしれません。

このような要望を満たすには、マクロを勉強して自力でマクロを編集できるようになる必要があります

もし、自力でマクロを編集できるようになれば、今より仕事の効率はグッと上がります。

実際、私も自力でマクロを書けるようになってからは、仕事の生産性が一気に上がりました。

他の人が30分~1時間かけて行う仕事が、ボタン一つで終わらせることができるようになったのです。その結果、周囲からの信頼も増し、仕事で高い評価を得られるようになりました。

ただ、要望に応えるようになるためには、マクロを学ぶ必要があります。

まずは無料でマクロを勉強してみる

ウェブや書籍で勉強すれば、マクロを習得できると考えている人は少なくありません。

しかし、仕事で使えるマクロを習得したいなら、仕事で使える部分に特化した教材で学ぶことをお勧めします。

なぜなら、ウェブや書籍には仕事に関係しない部分まで提供していることが多いからです。

例えば、マクロ初心者なのに配列を学ぼうとする人がいます。実は配列なしでも仕事で使えるマクロを書くことは可能です。

しかし、マクロ初心者ほど「全ての知識が必要だ」と考えて、無駄な学習に時間を使ってしまうのです。詳しくは、こちらの記事で紹介しています。

www.fastclassinfo.com

www.fastclassinfo.com

そこで、私がお勧めするのは仕事に直結するマクロ教材です。とくにお勧めするのは、こちらの無料オンライン動画です。

なぜなら、仕事に直結する部分に絞って、エクセルマクロを学ぶことができるからです。

マクロの作り方・考え方から解説しているので、教材をしっかり学べばここで紹介したマクロをゼロから書けるようになります。

マクロ初心者が、仕事に直結したいマクロを学ぶなら、まずはこちらの無料オンライン動画を試すのがいいです。

興味がある人は、まずは無料でエクセルマクロの勉強を始めてみてください。

もっと学びたいと感じたら、さらに深く勉強をしてみることをお勧めします。