アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBA初心者です。

vlook関数をVBAで再現したく、ネットのあれこれを参考にコードを組んでみましたがエラーが出てしまいます。

同一ブックの中にある、Aシートをデータ範囲としてBシートに値を引っ張りたいのですが、
以下のようなコードを書くと「アプリケーション定義またはオブジェクト定義のエラーです」とでます。

Set 範囲 = Sheets("A").Range(A1:D100)

For i = 1 To 100
検索値 = Sheets("B").Range(i , 9)

値1 = Application.WorksheetFunction.VLookup(検索値, 範囲, 2, False)
値2 = Application.WorksheetFunction.VLookup(検索値, 範囲, 3, False)
Next

vlookの前にSetのところでエラーがでます。

どうやら、シートがアクティブではないから、ということのようですが、正直どのように直したらよいものかわかりません。

Sheets("シート名").Range("範囲") とすれば、事前にシートをアクティブにする必要はないと思っていたのですが、そもそも間違っていますでしょうか?

どうぞご教授くださいますと幸いです。

A 回答 (2件)

>Set 範囲 = Sheets("A").Range(A1:D100)


 ⇒Set 範囲 = Sheets("A").Range("A1:D100")

>検索値 = Sheets("B").Range(i , 9)
 ⇒検索値 = Sheets("B").Range("I" & i)

>Sheets("B").Range(Cells(i,9),Cells(i,9))
 ⇒Sheets("B").Cells(i,9)で良いのではないでしょうか。
  又、上記のようにRangeとCellsを組み合わる場合、Cellsのオブジェクトが必要で
  Sheets("B").Range(Sheets("B").Cells(i,9))としないと駄目です。
    • good
    • 1
この回答へのお礼

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

>Sheets("B").Range(Sheets("B").Cells(i,9))としないと駄目です。

まさにこれでした。
Cellsの前にSheetsを入れたら動きました!
ありがとうございます。

お礼日時:2012/01/17 16:45

Set 範囲 = Sheets("A").Range(A1:D100)


は次のようにします。

Set 範囲 = Sheets("A").Range("A1:D100")
    • good
    • 0
この回答へのお礼

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

ご指摘の点ですが、実際のマクロではCells指定で書いていたため、転記した際に記載ミスをした模様です。
大変失礼しました。
こちら以外でエラーとなるような事項はないでしょうか?

【誤】
Set 範囲 = Sheets("A").Range(A1:D100)
検索値 = Sheets("B").Range(i , 9)

【正】
Set 範囲 = Sheets("A").Range("A1:D100")
検索値 = Sheets("B").Range(Cells(i , 9),Cells(i , 9))

お礼日時:2012/01/17 15:46

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