- ベストアンサー
エクセルVBAの質問です。
エクセルVBAの質問です。 一つ一つコードを試しては動きを確認するという作業を始めたばかりの初心者です。 VBAで他のブックからデータを取得するにあたっては、その参照先のブックの行列は絶対いじってはならないものだと理解しています。でも、行列が変わってしまう可能性があるため、参照先のブックの値を、行列ではなく、たとえば「“4月”かつ“売上”の交わるセルから数値を取得せよ」のように、参照先のブック内の文字列を読みにいって、そこから取得するような考え方は成り立つでしょうか。もし成り立つ場合は、どのように組めるものなのか、考え方を教えていただけませんでしょうか。 何卒よろしくおねがいいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは! VBAでもワークシート関数は使用できます。 おそらく参照先の項目の列・行の位置は変わらないと思いますので、 考え方としてINDEX関数とMATCH関数を組み合わせる方法と全く一緒だと思います。 具体的な配置が判らないので、参照先の表が↓のような感じになっているとすると Sub Sample1() Dim i As Long, j As Long i = WorksheetFunction.Match("4月", Columns(1), False) j = WorksheetFunction.Match("売上", Rows(1), False) Cells(i, j).Select End Sub これはMATCH関数を利用して行・列番号を取得しています。 いかにもVBAのような感じでやると Sub Sample2() Dim i As Long, j As Long, c As Range, r As Range Set c = Columns(1).Find(what:="4月", LookIn:=xlValues, lookat:=xlWhole) i = c.Row Set r = Rows(1).Find(what:="売上", LookIn:=xlValues, lookat:=xlWhole) j = r.Column Cells(i, j).Select End Sub 上記どちらのマクロを実行しても画像のD5セルが選択されるはずです。m(_ _)m
その他の回答 (1)
- MARU4812
- ベストアンサー率43% (196/452)
人間のやり方と同じでしょう。 質問文に書いてある通りの手順を1つ1つプログラムするだけの お話です。 4月の行(列)を探して見付かったらその行(列)を覚えておいて、 売上の列(行)を探せばいいだけでしょう? 基本文法のIf文とForループだけでも作れる単純なものだと思います。 考え方も何もそのまま作ればいいと思います。
お礼
早々のご指摘、ありがとうございます。不勉強な状態で質問してしまいました。一つ一つやってみます。ありがとうございます。
お礼
早々に、詳細なアドバイスを本当にありがとうございます。いただいた方法で実際に試して見ます。感謝いたします。