デバッグ中で、下記のエラーが出て、進めません。
実行時エラー '424' オブジェクトが必要です。
Dim x1, x2, st1, st2, st3 As String
x1 = Cells(41, 5).Value
Set st1.Value = Application.WorksheetFunction.VLookup(x1, Range(Cells(102, 2), Cells(106, 4)), 3, False)
x1 Cells(102, 2) Cells(106, 4)には値が入っています。
アドバイス宜しくお願い致します。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
こんにちは。
コードを見る限りは、まだ入門編の段階でしょうから、本来、型の宣言は無視しても構いません。慣れるまでは、データ型の宣言はしなくてよいです。データ型の意味が分かるようになるまでは、かなり練習が必要です。データ型で、返る答えが違ってくることがあるからです。
>Dim x1, x2, st1, st2, st3 As String
>「型」はひとまとめには書けません。は知りませんでした。
書けないわけではなく、ただ指定されていない型がVairantになるだけです。
これは、VBAの仕様です。なお、あえて、型の宣言をナシにしても初級段階ではよいです。
Application.関数名は、古い書き方ですが、エラー値が返る時に、実行時エラーになりません。しかし、この場合の、st1 は、Variant にしないといけません。それは、エラー値が入るからです。これは、上級です。
st1 = WorksheetFunction.VLookup(x1, Range(Cells(102, 2), Cells(106, 4)), 3, False)
範囲の書き方は、上記のようにしても間違いありません。Applicationが省略されています。Applicationは、もちろん、Excelのオブジェクトということです。
A1スタイルのほうが、読みやすいなら、Range("B102:D106")としても良いし、Cellsスタイルで、行番号、列番号を入れても良いです。ただし、RangeとCellsを組み合わせた場合は、お互いが連結しあっていませんから、シートを指定する時は、出来る限り、ActiveSheet など、シートを With ステートメントで括ったほうがエラーは出にくいです。(分からなければ、無視して構いません。)
>x1 Cells(102, 2) Cells(106, 4)には値が入っています。
検索値が、範囲の中に値が必ずあるというなら、エラー回避は不要です。
'//
Sub Test1()
Dim x1, x2, st1, st2, st3 'データ型を省きます
x1 = Range("E41").Value
If x1 <> "" And WorksheetFunction.CountIf(Range("B102:B106"), x1) > 0 Then 'エラー回避(空白でないことと、"B102:B106"の範囲に、値があることの確認
st1 = WorksheetFunction.VLookup(x1, Range("B102:D106"), 3, False)
MsgBox st1, vbInformation
Else
MsgBox "値が見つかりません。", vbExclamation
End If
End Sub
'//
なお、角括弧は、直接、Rangeの役割はなく、Evaluate関数の省略形ですから、たとえ使えたとしても、有効性が限定されますから、VBAで、利用する時は細心の注意が必要です。上記で書いたRangeとCellと同じく、そのまま用いると、親オブジェクトのシートは、ActiveSheetだけになってしまいますし、パラメータが文字型ではないので、応用力がありません。。(これも、意味が分からないのでしたら、無視して構いません。ただ、なるべく標準的な書き方を学んでください。)
No.1
- 回答日時:
問題点1:DIM宣言の仕方が間違っている
問題点2:Setの使い方が間違っている
問題点3:範囲指定の仕方が間違っている
変数定義に関しては、どの変数をどの型で宣言したいのかよくわからないので、ここでは全てバリアント型としておきます。データ内容を知っているご自身で調整なさってください。参考までに、Dim宣言は複数の変数をまとめて扱えますが、「型」はひとまとめには書けません。仮に、全て文字型ならば、x1 As String,x2 As String,…と面倒でも一つ一つ書く必要があります。省略するとバリアント型になります。
以下修正サンプル:
Dim x1 As Variant,x2 As Variant '…以下略
x1 = Cells(41,5).Value
st1 = Application.VLookup(x1, [B102:D106], 3, False)
MsgBox st1
抜き出したst1をどうしたいのか不明なので、ここでは簡易的に、メッセージボックスに結果を表示する形にしています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) VBAで時間(00:00形式)を積算(足し算)したい 1 2022/11/15 17:04
- Visual Basic(VBA) Sheet1のA列にコードB列にメアド、Sheet2のB列にコード一覧とD列にメアド一覧があり、Sh 3 2022/10/19 11:57
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) エクセルVBA(実行時エラー438)の対処法を教えてもらえないでしょうか 3 2023/04/22 13:43
- Visual Basic(VBA) エラーコード1004 6 2022/06/09 14:12
- Excel(エクセル) R列の1111/11/11以外、且つQ列の×の条件で該当行のAからAE列までオレンジに塗りつぶす 2 2022/07/02 10:18
- Visual Basic(VBA) 3個のfileのセルデータを1個のfileのセルに貼り付けるVBAコードですが。 1 2023/02/20 09:21
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
至急!尿検査前日にオナニーし...
-
尿検査前日に自慰行為した時の...
-
白血球が多いとどんな心配があ...
-
彼女のことが好きすぎて彼女の...
-
検便についてです。 便は取れた...
-
腕を見たら黄色くなってる部分...
-
勃起する時って痛いんですか? ...
-
尿検査の前日は自慰控えたほう...
-
精子が黄色?
-
中出しをするとお腹が痛い・・・。
-
EXCELで条件付き書式で空白セル...
-
excelでsin二乗のやり方を教え...
-
これって喉仏ですか? 私は女性...
-
口の中に黒い血の塊
-
納豆食べた後の尿の納豆臭は何故?
-
2つの数値のうち、数値が小さい...
-
エクセル指定した範囲からラン...
-
筋トレするとチンコが縮んじゃ...
-
変な話しになります。尿検査で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
至急!尿検査前日にオナニーし...
-
首吊りどこ締めるの
-
尿検査の前日は自慰控えたほう...
-
尿検査前日に自慰行為した時の...
-
検便についてです。 便は取れた...
-
白血球が多いとどんな心配があ...
-
中出しをするとお腹が痛い・・・。
-
射精をして1週間以内に尿検査を...
-
彼女のことが好きすぎて彼女の...
-
腕を見たら黄色くなってる部分...
-
勃起する時って痛いんですか? ...
-
変な話しになります。尿検査で...
-
これって喉仏ですか? 私は女性...
-
EXCELで条件付き書式で空白セル...
-
男です。昨日の午後3時くらいに...
-
今朝、毎朝の習慣でオナニーし...
-
納豆食べた後の尿の納豆臭は何故?
-
1日前の検尿
-
値が入っているときだけ計算結...
-
精子が黄色?
おすすめ情報