顧客情報検索フォームを作成しています
ふりがな検索であいまい検索もいけるようにはできたのですが
項目追加のやりかたがわかりません
やりたいこと
・ふりがな検索と同じように
電話番号
住所
チェックボックス3つ
を追加したい(フォームには追加してデザインは完成しています)
・チェックボックスだけの検索もできるようにしたいです
(そういうことができるのであれば)
###追記
コマンドボタン等は検索フォームには設置しておらず
エンターキーで確定された時点でリスト欄に表示するようになっています
・ふりがなをあいまい検索するとリストに該当者が現れる
さらに絞り込むためチェックボックスで絞り込む
こういう使い方がしたいです(And検索ですね)
電話番号もあいまい検索です
こちらがコードです
Private Sub UserForm_Initialize() rtnNo = 0 Call SetListBox End Sub Private Sub txtふりがな_Change() Call SetListBox End Sub Private Sub txt電話番号_Change() Call SetListBox End Sub Private Sub lst顧客リスト_DblClick(ByVal Cancel As MSForms.ReturnBoolean) rtnNo = Me.lst顧客リスト.Text Unload Me '← フォームを閉じる End Sub Private Sub SetListBox() Dim wRow As Long Dim wLstRow As Long Me.lst顧客リスト.Clear wLstRow = 0 For wRow = 2 To Worksheets("顧客情報").Range("A1").CurrentRegion.Rows.Count If Me.txtふりがな = "" Then Me.lst顧客リスト.AddItem "" Me.lst顧客リスト.List(wLstRow, 0) = wRow Me.lst顧客リスト.List(wLstRow, 1) = Worksheets("顧客情報").Cells(wRow, 2) wLstRow = wLstRow + 1 Else If InStr(1, Worksheets("顧客情報").Cells(wRow, 2), Me.txtふりがな, vbTextCompare) > 0 Then Me.lst顧客リスト.AddItem "" Me.lst顧客リスト.List(wLstRow, 0) = wRow Me.lst顧客リスト.List(wLstRow, 1) = Worksheets("顧客情報").Cells(wRow, 2) wLstRow = wLstRow + 1 End If End If Next End Sub
コードはマークダウンのコードブロックに入れてください。下記を参考に。
https://teratail.com/help/question-tips#questionTips3-5-1
あと、以下の点について質問に情報を追加してください。
「・チェックボックスだけの検索もできるようにしたいです」とのことですが、具体的にはどのような検索がしたいのですか。これだけではなんのことか分かりません。
ふりがな、電話番号、住所 はそれぞれ単独で検索するのですか。
つまり、ふりがなを編集したらそのふりがなだけで検索する。他のテキストボックスの値は無視する。
あるいは、それぞれのテキストボックスの値を合わせて抽出条件とするのでしょうか。
それぞれのテキストボックスの値をすべて満たす条件(And条件)で抽出する。
また、電話番号もあいまい検索でしょうか。
追記完了しました ありがとうございます
> さらに絞り込むためチェックボックスで絞り込む
> こういう使い方がしたいです(And検索ですね)
この辺が何をしたいのか分かりづらいです。もう少し具体的に説明してもらえませんか。
ふりがなであいまい検索 → リストボックスに該当者表示
・該当者複数の為 絞り込みたい
→チェックボックスでフリガナ検索で出てきた人のなかからまた検索
という使い方と
チェックボックスだけで検索
checkbox1だけチェックを入れたらそのカテゴリーの人が
表示される
チェックボックスでは このふたつをやりたいです
これでわかりますでしょうか
シートにカテゴリーの列があるということですか。
チェックボックスのキャプションはカテゴリ名になっているということでしょうか。
シートに種類というセルがあり
チェックボックス3つの名前はそれぞれ違います
チェックボックスは3つなのですがセルは1つしかありません
3つのうちどれかにチェックをいれてそれをセルへ反映させています
Private Sub UserForm_Initialize()
rtnNo = 0
Call SetListBox
End Sub
Private Sub txtふりがな_Change()
Call SetListBox
End Sub
Private Sub txt電話番号_Change()
Call SetListBox
End Sub
Private Sub lst顧客リスト_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
rtnNo = Me.lst顧客リスト.Text
Unload Me
End Sub
Private Sub SetListBox()
Dim wRow As Long
Dim wLstRow As Long
Me.lst顧客リスト.Clear
wLstRow = 0
With Worksheets("顧客情報")
For wRow = 2 To .Range("A1").CurrentRegion.Rows.Count
If (Me.txtふりがな = "" Or .Cells(wRow, 2) Like "*" & Me.txtふりがな & "*") _
And (Me.txt電話番号 = "" Or .Cells(wRow, 2) Like "*" & Me.txt電話番号 & "*") _
And (Me.txt住所 = "" Or .Cells(wRow, 2) Like "*" & Me.txt住所 & "*") Then
Me.lst顧客リスト.AddItem ""
Me.lst顧客リスト.List(wLstRow, 0) = wRow
Me.lst顧客リスト.List(wLstRow, 1) = .Cells(wRow, 2)
wLstRow = wLstRow + 1
End If
Next
End With
End Sub
これで動かしていますが ふりがな以外 該当者なしになってしまいます。
「シートに種類というセル」というのは一つのセルに「種類」という名前を付けたということですか。
チェックボックスにチェックを入れたら、そのチェックボックスのCaptionプロパティの値をそのセルに代入したいということですか。
質問の「チェックボックスだけの検索」とか、コメントの「checkbox1だけチェックを入れたらそのカテゴリーの人が表示される」という説明と矛盾しているようですが。
もう少しやりたいことを整理して、具体的に説明してもらわないと理解できないです。
シートの内容が分かる画像も追加してもらった方が理解しやすいですね。
回答のコードを修正してますので、そちらで試してみてください。
例えば
種類セルというか、種類列があり「営業担当」「販売担当」等が入っていて
チェックボックス1をチェックすると種類列に「営業担当」が入ってる行の人が絞り込まれる。
とかそんな感じでしょうか?
種類セルの概要が不明なのと、チェックボックスのラベルがデフォのため、伝わらないですよ。
#背後に見える「不用品」が種類ですかね?
更新していなかった。申し訳ない。
シートの画像を追加しました
セルの名前は「種類」でチェックボックスは「不用品」「害獣」「その他」です
検索フォームでは どれか一つで検索をかけたり
ふりがな検索から名前をしぼりこんで さらに「不用品」だけのひとを表示したい
>チェックボックスのCaptionプロパティの値をそのセルに代入したいということですか。
これはちがいます セルではなく検索フォームのなかのリストに表示してほしいです
用語は正確に使わないと他人に伝わりませんよ。例えば、
「シートに種類というセル」→「シートに項目名「種類」の列がある」
「3つのうちどれかにチェックをいれてそれをセルへ反映」→「チェックボックスのキャプション名と「種類」列を条件にデータをリストボックスに抽出したい」
>「シートに項目名「種類」の列がある」
>「チェックボックスのキャプション名と「種類」列を条件にデータをリストボックスに抽出したい」
この認識で大丈夫です
回答1件
あなたの回答
tips
プレビュー