大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、フォルダを選択して、選択したフォルダ内のブックをまとめるには、FileDialogと、Dir関数、Copyを使うとできます。フォルダ選択用のダイアログでフォルダを選択して、ブックをまとめることができると便利です。ブックをまとめる方法について、マスターしていきましょう。

はじめに

この記事では、選択したフォルダ内のブックをまとめる方法について、ご紹介します。

手順としては、次のようになります。

  • FileDialogせフォルダを選択
  • Dir関数を使って、選択したフォルダパスからすべてのファイル名を取得
  • 取得したファイル名を使ってブックを開く
  • Copyで値を取得

実務では、複数ブックを1つにまとめたいといった場合があります。

フォルダ選択用ダイアログを使って、まとめたいブックのフォルダを選択できると便利になります。

では、選択したフォルダ内のブックをまとめる方法について、解説していきます。

この記事を読むメリット

  • ダイアログでフォルダを選択して、フォルダ内のブックをまとめる方法がわかります。

本記事の内容を動画でまとめています。

本記事の内容を動画でまとめています。

VBAコードの作成手順について、動画で確認することができます。

目次から見たい項目へ移動すると便利ですよ。

目次

選択したフォルダ内のブックを1つにまとめたい

やりたい内容は、選択したフォルダ内のブックを1つにまとめたい、ということになります。

やりたい内容

フォルダを選択して、フォルダ内のブックをまとめるVBAコードを作成していきます。

選択したフォルダ内のブックをまとめたい

フォルダを選択して、フォルダ内のブックをまとめたいです。

フォルダを選択して、フォルダ内のブックをまとめたいです

1つのブックにまとめます。

1つのブックにまとめます

フォルダ選択用ダイアログで、フォルダを選択してフォルダ内のブックをまとめます。

フォルダ選択用ダイアログでフォルダを選択

フォルダ選択用ダイアログで、フォルダを選択して、OKをクリックします。

フォルダを選択して、OKをクリックします

選択したフォルダ内のブックをまとめることができます。

選択したフォルダ内のブックがまとめられる

選択したフォルダ内のブックをまとめることができます

選択したフォルダ内のブックをまとめることができました。

では、VBAコードを段階的に作成していきます。

VBAコードを作成

フォルダ選択用ダイアログでフォルダを選択して、フォルダ内のブックをまとめるVBAコードを作成していきます。

選択したフォルダのフォルダパスを取得

フォルダ選択用ダイアログを表示して、選択したフォルダのパスを取得してみます。

Sub TEST1()
  
  Dim A
  'フォルダ選択用のダイアログ
  With Application.FileDialog(msoFileDialogFolderPicker)
    .InitialFileName = ThisWorkbook.Path '最初に開くフォルダ
    If .Show = False Then Exit Sub 'キャンセルで処理を終了
    A = .SelectedItems(1) '選択したフォルダのフォルダパスを取得
  End With
  
  Debug.Print A
  
End Sub

実行すると、フォルダ選択用ダイアログが表示されます。

フォルダ選択用のダイアログが表示される

フォルダ選択用ダイアログが表示されます

フォルダを選択して、OKをクリックします。

フォルダを選択してOKをクリック

フォルダを選択して、OKをクリックします

選択したフォルダのパスを取得できます。

選択したフォルダのパスを取得できる

選択したフォルダのパスを取得できます

選択したフォルダのパスを取得できました。

Dirを使って選択したフォルダ内の1つのブックを取得

Dir関数使えば、選択したフォルダ内の、いずれかの1つのブック名を取得することができます。

フォルダ選択用ダイアログでフォルダを選択して、選択したフォルダからいずれか1つのブックの値を取得してみます。

VBAコードの手順は、次のようになります。

  • Dir関数でフォルダ内の1つのブック名を取得
  • ブックを開く
  • データ部分をコピー
  • ブック名を入力
  • ブックを閉じる

VBAコードは、次のようになります。

Sub TEST2()
  
  Dim A
  'フォルダ選択用のダイアログ
  With Application.FileDialog(msoFileDialogFolderPicker)
    .InitialFileName = ThisWorkbook.Path '最初に開くフォルダ
    If .Show = False Then Exit Sub 'キャンセルで処理を終了
    A = .SelectedItems(1) '選択したフォルダのフォルダパスを取得
  End With
  
  Dim B
  'フォルダ内の1つのブック名を取得
  B = Dir(A & "\*")
      
  'ブックを開く
  Workbooks.Open A & "\" & B
  
  Dim C
  '作業ファイルの最終行を取得
  Set C = ThisWorkbook.Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp)
  With ActiveWorkbook.Sheets(1).Range("A1").CurrentRegion
    'データをコピー
    .Resize(.Rows.Count - 1).Offset(1, 0).Copy C.Offset(1, 1)
    'ブック名を入力
    C.Resize(.Rows.Count - 1).Offset(1, 0) = ActiveWorkbook.Name
  End With
  
  'ブックを閉じる
  ActiveWorkbook.Close False
  
End Sub

では、VBAコードを実行してみます。

選択したフォルダ内の1つのブックを取得

実行すると、フォルダ選択用のダイアログが表示されますので、フォルダを選択して、OKをクリックします。

ダイアログで、フォルダを選択して、OKをクリックします

選択したフォルダ内の、1つのブックを取得できます。

選択したフォルダ内の、1つのブックを取得できます

選択したフォルダ内の、1つのブックの値を取得できました。

Dirをループしてフォルダ内のブックを1つにまとめる

次は、Dir関数をループして、選択したフォルダ内のブックを、1つにまとめてみます。

ポイントは、「B = Dir()」というように、入力して次のブックを取得する点になります。

Sub TEST3()
  
  Dim A
  'フォルダ選択用のダイアログ
  With Application.FileDialog(msoFileDialogFolderPicker)
    .InitialFileName = ThisWorkbook.Path '最初に開くフォルダ
    If .Show = False Then Exit Sub 'キャンセルで処理を終了
    A = .SelectedItems(1) '選択したフォルダのフォルダパスを取得
  End With
  
  Dim B
  'フォルダ内の1つのブック名を取得
  B = Dir(A & "\*")
  
  Do While B <> ""
    
    'ブックを開く
    Workbooks.Open A & "\" & B
    
    Dim C
    '作業ファイルの最終行を取得
    Set C = ThisWorkbook.Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp)
    With ActiveWorkbook.Sheets(1).Range("A1").CurrentRegion
      'データをコピー
      .Resize(.Rows.Count - 1).Offset(1, 0).Copy C.Offset(1, 1)
      'ブック名を入力
      C.Resize(.Rows.Count - 1).Offset(1, 0) = ActiveWorkbook.Name
    End With
    
    'ブックを閉じる
    ActiveWorkbook.Close False
    
    B = Dir() '次のブック名を取得
    
  Loop
  
End Sub

ブック名をすべて取得すると、「Dir()」は「空欄」を返します。

なので、空欄になるまで、「Do While」でループするという感じになります。

では、VBAコードを実行してみます。

選択したフォルダ内のブックをまとめる

実行するとフォルダ選択用ダイアログが表示されますので、フォルダを選択して、OKをクリックします。

フォルダを選択して、OKをクリックします

選択したフォルダ内のブックをまとめることができます。

選択したフォルダ内のブックをまとめることができます

選択したフォルダ内のブックをまとめることができました。

Dir関数を使えば、フォルダ内のすべてのブック名を取得できるので、追加したブックの値も同じVBAコードで取得できます。

ブックを追加して実行してみる

ブックを追加してみます。

ブックを追加してみます

VBAコードを実行して、ダイアログでフォルダを選択してOKをクリックします。

ダイアログで、フォルダを選択してOKをクリックします

追加したブックのデータも取得できます。

追加したブックのデータも取得できます

追加したブックのデータも取得できました。

おわりに

この記事では、選択したフォルダ内のブックをまとめる方法について、ご紹介しました。

手順としては、次のようになります。

  • FileDialogせフォルダを選択
  • Dir関数を使って、選択したフォルダパスからすべてのファイル名を取得
  • 取得したファイル名を使ってブックを開く
  • Copyで値を取得

実務では、複数ブックを1つにまとめたいといった場合があります。

フォルダ選択用ダイアログを使って、まとめたいブックのフォルダを選択できると便利になります。

選択したフォルダ内のブックをまとめる方法について、マスターしていきましょう。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

サイト内を検索する

↓キーワードを入力する

アーカイブから探す