大体でIT

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

大体でIT

Excel VBAで、複数ファイルを選択するには、GetOpenFileNameで「MultiSelect」を「True」にするとできます。選択した複数ファイルをまとめるには、選択ファイルをループして「Copy」を使います。選択した複数ファイルをまとめる方法について、マスターしていきましょう。

はじめに

この記事では、複数ファイルを選択して、選択した複数ファイルをまとめる方法について、ご紹介します。

ファイル選択用ダイアログで、複数ファイルを選択したい場合は、「GetOpenFilename」で「MultiSelect」を「True」にするとできます。

複数ファイルのパスを取得して、ファイルを開いて値をコピーすることで、選択した複数ファイルをまとめることができます。

複数ファイルを選択してまとめる方法について、マスターしていきましょう。

では、複数ファイルを選択してまとめる方法について、解説していきます。

この記事を読むメリット

  • 複数ファイルを選択してまとめる方法がわかります。

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

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

目次

複数ファイルを選択する

複数ファイルを選択してみます。

GetOpenFilenameでMultiSelectを使う

複数ファイルを選択したい場合は、「GetOpenFilename」で「MultiSelect」を「True」にするとできます。

Sub TEST1()
  
  Dim A
  'ファイル選択用のダイアログを表示
  A = Application.GetOpenFilename("Excel,*.xlsx", MultiSelect:=True)
  
  '取得したファイルパスを出力
  For i = 1 To UBound(A)
    Debug.Print A(i)
  Next
  
End Sub

では、実行してみます。

こんな感じで、複数ファイルを選択することができます。

複数ファイルを選択できる

複数ファイルを選択することができます

開くをクリックすると、選択した複数ファイルのファイルパスを取得できます。

複数ファイルのパスを取得できた

選択した複数ファイルのファイルパスを取得できます

選択した複数ファイルのファイルパスを取得できました。

キャンセルで処理を終了する

ただ、このままのVBAコードだと、キャンセルをクリックした場合にエラーとなってしまいます。

ちょっとやってみます。

キャンセルをクリックするとエラー

キャンセルをクリックしてみます。

キャンセルをクリックしてみます

キャンセルを押した場合は、配列ではないのでエラーとなります。

キャンセルを押した場合は、配列ではないのでエラーとなります

なので、キャンセルの場合は処理を終了するVBAコードを追加してあげます。

キャンセルの場合は処理を終了する

キャンセルを押した場合は、GetOpenFilenameで取得できる値は、配列ではなくなります。

なので、「配列ではない」場合に、処理を終了させます。

Sub TEST2()
  
  Dim A
  'ファイル選択用のダイアログを表示
  A = Application.GetOpenFilename("Excel,*.xlsx", MultiSelect:=True)
  'キャンセルの場合処理を終了
  If IsArray(A) = False Then Exit Sub
  
  '選択したファイルパスを出力
  For i = 1 To UBound(A)
    Debug.Print A(i)
  Next
  
End Sub

上記のVBAコードを追加することで、キャンセルを押した場合に処理を終了させることができます。

最初に開くフォルダを設定

最初に開くフォルダを設定してみます。

最初に開くフォルダを設定するVBAコードは、次のようになります。

Sub TEST3()
  
  '最初に開くフォルダを指定
  With CreateObject("WScript.Shell")
    .CurrentDirectory = ThisWorkbook.Path
  End With
  
  Dim A
  'ファイル選択用のダイアログを表示
  A = Application.GetOpenFilename("Excel,*.xlsx", MultiSelect:=True)
  'キャンセルの場合処理を終了
  If IsArray(A) = False Then Exit Sub
  
  '選択したファイルパスを出力
  For i = 1 To UBound(A)
    Debug.Print A(i)
  Next
  
End Sub

実行すると、「Thisworkbook.Path」である「デスクトップ」を最初に開くことができます。

最初に開くフォルダを設定できた

最初に開くフォルダを設定できました

最初に開くフォルダを設定できました。

複数ファイルを選択して1つにまとめる

複数ファイルを選択して1つにまとめる、というのをやってみます。

1つのファイルから値を取得

まずは、1つのファイルを選択して、値を取得してみます。

1つのファイルを選択して値を取得したい

1つのファイルを選択して、値を取得してみます。

1つのファイルを選択して、値を取得してみます

こちらのファイルのデータを取得してみます。

こちらのファイルのデータを取得してみます

現在作業しているファイルに、値をコピーします。

現在作業しているファイルに、値をコピーします

ファイル選択用ダイアログで、ファイルを選択して値を取得するVBAコードです。

Sub TEST4()
  
  '最初に開くフォルダを指定
  With CreateObject("WScript.Shell")
    .CurrentDirectory = ThisWorkbook.Path
  End With

  Dim A
  'ファイル選択用のダイアログを表示
  A = Application.GetOpenFilename("Excel,*.xlsx", MultiSelect:=True)
  'キャンセルの場合処理を終了
  If IsArray(A) = False Then Exit Sub
  
  '1つ目のブックを開く
  Workbooks.Open A(1)
  
  Dim B
  '貼り付け先のセル
  Set B = ThisWorkbook.Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp)
  With ActiveWorkbook.Sheets(1).Range("A1").CurrentRegion
    'データを取得
    .Resize(.Rows.Count - 1).Offset(1, 0).Copy B.Offset(1, 1)
    'ブック名を取得
    B.Resize(.Rows.Count - 1).Offset(1, 0) = ActiveWorkbook.Name
  End With
  
  ActiveWorkbook.Close False 'ブックを閉じる
  
End Sub

では、実行してみます。

ファイル選択用ダイアログで、ファイルを選択して「開く」をクリックします。

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

ファイル選択用ダイアログで、ファイルを選択して「開く」をクリックします

選択したファイルの値を取得できます。

選択したファイルの値を取得できた

選択したファイルの値を取得できました

選択したファイルの値を取得できました。

選択した複数ファイルから値をまとめる

次は、複数ファイルを選択して、選択した複数ファイルから値をまとめてみます。

複数ファイルを選択して値を取得したい

複数ファイルを選択して、複数ファイルの値を取得してみます。

複数ファイルを選択して、複数ファイルの値を取得してみます

こちらのファイルの値を取得します。

こちらのファイルの値を取得します
こちらのファイルの値を取得します
こちらのファイルの値を取得します

現在作業しているファイルに、値をコピーします。

現在作業しているファイルに、値をコピーします

選択した複数ファイルをまとめるVBAコードです。

Sub TEST5()
  
  '最初に開くフォルダを指定
  With CreateObject("WScript.Shell")
    .CurrentDirectory = ThisWorkbook.Path
  End With

  Dim A
  'ファイル選択用のダイアログを表示
  A = Application.GetOpenFilename("Excel,*.xlsx", MultiSelect:=True)
  'キャンセルの場合処理を終了
  If IsArray(A) = False Then Exit Sub
  
  '選択したファイル分ループ
  For i = 1 To UBound(A)
    
    Workbooks.Open A(i) 'ファイルを開く
    
    Dim B
    '貼り付け先のセル
    Set B = ThisWorkbook.Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp)
    With ActiveWorkbook.Sheets(1).Range("A1").CurrentRegion
      'データを取得
      .Resize(.Rows.Count - 1).Offset(1, 0).Copy B.Offset(1, 1)
      'ブック名を取得
      B.Resize(.Rows.Count - 1).Offset(1, 0) = ActiveWorkbook.Name
    End With
    
    ActiveWorkbook.Close False 'ブックを閉じる
    
  Next
  
End Sub

では、実行してみます。

ファイル選択用ダイアログで、複数ファイルを選択して「開く」を区kリックします。

ファイル選択用ダイアログで、複数ファイルを選択

ファイル選択用ダイアログで、複数ファイルを選択して「開く」を区kリックします

選択した複数ファイルの値を取得できます。

選択した複数ファイルの値を取得できた

選択した複数ファイルの値を取得できました

選択した複数ファイルの値を取得できました。

おわりに

この記事では、複数ファイルを選択して、選択した複数ファイルをまとめる方法について、ご紹介しました。

ファイル選択用ダイアログで、複数ファイルを選択したい場合は、「GetOpenFilename」で「MultiSelect」を「True」にするとできます。

複数ファイルのパスを取得して、ファイルを開いて値をコピーすることで、選択した複数ファイルをまとめることができます。

複数ファイルを選択してまとめる方法について、マスターしていきましょう。

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

関連する記事から探す

カテゴリから探す

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

サイト内を検索する

↓キーワードを入力する

アーカイブから探す