
エクセル2002使用です。
VBAの記述で、WorksheetFunction.VLookupを使って求めた値の入っているセルの列方向に一つ下の値を取得したいのですが・・・・
range("A1").Value =WorksheetFunction.VLookup( range("B1").Value, Range("A3:C10"), 3, 1)
例えば上記で得た値がC4セルにあるのであれば、C5セルの値を取得したいのです。
offset(0,1)プロパティーをどこにおけば良いのか良くわかりません。
どうかよろしくお願いします。
No.2ベストアンサー
- 回答日時:
こんにちは。
アイデアとしては面白いですが、基本的なことが違いますね。
Vlookup というのは、もともと、値だけを取り出して、それを扱っているので、そこから、Rangeオブジェクトの情報を取り出すことは出来ません。Rangeオブジェクトのまま使うなら、Index 関数を使いますが、あまり標準的ではありません。通常は、VBAのFind関数を使いますが、Vlookup関数のオプションとの整合性はありません。ですから、この場合は、Match関数を使って切り抜けます。
Columns(3) が、VLookup( range("B1").Value, Range("A3:C10"), 3, 1) の列の「3」にあたります。
'---------------------------------------
Sub TestSample1()
Dim rnum As Long
On Error Resume Next
rnum = WorksheetFunction.Match(Range("B1").Value, Range("A3:C10").Columns(3), 1)
On Error GoTo 0
If rnum <> 0 Then
Range("A3:C10").Columns(3).Cells(rnum).Offset(, 1).Select
rnum = 0 'このプロシージャ一回限りなら、ここは必要はない。
End If
End Sub
'---------------------------------------
この回答への補足
Wendy02様 いつも早速のご回答ありがとうございます。
お時間ございましたら追記お願いしまう。
値を取得するために、
Sub TestSample1()
Dim rnum As Long
On Error Resume Next
rnum = WorksheetFunction.Match(Range("B1").Value, Range("A3:C10").Columns(3), 1)
On Error GoTo 0
If rnum <> 0 Then
Range("A3:C10").Columns(3).Cells(rnum).Offset(, 1).Select
Range("A1").Value = Selection.Value ←値の取得
End If
End Sub
としたのですが、うまくいきません。。。
Range("A3:C10").Columns(3).Cells(rnum).Offset(, 1).Select
の使い方が良くわからないのですが、
お手数でなければよろしくお願いします。
match関数はばっちりできました。
No.4
- 回答日時:
こんばんは。
うまくいかなくてすみません。ちょっとヘンだなっと思って、最初のご質問を読み直してみました。
>上記で得た値がC4セルにあるのであれば、C5セルの値を取得したいのです。
>offset(0,1)プロパティー ←これが違いますね。(^^;
Range("A3:C10").Columns(3).Cells(rnum).Offset(, 1).Select
の部分を、
Range("A3:C10").Columns(3).Cells(rnum).Offset(1).Select
それで、OKが出来ましたら、
'---------------------------------------
Range("A1").Value = Range("A3:C10").Columns(3).Cells(rnum).Offset(1).Value
'-------------------------------------
と、つなげてしまったほうが、負担が少ないです。
この意味は、
("A3:C10")の範囲の(3)列目の(rnum)番目という場所の下(Offset(1))ということです。
ダメなときは、その部分に、
これを使ってチェックしてみてください。
MsgBox Range("A3:C10").Columns(3).Cells(rnum).Offset(1).Address(0,0)
("A3:C10")の範囲の(3)列目の(rnum)番目という場所の下(Offset(1))ということです。
こんな記述の仕方もあるのですね。
VBAはセルの参照とかが一番難しいです。
ありがとうございました。
No.3
- 回答日時:
Offsetメソッドは範囲ー>範囲を求めるメソッドです。
VLOOKUPは関数で、関数は、値を求めるものです。それも行数とかを
求めるのでなく、セルの中の値を求めます。
だから質問は根本的に誤解があります。
どうしても質問のような必要があったら
Sub test01()
x = WorksheetFunction.Match(Range("a3"), Range("h1:h5"), 0)
MsgBox x
End Sub
のように相対的な行数を求めて、すぐ下の行なら、+1して、Cells(x+1,”I”)のようにすればよい。
Matchは値はあたいでも、行数を返してくれるので、この場合には役立つのです。
imogasi さま早速のご回答ありがとうございます。
match関数の使い方よくわかりました。
無事解決いたしました
今後ともよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
血小板増加について
-
首吊りどこ締めるの
-
検便についてです。 便は取れた...
-
値が入っているときだけ計算結...
-
Excel 数値の前の「 ' 」を一括...
-
2つの数値のうち、数値が小さい...
-
小数点以下を繰り上げたものを...
-
VLOOKUP関数を使用時、検索する...
-
リンク先のファイルを開かなく...
-
得意先負担の検査手数料の扱い
-
病院側から早く来てくださいと...
-
増減表のプラスマイナスの符号...
-
彼女のことが好きすぎて彼女の...
-
腕を見たら黄色くなってる部分...
-
MIN関数で空白セルを無視したい...
-
勃起する時って痛いんですか? ...
-
Excel 0目標に対して数字があ...
-
EXCELで式からグラフを描くには?
-
エクセルのグラフで、値0のとき...
-
前立腺がん患者の射精について...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
検便についてです。 便は取れた...
-
値が入っているときだけ計算結...
-
彼女のことが好きすぎて彼女の...
-
尿検査前日に自慰行為した時の...
-
VLOOKUP関数を使用時、検索する...
-
Excel 数値の前の「 ' 」を一括...
-
精液の落とし方を教えてください
-
【Excelで「正弦波」のグラフを...
-
2つの数値のうち、数値が小さい...
-
風俗店へ行く前のご飯
-
精子に血が・・・
-
リンク先のファイルを開かなく...
-
小数点以下を繰り上げたものを...
-
EXCELで条件付き書式で空白セル...
-
イタリアから帰国する際、肉製...
-
excelでsin二乗のやり方を教え...
-
腕を見たら黄色くなってる部分...
-
病院側から早く来てくださいと...
-
ワードのページ番号をもっと下...
おすすめ情報