Excel VBA 質問スレッド №1490 (解決済)

複数ブックから一致したい値を取り出したい

投稿者 : ぺぺ     投稿日時 : 2023/07/18(Tue) 12:23:28     OS : Windows 10     EXCEL : Excel 2019
Sub ●●●1()
    
  Range("A2:F1000").Clear
  
  Dim A
  A = Dir(ThisWorkbook.Path & "\TEST\*")
  
  j = 1
  Do While A <> ""
  
    Workbooks.Open ThisWorkbook.Path & "\TEST\" & A
  
    With ActiveWorkbook.Sheets(2)
      For i = 2 To .Cells(Rows.Count, "C").End(xlUp).Row
        If .Cells(i, "C") = "●●●" Then
          j = j + 1
          ThisWorkbook.Sheets(3).Cells(j, "A").Resize(, 6) = .Cells(i, "A").Resize(, 6).Value
       End If
     Next
  End With
  
   ActiveWorkbook.Close False
  
   A = Dir()
  Loop

End Sub

------------------------------------------------------------------------------------------------------------------------------------------------------------

上記でTESTファイルの中にあるブックの中から●●●と一致する値を取り出せた(マクロファイルがデスクトップにある状態)のですが、マクロファイルをTESTファイルに格納しマクロを実行したところ、値が抽出できません。抽出するためにはどのようにしたらよいでしょうか。どなたかご教授いただけますと幸いです。。

スポンサーリンク
[返信 1] Re : 複数ブックから一致したい値を取り出したい
投稿者 : さんこう     投稿日時 : 2023/07/18(Tue) 12:37:02
>TESTファイルの中にあるブックの中から

ファイルにブックを入れる方法を知らないのですが、どうやったのですか?

>マクロファイルをTESTファイルに格納しマクロを実行したところ

ファイルをファイルに格納する方法を知らないのですが、どうやったのですか?

>値が抽出できません。

抽出とはどういう操作ですか?「取り出し」とは違うのですか?

「できない」とは、どのような現象ですか?
(空白のままとかエラーが出るとか)

[返信 2] Re : 複数ブックから一致したい値を取り出したい
投稿者 : 通行人     投稿日時 : 2023/07/19(Wed) 05:48:16
TESTファイル というのが TESTフォルダ(…\Desktop\TEST)の間違いとして、「実行時エラー '1004'」とか出てないの?

マクロブックを TESTフォルダへ移動(…\Desktop ➡ …\Desktop\TEST)してしまったのなら、
データブックも TESTフォルダ内のTESTフォルダへ移動(…\Desktop\TEST ➡ …\Desktop\TEST\TEST)したのか疑問。

[返信 3] Re : 複数ブックから一致したい値を取り出したい
投稿者 : ぺぺ     投稿日時 : 2023/07/19(Wed) 09:00:04
さんこう様

返信ありがとうございます。説明が下手で申し訳ございませんでした。

上記でTESTファイルの中にあるブック(xlsx)の中から●●●と一致する値を取り出せた(マクロ有効ブック(xlsm)がデスクトップにある状態)のですが、
マクロ有効ブック(xlsm)をTESTファイルに移動しマクロを実行したところ、値を取り出すことができませんでした。エラーは出ず空白のままの状態です。

こちらで伝わりますでしょうか、よろしくお願いいたします。

■[返信 1] さんこうさん(2023-07-18 12:37:02)の記事
> >TESTファイルの中にあるブックの中から

> ファイルにブックを入れる方法を知らないのですが、どうやったのですか?

> >マクロファイルをTESTファイルに格納しマクロを実行したところ

> ファイルをファイルに格納する方法を知らないのですが、どうやったのですか?

> >値が抽出できません。

> 抽出とはどういう操作ですか?「取り出し」とは違うのですか?

> 「できない」とは、どのような現象ですか?
> (空白のままとかエラーが出るとか)

[返信 4] Re : 複数ブックから一致したい値を取り出したい
投稿者 : ぺぺ     投稿日時 : 2023/07/19(Wed) 09:04:41
通行人様

返信ありがとうございます。説明が下手で申し訳ございませんでした。

上記でTESTフォルダの中にあるブック(xlsx)の中から●●●と一致する値を取り出せた(マクロ有効ブック(xlsm)がデスクトップにある状態)のですが、
マクロ有効ブック(xlsm)をTESTフォルダに移動しマクロを実行したところ、値を取り出すことができませんでした。エラーは出ず空白のままの状態です。

TESTフォルダには大元のデータがそのまま入っています。

こちらで伝わりますでしょうか、よろしくお願いいたします。

■[返信 2] 通行人さん(2023-07-19 05:48:16)の記事
> TESTファイル というのが TESTフォルダ(…\Desktop\TEST)の間違いとして、「実行時エラー '1004'」とか出てないの?

> マクロブックを TESTフォルダへ移動(…\Desktop ➡ …\Desktop\TEST)してしまったのなら、
> データブックも TESTフォルダ内のTESTフォルダへ移動(…\Desktop\TEST ➡ …\Desktop\TEST\TEST)したのか疑問。


[返信 5] Re : 複数ブックから一致したい値を取り出したい
投稿者 : さんこう     投稿日時 : 2023/07/19(Wed) 09:20:28
>こちらで伝わりますでしょうか

たいして変わっていないようですが、「TESTファイル」ではなく「TESTフォルダ」ということであれば。


> A = Dir(ThisWorkbook.Path & "¥TEST¥*")
> Workbooks.Open ThisWorkbook.Path & "¥TEST¥" & A

これら↑の「ThisWorkbook.Path」には「¥TEST」が含まれることになりますので、追加している「¥TEST」が余分になります。

Dir関数は、フォルダやファイルが存在しないときは「""」を返すので、「Do While A <> ""」のループに入らず終了してしまいます。

[返信 6] Re : 複数ブックから一致したい値を取り出したい
投稿者 : ぺぺ     投稿日時 : 2023/07/19(Wed) 10:17:51
さんこう様

ありがとうございます。

> > A = Dir(ThisWorkbook.Path & "¥TEST¥*")
> > Workbooks.Open ThisWorkbook.Path & "¥TEST¥" & A

> これら↑の「ThisWorkbook.Path」には「¥TEST」が含まれることになりますので、追加している「¥TEST」が余分になります。

こちら余分なのは理解できましたが、コードの書き換えがうまくいきません。お手数ですが詳細をお伺いしてもよろしいでしょうか。


■[返信 5] さんこうさん(2023-07-19 09:20:28)の記事
> >こちらで伝わりますでしょうか

> たいして変わっていないようですが、「TESTファイル」ではなく「TESTフォルダ」ということであれば。


> > A = Dir(ThisWorkbook.Path & "¥TEST¥*")
> > Workbooks.Open ThisWorkbook.Path & "¥TEST¥" & A

> これら↑の「ThisWorkbook.Path」には「¥TEST」が含まれることになりますので、追加している「¥TEST」が余分になります。

> Dir関数は、フォルダやファイルが存在しないときは「""」を返すので、「Do While A <> ""」のループに入らず終了してしまいます。


[返信 7] Re : 複数ブックから一致したい値を取り出したい
投稿者 : さんこう     投稿日時 : 2023/07/19(Wed) 11:25:17
>こちら余分なのは理解できましたが、コードの書き換えがうまくいきません。

「うまくいきません」とは、どういうことですか?

「余分」なのですから、消せばいいと思いますが、
キーボードが故障しているとかでしょうか?

[返信 8] Re : 複数ブックから一致したい値を取り出したい
投稿者 : ぺぺ     投稿日時 : 2023/07/19(Wed) 11:33:08
さんこう様

Dim A
A = Dir(ThisWorkbook.Path)

j = 1
Do While A <> ""

Workbooks.Open ThisWorkbook.Path

マクロ初めてで大変申し訳ございませんが、上記のように何通りか私なりに¥TESTを削除してみましたが値を取り出すことができなかったので、詳細を伺いたく質問させていただきました。


■[返信 7] さんこうさん(2023-07-19 11:25:17)の記事
> >こちら余分なのは理解できましたが、コードの書き換えがうまくいきません。

> 「うまくいきません」とは、どういうことですか?

> 「余分」なのですから、消せばいいと思いますが、
> キーボードが故障しているとかでしょうか?


[返信 9] Re : 複数ブックから一致したい値を取り出したい
投稿者 : さんこう     投稿日時 : 2023/07/19(Wed) 11:36:45
>¥TESTを削除してみましたが

余計に削除しているように見えますが。

[返信 10] Re : 複数ブックから一致したい値を取り出したい
投稿者 : ぺぺ     投稿日時 : 2023/07/19(Wed) 11:51:05
さんこう様

> 余計に削除しているように見えますが。

すみません、どのようなコードが正しいかご教授願います。


■[返信 9] さんこうさん(2023-07-19 11:36:45)の記事
> >¥TESTを削除してみましたが

> 余計に削除しているように見えますが。

[返信 11] Re : 複数ブックから一致したい値を取り出したい
投稿者 : リンク     投稿日時 : 2023/07/19(Wed) 11:52:22
『同じフォルダ内のブックから値を取り出したい』(ぺぺ)
https://www.excel.studio-kazu.jp/kw/20230719090540.html

[返信 12] Re : 複数ブックから一致したい値を取り出したい
投稿者 : さんこう     投稿日時 : 2023/07/19(Wed) 12:26:39
>どのようなコードが正しいか

「¥TEST」を消せばいいです。

A = Dir(ThisWorkbook.Path & "¥TEST¥*")

A = Dir(ThisWorkbook.Path & "¥*")


Workbooks.Open ThisWorkbook.Path & "¥TEST¥" & A

Workbooks.Open ThisWorkbook.Path & "¥" & A

ただし、他の問題が発生すると思います。




[返信 13] Re : 複数ブックから一致したい値を取り出したい
投稿者 : 通行人     投稿日時 : 2023/07/19(Wed) 20:21:22
■[返信 4] ぺぺさん(2023-07-19 09:04:41)の記事
> TESTフォルダの中にあるブック(xlsx)の中から●●●と一致する値を取り出せた(マクロ有効ブック(xlsm)がデスクトップにある状態)のですが、
> マクロ有効ブック(xlsm)をTESTフォルダに移動しマクロを実行したところ、・・・
> TESTフォルダには大元のデータがそのまま入っています。
マクロブック(xlsm)も、各データブック(xlsx)も、同じ TESTフォルダ(…\Desktop\test)内に混在してしまったということね。
ならば、実行中のマクロブックは処理対象(ブックを開いたり、閉じたり)としない処理追加が必要。
マルチポスト先でも指摘(下記)されているように、処理要否を判定するコードを追加するか、
  If A <> ThisWorkbook.Name Then '★同名ブックは処理対象外にすべき

もしくは、各データブックの拡張子が「.xlsx」に決まっているのなら、下のように「*.xlsx」しか相手にしないとか・・・
  A = Dir(ThisWorkbook.Path & "\*.xlsx")
  j = 1
  Do While A <> ""
    Workbooks.Open ThisWorkbook.Path & "\" & A

[返信 14] Re : 複数ブックから一致したい値を取り出したい
投稿者 : ぺぺ     投稿日時 : 2023/07/26(Wed) 08:46:37
ありがとうございました。

当掲示板について
  • Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
  • 記事内ではHTMLのタグは使用できません。
  • 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
  • Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
  • Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
お 名 前  :
内  容   :

ステータス  :

認証コード  : キャプチャ画像 




( 処理日時 : 2025-07-20 06:32:29 )
タイトルとURLをコピーしました