大体でIT

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

大体でIT

Excel VBAを使って、複数ブックから値を抽出するには、Dir関数を使ってブックをループして、「ForとIf」を使って値を抽出するとできます。複数ブックから値を抽出する作業を自動化して、効率化していきましょう。

はじめに

この記事では、複数ブックから値を抽出する方法について、ご紹介します。

フォルダ内の複数のブック名を取得するには、「Dir関数」をループするとできます。

Dir関数を使って取得したファイルの値から、「ForとIf」を使って値を抽出することができます。

抽出する値の入力は、インプットボックスを使うと便利です。

複数ブックから値を抽出する方法について、マスターしていきましょう。

では、複数ブックから値を抽出する方法について、解説していきます。

この記事を読むメリット

  • 複数ブックから条件一致した値を抽出する方法がわかります。

本記事の内容を動画にて解説しております。

本記事の内容を動画にて解説しております。

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

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

目次

複数ブックから条件一致する値を抽出したい

複数ブックから条件一致する値を抽出してみます。

やりたい内容

やりたい内容は、複数ブックから値を抽出したいということになります。

複数ブックから値を抽出したい

複数ブックから値を抽出したいです

抽出するブックは、次のようになっています。

抽出するブック

1つ目のブックです。

1つ目のブックです

2つ目のブックです。

2つ目のブックです

3つ目のブックです。

3つ目のブックです

4つ目のブックです。

4つ目のブックです

これらの複数ブックから、「商品」を検索して条件一致した値を抽出します。

1つのブックに抽出する

複数ブックから値を抽出します

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

複数ブックから値を抽出

まず、ボタンをクリックしてインプットボックスを表示します。

ボタンをクリックすると、インプットボックスが表示されます

抽出する値を入力して、OKをクリックします。

抽出する値を入力して、OKをクリックします

複数ブックから、商品が「A」の値を抽出できます。

複数ブックから商品が「A」の値を抽出できる

複数ブックから、商品が「A」の値を抽出できます

複数ブックから、商品が「A」の値を抽出できました。

複数ブックから値を抽出するVBAコードを作成していきます。

VBAコードを作成

ポイントごとに、VBAコードを作成していきます。

1つのブックから値を抽出

まずは、1つのブックから値を抽出してみます。

Sub TEST1()
    
  Range("A2:D1000").Clear 'シートを初期化
  
  Dim A
  'ファイルパスを指定
  A = ThisWorkbook.Path & "\TEST\TEST1.xlsx"
  
  Workbooks.Open A 'ファイルを開く
  
  j = 1
  With ActiveWorkbook.Sheets(1)
    For i = 2 To .Cells(Rows.Count, "B").End(xlUp).Row
      If .Cells(i, "B") = "A" Then '商品が「A」の場合
        j = j + 1
        '値を抽出
        ThisWorkbook.Sheets(1).Cells(j, "A").Resize(, 4) = .Cells(i, "A").Resize(, 4).Value
      End If
    Next
  End With
  
  ActiveWorkbook.Close False 'ブックを閉じる
      
End Sub

1つのブックから商品が「A」である値を抽出します。

1つのブックから値を抽出する

1つのブックから商品が「A」である値を抽出します

実行すると、1つのブックから商品が「A」である値を抽出できます。

1つのブックから値を抽出できる

1つのブックから商品が「A」である値を抽出できました

1つのブックから商品が「A」である値を抽出できました。

Dir関数を使って1つのブックから値を抽出

次は、「Dir関数」を使って1つのブックから値を抽出してみます。

Sub TEST2()
  
  Range("A2:D1000").Clear 'シートを初期化
  
  Dim A
  'フォルダ内の1つのファイル名を取得
  A = Dir(ThisWorkbook.Path & "\TEST\*")
  
  Workbooks.Open ThisWorkbook.Path & "\TEST\" & A 'ファイルを開く
  
  j = 1
  With ActiveWorkbook.Sheets(1)
    For i = 2 To .Cells(Rows.Count, "B").End(xlUp).Row
      If .Cells(i, "B") = "A" Then '商品が「A」の場合
        j = j + 1
        '値を抽出
        ThisWorkbook.Sheets(1).Cells(j, "A").Resize(, 4) = .Cells(i, "A").Resize(, 4).Value
      End If
    Next
  End With
  
  ActiveWorkbook.Close False 'ブックを閉じる
  
  A = Dir()
  
End Sub

Dir関数を使って、1つのブックから商品が「A」である値を抽出します。

1つのブックから値を抽出する

Dir関数を使って、1つのブックから商品が「A」である値を抽出します

実行すると、Dir関数を使って、1つのブックから商品が「A」である値を抽出できます。

1つのブックから値を抽出できる

Dir関数を使って、1つのブックから商品が「A」である値を抽出できました

Dir関数を使って、1つのブックから商品が「A」である値を抽出できました。

Dir関数を使って複数ブックから値を抽出

Dir関数をループすることで、複数ブックから値を抽出します。

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

Sub TEST3()
  
  Range("A2:D1000").Clear 'シートをクリア
  
  Dim A
  'フォルダ内の1つのブック名を取得
  A = Dir(ThisWorkbook.Path & "\TEST\*")
  
  j = 1
  'フォルダ内のブックをループ
  Do While A <> ""
  
    Workbooks.Open ThisWorkbook.Path & "\TEST\" & A 'ブックを開く
    
    With ActiveWorkbook.Sheets(1)
      For i = 2 To .Cells(Rows.Count, "B").End(xlUp).Row
        If .Cells(i, "B") = "A" Then '商品が「A」の場合
          j = j + 1
          '値を抽出
          ThisWorkbook.Sheets(1).Cells(j, "A").Resize(, 4) = .Cells(i, "A").Resize(, 4).Value
        End If
      Next
    End With
    
    ActiveWorkbook.Close False 'ブックを閉じる
    
    A = Dir() '次のファイル名を取得
  Loop
  
End Sub

実行すると、Dir関数をループして、複数ブックから値を抽出できます。

複数ブックから値を抽出できる

Dir関数をループして、複数ブックから値を抽出できました

Dir関数をループして、複数ブックから値を抽出できました。

InputBoxを使って検索する値を入力

検索する値を、InputBoxを使って入力できるようにします。

Sub TEST4()
  
  Dim B
  'インプットボックスで値を取得
  B = InputBox("抽出したい値を入力してください", "確認")
  If B = "" Then Exit Sub
  
  Range("A2:D1000").Clear 'シートをクリア
  
  Dim A
  'フォルダ内の1つのファイル名を取得
  A = Dir(ThisWorkbook.Path & "\TEST\*")
  
  j = 1
  'フォルダ内のブックをループ
  Do While A <> ""
  
    Workbooks.Open ThisWorkbook.Path & "\TEST\" & A 'ファイルを開く
    
    With ActiveWorkbook.Sheets(1)
      For i = 2 To .Cells(Rows.Count, "B").End(xlUp).Row
        If .Cells(i, "B") = B Then '商品が入力した値に一致する場合
          j = j + 1
          '値を抽出
          ThisWorkbook.Sheets(1).Cells(j, "A").Resize(, 4) = .Cells(i, "A").Resize(, 4).Value
        End If
      Next
    End With
    
    ActiveWorkbook.Close False 'ブックを閉じる
    
    A = Dir() '次のファイル名を取得
  Loop
  
End Sub

VBAコードを実行すると、インプットボックスが表示されます。

インプットボックスを表示できる

インプットボックスを表示できます

インプットボックスに値を入力して、複数ブックから値を抽出していきます。

インプットボックスを使って複数ブックから抽出

抽出する値を入力して、OKをクリックします。

抽出する値を入力して、OKをクリックします

複数ブックから値を抽出できます。

複数ブックから値を抽出できます

複数ブックから値を抽出できました。

ボタンを作成

ボタンを作成して、先ほどのVBAコードを登録しておきます。

ボタンを作成してVBAコードを登録

ボタンを作成して、VBAコードを登録します

ボタンを作成して、VBAコードを登録しました。

インプットボックスに抽出したい値を入力することで、複数ブックから値を抽出することができます。

インプットボックスを使って複数ブックから抽出

ボタンのクリックで、インプットボックスを表示して、抽出する値を入力後にOKをクリックします。

ボタンのクリックで、インプットボックスを表示して、抽出する値を入力後にOKをクリックします

複数ブックから値を抽出できます。

複数ブックから値を抽出できます

複数ブックから値を抽出できました。

おわりに

この記事では、複数ブックから値を抽出する方法について、ご紹介しました。

フォルダ内の複数のブック名を取得するには、Dir関数をループするとできます。

Dir関数を使って取得したファイルの値から、ForとIfを使って値を抽出することができます。

抽出する値の入力は、インプットボックスを使うと便利です。

複数ブックから値を抽出する方法について、マスターしていきましょう。

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

関連する記事から探す

カテゴリから探す

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

サイト内を検索する

↓キーワードを入力する

アーカイブから探す