大体でIT

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

大体でIT

Excel VBAを使って、条件を指定して複数ブックをまとめるには、「InStr」を使って条件を指定して、「Dir関数」と「Copy」を使って複数ブックから値を取得するとできます。実務では、複数ブックをまとめたい、といった場面が結構ありますので、複数ブックをまとめる方法について、マスターしていきましょう。

はじめに

この記事では、条件を指定して複数ブックをまとめる方法について、ご紹介します。

条件を指定したい場合は、「InStr」を使って条件分岐することでできます。

複数ブックをまとめるには、「Dir関数」をループして、「Copy」でデータを取得します。

複数ブックをまとめるというのは、実務でもよく使いますので、複数ブックをまとめる方法について、マスターしていきましょう。

では、条件を指定して複数ブックをまとめる方法について、解説していきます。

この記事を読むメリット

  • 条件を指定して複数ブックをまとめる方法がわかります。

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

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

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

目次

条件を指定して複数ブックをまとめたい

条件を指定して複数ブックをまとめてみます。

やりたい内容

やりたい内容は、条件を指定して複数ブックの値を取得したいということになります。

条件を指定して複数ブックの値を取得したい

例えば、次のブックの中で「【重要】」を含むブックのみをまとめたいです。

「【重要】」を含むブックのみをまとめたいです

マクロブックにデータ部分のみをまとめます。

マクロブックにデータ部分のみをまとめます

取得するブックは次のように、商品と価格のデータを入力しています。

取得するブック

1つ目のブックです。

1つ目のブックです

2つ目のブックです。

2つ目のブックです

3つ目のブックです。

3つ目のブックです

4つ目のブックです。

4つ目のブックです

5つ目のブックです。

5つ目のブックです

上記の複数ブックの中から、「【重要】」を含むブックをまとめます。

「【重要】」を含むブックのみをまとめる

「【重要】」を含むブックをまとめることができます

では、条件に一致したブックをまとめる方法について、解説していきます。

VBAコードを作成

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

1つの別ブックから値を取得

まずは、1つの別ブックから値を取得してみます。

Sub TEST1()
  
  Dim A
  'ファイルパスを指定
  A = ThisWorkbook.Path & "\TEST\TEST1【重要】.xlsx"
      
  Workbooks.Open A 'ブックを開く
  
  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コードを実行すると、1つの別ブックから値を取得できます。

1つのブックの値を取得

1つの別ブックから値を取得できます

1つの別ブックから値を取得できました。

Dir関数を使って1つのブックの値を取得

次は、Dir関数を使って1つのブックの値を取得してみます。

Sub TEST2()
  
  Dim A
  'フォルダ内の1つのブック名を取得
  A = Dir(ThisWorkbook.Path & "\TEST\*")
  
  'ブックを開く
  Workbooks.Open ThisWorkbook.Path & "\TEST\" & A
  
  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

実行すると、Dir関数でブック名を取得して、1つのブックから値を取得できます。

Dir関数を使って、1つのブックの値を取得

Dir関数でブック名を取得して、1つのブックから値を取得できます

Dir関数でブック名を取得して、1つのブックから値を取得できました。

Dir関数を使って複数ブックをループして値を取得

次は、Dir関数を使って複数ブックをループして値を取得してみます。

Sub TEST3()
  
  Dim A
  'フォルダ内の1つのブック名を取得
  A = Dir(ThisWorkbook.Path & "\TEST\*")
  
  Do While A <> ""
    
    'ブックを開く
    Workbooks.Open ThisWorkbook.Path & "\TEST\" & A
    
    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 'ブックを閉じる
    
    A = Dir() '次のブック名を取得
    
  Loop
  
End Sub

実行すると、Dir関数をループして、フォルダ内のすべてのブックから値を取得できます。

すべてのブックの値を取得

Dir関数をループして、フォルダ内のすべてのブックから値を取得できます

Dir関数をループして、フォルダ内のすべてのブックから値を取得できました。

条件を指定して複数ブックの値を取得

条件を指定して複数ブックの値を取得してみます。

「InStr」で、ブック名の条件を指定するのがポイントになります。

Sub TEST4()
  
  Dim A
  'フォルダ内の1つのブック名を取得
  A = Dir(ThisWorkbook.Path & "\TEST\*")
  
  Do While A <> ""
    
    '条件を指定
    If InStr(A, "【重要】") > 0 Then
      
      'ブックを開く
      Workbooks.Open ThisWorkbook.Path & "\TEST\" & A
      
      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 If
    
    A = Dir() '次のブック名を取得
    
  Loop
  
End Sub

VBAコードを実行すると、条件を指定して、複数ブックの値を取得できます。

「【重要】」を含むブックの値を取得

条件を指定して、複数ブックの値を取得できます

条件を指定して、複数ブックの値を取得できました。

他にも「InStr」のVBAコードを変更すれば、条件を自由に設定することができます。

おわりに

この記事では、条件を指定して複数ブックをまとめる方法について、ご紹介しました。

条件を指定したい場合は、「InStr」を使って条件分岐することでできます。

複数ブックをまとめるには、「Dir関数」をループして、「Copy」でデータを取得します。

複数ブックをまとめるというのは、実務でもよく使いますので、複数ブックをまとめる方法について、マスターしていきましょう。

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

関連する記事から探す

カテゴリから探す

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

サイト内を検索する

↓キーワードを入力する

アーカイブから探す