プロが教える店舗&オフィスのセキュリティ対策術

エクセルにて部品の管理表を作成しています。
列項目としては部品名、メーカー、型番があり、ユーザーフォーム内のテキストボックス(部品名、メーカー、型番)から部分一致の検索(コマンドボタン)を行い、オートフィルタにより抽出を行いたいです。

検索のコマンドボタンのマクロは以下の通りです。

Private Sub kensaku_Click()

Dim buhin As Variant
Dim maker As Variant
Dim kataban As Variant

buhin = buhin_TextBox1.Text
maker = maker_TextBox2.Text
kataban = kataban_TextBox3.Text

Selection.AutoFilter Field:=1, Criteria1:="=*" & buhin & "*"
Selection.AutoFilter Field:=2, Criteria1:="=*" & maker & "*"
Selection.AutoFilter Field:=3, Criteria1:="=*" & kataban & "*"

End Sub

この場合だと、部品名、メーカー、型番内に空欄のセルが入っている場合とセル内が数値だった場合、データが抽出されません。
どなたか原因、改善策についてご教授いただけないでしょうか。
よろしくお願いいたします。

A 回答 (3件)

#2の回答を読み返してみました。


判り難いかも、、、
多分、セル側の数値を文字にする方法(書式ではなく 'を付加する)などが考えられます。は乱暴ですね。
数値に*はそもそもな<=や>ですから、そのまま抽出出来れば良いのだと思います。
*文字*や数値が混在するのなら、やはり条件を2つにする事が簡単だと思います。要件が合わなかったら忘れてください。

If buhin <> "" Then
Selection.AutoFilter Field:=1, Criteria1:="=*" & buhin & "*"
End If
If maker <> "" Then
Selection.AutoFilter Field:=2, Criteria1:="=*" & maker & "*"
End If
If kataban <> "" Then
Selection.AutoFilter Field:=3, Criteria1:="=*" & kataban & "*", Operator:=xlOr, Criteria2:=kataban
End If
    • good
    • 0
この回答へのお礼

希望通りのプログラムでした。
ありがとうございました。

お礼日時:2021/12/16 19:53

こんばんは、


>部品名、メーカー、型番内に空欄のセルが入っている場合
Criteria1:="=*" なので 該当がなくすべて表示されません。
対策としては

If buhin <> "" Then Selection.AutoFilter Field:=1, Criteria1:="=*" & buhin & "*"
こんな感じでどうでしょう。(値がある場合のみフィルタ実行)

>セル内が数値だった場合
これに付いては、色々ありますが、要件によって分ける必要があるかも知れません。
パターンマッチング、ワイルドカードをどうしても使用するのであれば
セル側の数値を文字にする方法(書式ではなく 'を付加する)などが考えられます。

又はTextBox3の値が数値であった場合、IFで分岐して
Selection.AutoFilter Field:=3, Criteria1:= kataban で処理するとか、、
どの様なデータでどの様な結果を出したいか不明なので(*を使用している為)
他にも良く分かりませんが、2条件(数値と文字列)を作成してフィルタ実行するとか、、かな。。
    • good
    • 0

基本を押さえて。

(いくつかのページで構成されてます)
http://officetanaka.net/excel/vba/tips/tips155.htm

3つ以上の場合。
https://daitaideit.com/vba-autofilter-multi/#mok …

ググって参考になると思う箇所を載せました。
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング