[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『(vba初心者です)別シートのデータを検索するvba』(Summer.Sz)
こんばんは。初めて質問させて頂きます。
極めて初歩的な質問かもしれず大変恐縮ではございますが、どうぞよろしくお願い致します。
excelで簡単な検索ツールを作っております。シートのA2セル(検索窓)に入力した値を検索するのに、
・A2セルが空欄の場合「コードを入力して下さい」
・検索する値と参照データが部分一致又は完全一致の場合「該当あり」
・検索する値が参照データに一致しない場合「該当なし」
と表示されるようにしたいです。
参照するデータを同じブックの別シートにする場合、どのようにvbaを設定すればよろしいでしょうか。データは別シートの特定範囲ではなく、シート全体でokです。
ご存じの方、ご教示頂けますと幸甚です。何卒よろしくお願い申し上げます。
< 使用 Excel:Microsoft365、使用 OS:Windows11 >
■1
>A2セルが空欄の場合「コードを入力して下さい」
【検索する前に】IF文で分岐させればよいです
■2
>検索する値と参照データが部分一致又は完全一致の場合「該当あり」
【部分一致】で検索してヒットしたら「該当あり」にすればよいです。
(完全一致も、部分一致の中に含まれます)
>検索する値が参照データに一致しない場合「該当なし」
上記(部分一致)でヒットしなければ「該当なし」ですね。
■3
>参照するデータを同じブックの別シートにする場合
どのような方法で検索するかによりますが、ちゃんとシートを指定(修飾)すればよいとおもいます。
検索方法自体がわからないという話であれば【Findメソッド】について調べてみては如何でしょうか。
(もこな2 ) 2023/09/04(月) 18:41:49
コメントありがとうございます。
以前はこのように設定しました。
Sub 検索()
Dim rng As Range
Dim ck As Variant
If Range("A2").Value = "" Then
MsgBox "コード入力して下さい"
Exit Sub
End If
Set rng = Range("A6:A" & Cells(Rows.Count, 1).End(xlUp).Row)
ck = Application.Match(Range("A2").Value, rng, 0)
If IsError(ck) Then
MsgBox "該当なし"Else
MsgBox "該当あり"End If
End Sub
"A6:A" というのが参照するデータのあったセルです。この部分を別シートにしたいのですが、findメソッドと組み合わせる事が可能でしょうか?
Findメソッドも調べてみます。ありがとうございます。
(Summer.Sz) 2023/09/04(月) 21:47:30
ならば↓のようにしてみてはどうでしょうか?
Sub 検索_微修正() Dim rng As Range Dim ck As Variant
With Worksheets("別シート") Set rng = .Range("A6:A" & .Cells(Rows.Count, 1).End(xlUp).Row) End With
With ActiveSheet If .Range("A2").Value = "" Then MsgBox "コード入力して下さい" Else ck = Application.Match(.Range("A2").Value, rng, 0) If IsError(ck) Then MsgBox "該当なし" Else MsgBox "該当あり" End If End If End With End Sub
(もこな2) 2023/09/05(火) 00:49:18
お返事ありがとうございます。検索BOXがブランクだと”コード入力してください”と表示されるようになりました。ただ、別シートの参照データの値を正しく入れても”該当なし”と出てきまいました。当方で参照データの入力がないかおかしいのかもしれません・・もう少し、考えてみます。大変参考になりました。
(Summer.Sz) 2023/09/06(水) 14:54:24
Set rng = .Range("A6:A" & .Cells(Rows.Count, 1).End(xlUp).Row) ↓ Set rng = .Range(.Range("A6"), .Cells(Rows.Count, 1).End(xlUp)) (higejee) 2023/09/06(水) 16:04:02
■1
>シートの参照データの値を正しく入れても”該当なし”と出てきまいました。
↓だと【完全一致】になりますよね。
ck = Application.Match(.Range("A2").Value, rng, 0)
【部分一致】なら、↓のようにワイルドカードを追加してあげないとダメです。(※参照)
ck = Application.Match("*" & .Range("A2").Value & "*", rng, 0
その辺は問題ないでしょうか?
※検索欄(ActiveSheetのA2セル)にワイルドカードまで入れているならばその限りではないです。
■2
上記に関連しますが、「検索値」と「被検索データ」のサンプルを示せませんか?
「コード」と表現されているので、もしかしたら「被検索データ」は"数値"だったりしませんか?
(もこな2 ) 2023/09/06(水) 16:46:10
お返事が遅くなり大変申し訳ございません。確認して、改めてお返事させていただきます。よろしくお願い申し上げます。
(Summer.Sz) 2023/09/13(水) 11:27:37
Sub さんぷる() Dim 発見セル As Range
If ActiveSheet.Range("A2").Value = "" Then MsgBox "コード入力して下さい" Else Set 発見セル = Worksheets("別シート").Cells.Find(What:=ActiveSheet.Range("A2").Value, LookIn:=xlValues, LookAt:=xlPart)
If 発見セル Is Nothing Then MsgBox "該当なし" Else MsgBox "該当あり" End If End If End Sub
(もこな2) 2023/09/18(月) 09:34:00
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.