プロが教えるわが家の防犯対策術!

VBA変数をFunction.VLookupの戻り値から得たいのですが、
下記の記述だと「実行時エラー 1004 worksheetfunctionクラスの…」が出てしまいます。
Dim X As Long, i As Long
Dim t3 As Variant

X = 2 'Loop行数
i = 2 'Loop行数

Do Until Cells(i, 4).Value = ""
t3 = Application.WorksheetFunction.VLookup(Cells(X, 4) & 9, Sheets("時刻表").Columns("A:C"), 2, 0) '開始時刻

時刻表シート
    A   B  C
検索値 開始 完了
79 18:30 20:30
89 18:30 20:30
99 21:30 22:30
109 22:30 23:30
       ・
       ・
       ・

ちなみにセルにvalueで返してみると反映されエラーにはならないです。
VBA素人で申し訳ありませんがご教授お願い致します。

A 回答 (2件)

No.1です。



> そもそも「Application.WorksheetFunction.VLookup」で得た値を変数に置き換えること自体が無理なのでしょうか?

おかしいですね。
私の環境(Excel2016)では、質問者様の書き方では、t3でも、cellsでも当該エラーが発生します。
No.1の書き方だと、t3でも、cellsでも当該エラーは発生せず、正常に動作します。

※Cells(X, 4)には整数値が入力されているという前提です。
    • good
    • 0
この回答へのお礼

何度も考えてくださりありがとうございます。
ご回答くださったことを元に見直していたところ、そもそもの間違いに気づくことができました。
Cells(●,●).Valueで見直し確認していた時点ではCells(X, 4)に数値が反映されていたのでエラーにならず、t3へ変数として置き換えようとしていた時点ではCells(X, 4)に数値が入っておらず順序が間違っていたことがエラーの原因でした。
「※Cells(X, 4)には整数値が入力されているという前提です。」というアドバイスがなければ気づけませんでした。
本当にありがとうございました。また初歩的なミスで質問してしまいすみませんでした。

お礼日時:2018/08/13 02:29

Cells(X, 4) & 9 の部分を



Cells(X, 4).Value * 10 + 9 としてみたらどうでしょう?
    • good
    • 1
この回答へのお礼

早速ご回答ありがとうございます。
試してみましたができませんでした。
私の説明が下手なのでうまく伝えられなくてすみません。
変数で置きたい「t3」のところを「Cells(●,●).Value」に変えるとちゃんと呼んでくるのですが、変数に置き換ようとするとエラーになってしまってうまくいきません。
そもそも「Application.WorksheetFunction.VLookup」で得た値を変数に置き換えること自体が無理なのでしょうか?

お礼日時:2018/08/11 18:16

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