ID登録せずに、無料で質問できる♪ 教えて!gooアプリ>>

Excel VBAを勉強中の者です。

複数のワークブックを開いているため、ワークブックから指定していってセルを選択したいと思い下記のようなコードにしてみたのですができませんでした。

Workbooks(“C:\フォルダ\ワークブック.xls”).Worksheets(“C”).Range(“A1”).Select

このようなコードは有り得ないのでしょうか?
または、ワークブックを開いて、ワークシートをアクティブにして、セルを選択するというように、ひとつひとつ選択していくのではなく、一文でワークブックからセルまで指定する他の方法はありますでしょうか?

教えてください。よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (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")を閉じる
と簡単にセルに値を入れるだけにしてしまう方法などがあるでしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

確かに既に多くのファイルにデータが分散し、面倒なことになりつつあります。
中間にVlookup関数を配置してというのは最初に思い付いたのですが、フォローが大変になるかなと思いやめました。でも、エラーがわかり、コードもとてもシンプルにできるとは思いもしませんでした。

やってみるとすぐにできました。ありがとうございます。

勉強のため、Findメソッドでもやってみようと思います。
(1回書いてみたのですがエラーになってしましました(泣)。どうしてもできない場合は、また教えてください。よろしくお願いします)

ありがとうございました。

お礼日時:2011/04/11 16:02

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

この回答への補足

詳しいご回答ありがとうございます。
確かに難しいようです。

目的は、他のワークブックにある一覧表から、品目で検索し、その数量を引っぱってきたいのです。
ワークシート関数ではなく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すること自体が無理とは思いませんでした。試しにもなっていませんでしたね。

上記目的に合うわかりやすい方法はありますでしょうか?よろしくお願いします。

補足日時:2011/04/10 10:39
    • good
    • 0

>実行すると「実行時エラー'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
となりますが、それがご希望の動作になりますでしょうか。
    • good
    • 0

Workbooks(“C:\フォルダ\ワークブック.xls”).Worksheets(“C”).Range(“A1”).Select




Workbooks(“ワークブック.xls”).Worksheets(“C”).Range(“A1”).Select

で十分です。
すでに開いているブックですので パスを指定する必要はないですね。

この回答への補足

ご回答ありがとうございます。

実行すると「実行時エラー'1004' RangeクラスのSelectメソッドが失敗しました。」というエラーメッセ時が出てしまいます。なぜでしょうか?

また、他にワークブックから指定する方法はありますでしょうか?

補足日時:2011/04/09 18:47
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング