• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel VBA)

Excel VBAで複数のワークブックから指定したセルを選択する方法

このQ&Aのポイント
  • Excel VBAを勉強中の方が、複数のワークブックから指定したセルを選択したい場合、ワークブックとワークシートを指定してセルを選択する方法があります。
  • 例えば、以下のコードを使用することで、特定のワークブックの特定のワークシートからセルを選択することができます。
  • また、ワークブックを開いてワークシートをアクティブにする方法もあり、一文でワークブックからセルまで指定することも可能です。

質問者が選んだベストアンサー

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.4

No1,No2です。 Vlookup関数でも可能ですよ。 但し、後々のエラー処理(もし検索値が見つからなかったときなど)を考えると Vlookup関数より Findで検索させる方法の方が楽です。 http://excelvba.pc-users.net/fol7/7_1.html にFindメソッドの使い方がありますので参考にしてください。 ファイルが開いているかどうかなどの処理も必要になるでしょうが Sub Search() Dim Obj As Object   With Workbooks("●●●.xls").Worksheets("▲▲▲") Set Obj = .Range("B2:I200").Find(.Range("B1"), LookAt:=xlWhole) If Obj Is Nothing Then MsgBox .Range("B1") & "は見つかりませんでした" Else Workbooks("○○○.xls").Worksheets("△△△").Range("B1").Value=Obj.Offset(0,5).Value End If End With End Sub とかいったコードになります(検証はしていませんのでミスがあったらごめんなさいです) あと多くのファイルにデータが分散する考え方も後々のフォロー(ファイル名が変更されたりなど)で めんどくさいことに発展しますので一度検討されることをお勧めします。 コードを考えるのも慣れるまでは大変でしょうが、どうやって目的を達成するか(アルゴリズム)を思いつくと思わぬ解決があります。 例えば Workbooks("●●●.xls").Worksheets("▲▲▲").Range("C1")セルにでも Vlookup関数を配置して 先に答えが出るようにしてけば  Workbooks("●●●.xls")のファイルB1セルに値を入れた時点で エラーがわかると思いますし コードの流れを Workbooks("●●●.xls")を開いて C1セルの値を変数に格納 Workbooks("●●●.xls")を閉じる Workbooks("○○○.xls")を開いて B1セルに 変数の値を入れる Workbooks("○○○.xls")を閉じる と簡単にセルに値を入れるだけにしてしまう方法などがあるでしょう。

mihimarumaru
質問者

お礼

回答ありがとうございます。 確かに既に多くのファイルにデータが分散し、面倒なことになりつつあります。 中間にVlookup関数を配置してというのは最初に思い付いたのですが、フォローが大変になるかなと思いやめました。でも、エラーがわかり、コードもとてもシンプルにできるとは思いもしませんでした。 やってみるとすぐにできました。ありがとうございます。 勉強のため、Findメソッドでもやってみようと思います。 (1回書いてみたのですがエラーになってしましました(泣)。どうしてもできない場合は、また教えてください。よろしくお願いします) ありがとうございました。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

VBAを勉強中のものにはむつかしい。 (1)まず他シート参照を勉強すること (2)ブックやシートのエクセルのオブジェクトの上下(包摂)関係を認識し理解し其れでオブジェクト変数で組み立てる方法をべんきょうしたらよい。 しかし近くにVBAを良く知っている人が居ないと、教えてもらうことなくて理解や、そういうことの関連問題に出くわすのは難しい。 たまたま見つかった私の控えていた例であげてみる(下記は採り上げたことに深い意味はない)。 他ブックは開いておくこと。 上位のオブジェクト(ブックの指定部分)+シートを特定する部分も出来るだけ記述して特定化してコードを書くことが当面良いのではないか。 そのうちコードは、段々オブジェクト名で置き換えたり、Withー End Withで書きたくなってくる。 Sub 入力() Dim wk1 As Workbook Dim wk2 As Workbook Set wk1 = ActiveWorkbook Set wk2 = Workbooks.Open("C:\Documents and Settings\XXXX\My Documents\ピボットMode.xls") Dim LastRow As Long With wk1.Worksheets("sheet2") LastRow = wk1.Worksheets("sheet2").Range("B" & Rows.Count).End(xlUp).Row + 1 .Range("B" & LastRow).Value = wk2.Worksheets("sheet1").Range("B1").Value .Range("C" & LastRow).Value = wk2.Worksheets("sheet1").Range("B3").Value .Range("D" & LastRow).Value = wk2.Worksheets("sheet1").Range("B5").Value .Range("E" & LastRow).Value = wk2.Worksheets("sheet1").Range("B7").Value End With End Sub

mihimarumaru
質問者

補足

詳しいご回答ありがとうございます。 確かに難しいようです。 目的は、他のワークブックにある一覧表から、品目で検索し、その数量を引っぱってきたいのです。 ワークシート関数ではなくVBAを使用する理由は、マクロを実行するまで数量を引っぱってきて欲しくないからです。 確かに上位のオブジェクト+シートも出来るだけ記述する方が、今の私にはわかりやすいです。 そこで、馴染みのあるワークシート関数のVLOOKUP関数をVBAに使用してできればいいなと思いました。 Workbooks("○○○.xls").Worksheets("△△△").Range("B1") = Application.WorksheetFunction.VLookup(Workbooks("○○○.xls").Worksheets("△△△").Range("B1"), Workbooks("●●●.xls").Worksheets("▲▲▲").Range("B2:I200"), 5, False) しかし、エラーが出るためパスの部分が間違っているのかなと思い、単純なActivateやSelectでパスをどう記述すればあっているのかいろいろ試してみようと思いました。しかし、いろいろやっても再び同じエラーが出たため質問させて頂きました。まさかActivaになっていないワークブックのセルをSelectすること自体が無理とは思いませんでした。試しにもなっていませんでしたね。 上記目的に合うわかりやすい方法はありますでしょうか?よろしくお願いします。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

>実行すると「実行時エラー'1004' RangeクラスのSelectメソッドが失敗しました。」というエラーメッセ時が出てしまいます。なぜでしょうか? 失礼しました。文法的には問題ないですが ActiveになっていないBookのセルを Select するのは無理ですね。 さて Select した後に何をしたいのでしょか? 例えば そのセルに 10 という値を入れるというのであれば Workbooks(“ワークブック.xls”).Worksheets(“C”).Range(“A1”).Value=10 例えば 現在ActiveになっているブックのSheets("c")のA1の値を入れるというのであれば Workbooks(“ワークブック.xls”).Worksheets(“C”).Range(“A1”).Value=ThisWorkbook.Worksheets(“C”).Range(“A1”).Value となるはずです。 どうしてもSelectしたければ Workbooks(“ワークブック.xls”).Active Worksheets(“C”).Range(“A1”).Select となりますが、それがご希望の動作になりますでしょうか。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

Workbooks(“C:\フォルダ\ワークブック.xls”).Worksheets(“C”).Range(“A1”).Select は Workbooks(“ワークブック.xls”).Worksheets(“C”).Range(“A1”).Select で十分です。 すでに開いているブックですので パスを指定する必要はないですね。

mihimarumaru
質問者

補足

ご回答ありがとうございます。 実行すると「実行時エラー'1004' RangeクラスのSelectメソッドが失敗しました。」というエラーメッセ時が出てしまいます。なぜでしょうか? また、他にワークブックから指定する方法はありますでしょうか?

関連するQ&A