このコミュニティでもたびたび質問されているVLOOKUPのVBAですが
解答例で多く書かれているのが
Public Sub test()
Dim MyVariant As Variant
MyVariant = Application.VLookup("excel", Range("A:B"), 2, False)
If IsError(MyVariant) Then
Debug.Print "Not Found"
Else
Debug.Print MyVariant
End If
End Sub
なのですがRangeの部分にシートの情報を乗せるとエラーが出ます
例)Application.VLookup(Label6.Caption, WorkSheets("Sheet5").Range("A:B"), 2, False)
まだまだ初心者なので何がおかしいのかわかりません
よろしくお願いします
No.3ベストアンサー
- 回答日時:
私もVBAでVLOOKUPは一般的ではないと思いますよ
VBA的にやるとこんな感じかな
Private Sub データ表示()
Dim a As Range
Label日付.Caption = Sheets("休暇・特勤").Cells(CurRow, 1)
Label曜日.Caption = Format(Sheets("休暇・特勤").Cells(CurRow, 1), "(aaa)")
Set a = Sheets("祝日").Range("B4:B34").Find(Sheets("休暇・特勤").Cells(CurRow, 1).Value)
If a Is Nothing Then
Label休日.Visible = False
Else
Label休日.Visible = True
End If
End Sub
試していないので、エラー出るかも
ありがとうございました。曜日の部分もスマートな形に訂正していただき感謝です。
マクロ、VBAを始めてほんのちょっと慣れてきましたが、知っている知識のみで処理をさせようとして無理が出たみたいです。
今後も精進していきます。
No.2
- 回答日時:
こんにちは。
>コミュニティでもたびたび質問されているVLOOKUPのVBAですが
たびたび? VBAのコードとしては、VLOOKUPは、ほとんど使わないと思います。
>Application.VLookup(Label6.Caption, WorkSheets("Sheet5").Range("A:B"), 2, False)
VBAとワークシートでは、Range オブジェクトの考え方が違います。必要な大きさだけ取ればよいのです。詳しい説明は混乱しかねませんから、割愛しますが、VBAはワークシートの延長ではありませんから、とてもイレギュラーです。
それと、 Label6.Caption って、どこのラベルなのでしょうか。これを、そのまま置いたところで、該当シートモジュール以外はエラーが発生するはずです。こういう場合、親オブジェクトから正しく書かなくてはなりません。言い換えると、コンテナを使わなくてはなりません。しかし、それより以前に、Label ではなく、TextBox にしてほしいものですね。
それと、Public キーワードを付けているか、分かっていればよいけれども、その書く意義が分からないなら、書かないほうがよいです。
後は、文字列か数値かということですが、それは、#1さんの回答に譲ります。
厳しい御指摘ありがとうございます。
ほかのコミュニティでもVBAに慣れてきた初心者の多い行動に
『すべてをVBAで処理させようとする』をあげておられました。
まさに今の私自身でした(汗)
指摘通り、Public キーワードを書く意義もわかっていませんでした。
Sheets("○")とWWorkSheets("○")の違いも今日知りました
また初心に帰って基礎を勉強します
No.1
- 回答日時:
>例)Application.VLookup(Label6.Caption, WorkSheets("Sheet5").Range("A:B"), 2, False)
このコードの前に
MsgBox TypeName(Label6.Caption)
を追加してみてStringと出たとします。
検索値が”数値”であった場合は「型が一致しない」となるかと。
そこで”数値”にしてあげるためVal関数を用いる。
MsgBox TypeName(Val(Label6.Caption))・・・Doubleになる。
Application.VLookup(Val(Label6.Caption), WorkSheets("Sheet5").Range("A:B"), 2, False)
と言う事ではないでしょうか。
この回答への補足
ありがとうございます
下記のものが実際のコードです
Private Sub データ表示()
Label日付.Caption = Sheets("休暇・特勤").Cells(CurRow, 1)
曜日 = Weekday(Label日付.Caption)
Select Case 曜日
Case vbSunday: Label曜日.Caption = "(日)"
Case vbMonday: Label曜日.Caption = "(月)"
Case vbTuesday: Label曜日.Caption = "(火)"
Case vbWednesday: Label曜日.Caption = "(水)"
Case vbThursday: Label曜日.Caption = "(木)"
Case vbFriday: Label曜日.Caption = "(金)"
Case vbSaturday: Label曜日.Caption = "(土)"
End Select
If IsError(Application.VLookup(Val(Label日付.Caption), Sheets("祝日").Range("B4:D34"), 3, False)) Then
ElseIf Application.VLookup(Val(Label日付.Caption), Sheets("祝日").Range("B4:D34"), 3, False) = False Then
Label休日.Visible = False
ElseIf Application.VLookup(Val(Label日付.Caption), Sheets("祝日").Range("B4:D34"), 3, False) = True Then
Label休日.Visible = True
End If
End Sub
祝日シートのB列に祝日の日付(1/1など)D列にTRUEと表記しています
ユーザーフォーム上でLabel日付.Captionに表示された日付になると『祝日です』と表記されるVBAを作ろうとしています。
しかし確認用に
Application.VLookup(Val(Label日付.Caption), Sheets("祝日").Range("B4:D34"), 3, False)の値を通常シートに表記すると全日付で『#N/A』となってしまいます?
ワークシート上で関数を使ってユーザーフォームに値を返したほうが無難ですかね?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) Sheet1のA列にコードB列にメアド、Sheet2のB列にコード一覧とD列にメアド一覧があり、Sh 3 2022/10/19 11:57
- Excel(エクセル) Formulaプロパティーを使ってセルに数式を組んだのですが簡潔にしたい。 3 2022/08/21 20:51
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Excel(エクセル) VBAのエラーが直せません 4 2023/06/12 22:10
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) vbaのvlookup関数エラー原因を教えていただけないでしょうか。 3 2022/04/25 16:16
- Excel(エクセル) VBA でvlookup エラーなどは削除したい 8 2022/12/30 04:03
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでVlookup機能を使うときに...
-
エクセルマクロ 変数をワーク...
-
エクセルVBAでオブジェクトが必...
-
エクセルのVBAについて教えてく...
-
複数シートを一括で保護を掛け...
-
マクロのコマンドボタン《Activ...
-
エクセルを共有にすると、シー...
-
コンボボックスへ降順に表示す...
-
VBAマクロ実行時エラーの修正に...
-
B列の最終行までA列をオート...
-
エクセル マクロ オートフィ...
-
Worksheets メソッドは失敗しま...
-
VBA シートをコピーする際に Co...
-
[EXCEL]ボタン押す→時刻が表に...
-
Excelで、あるセルの値に応じて...
-
エクセルで複数のシートのクリ...
-
「段」と「行」の違いがよくわ...
-
エクセルで離れた列を選択して...
-
マクロの「SaveAs」でエラーが...
-
LEFT関数とIF関数の組み合わせ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access-VBAでExcelファイ...
-
コンボボックスへ降順に表示す...
-
エクセルVBAでオブジェクトが必...
-
複数シートを一括で保護を掛け...
-
Excell VBA にて配列に定数を代...
-
エクセルのVBAについて教えてく...
-
マクロ実行後、画面がちかちか...
-
マクロのコマンドボタン《Activ...
-
Auto_Openマクロ
-
エクセルVBA 別シートの最終セ...
-
vbaアニメーションについて
-
Excelに関数使用を調べる方法
-
エクセルのVBAの関数について
-
エクセルマクロ 変数をワーク...
-
オフィス2003VBAのスプレッドシ...
-
エクセルの全てのシート名を一...
-
エクセルを共有にすると、シー...
-
エクセルの図形(線)の情報
-
EXCELに関する質問
-
エクセル マクロについて、 Inp...
おすすめ情報