[[20230904175135]] 『(vba初心者です)別シートのデータを検索するvba』(Summer.Sz) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『(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


もこな2様

コメントありがとうございます。
以前はこのように設定しました。

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


今のままでも概ねよさそうな気がします。(ちょっと気になる点はありますが)
要は「rng」に格納されるのが、別シートになればよいわけですよね。

ならば↓のようにしてみてはどうでしょうか?

    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


もこな2様

お返事ありがとうございます。検索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


もこな2様

お返事が遅くなり大変申し訳ございません。確認して、改めてお返事させていただきます。よろしくお願い申し上げます。
(Summer.Sz) 2023/09/13(水) 11:27:37


■3
反応ないですが乗りかかったなんとやらなので、Findメソッドを使った例を提示しておきます。
    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.