マスクもさ、裏っ返して2回使えるよね、どうもoReです。
今回は、オプションボタンを使っていきます。
OptionButton
・OptionButton オプシャンバァタァン
Optionは、『選択』という意味みたいです。
まんま、選択するボタンってことね。
何がしたいかというと、
メーカー名・品名・型式など、選択した項目ごとで検索したいのよね。
とりあえず、部品検索フォームにオプションボタンを配置してみましょう。
・OptionButton1のCaptionを『メーカー検索』に変更
・OptionButton2のCaptionを『品名検索』に変更
・OptionButton3のCaptionを『型式検索』に変更
これで実行してオプションボタンをポチってみてください。
どう? 1つのオプションボタンしか選択できませんよね?
これがオプションボタンの特性です。
逆に、複数選択したい場合は、チェックボックスというものを使用します。
・オプションボタンが選択された場合 True
・オプションボタンが選択されていない場合 False
Boolean型となります。
ではでは、部品検索プログラムを作りこんでいきますか。
部品検索プログラム変更
↑このデータベースを配列変数に入れた場合
With Sheet1 'データベースをDataBaseへ格納
LastRow = .Cells(Rows.Count, 2).End(xlUp).Row
DataBase = .Range(.Cells(6, 2), .Cells(LastRow, 17)).Value
End With
↓配列変数DataBaseの中身は
このようになります。
前回作成したプログラムは、型式の列(5列目)で検索してましたよね?
If DataBase(i, 5) Like "*" & TextBox1.Value & "*" Then
今回は、選択したオプションボタンによって、検索する列を変更します。
検索する列番号を引数でもらっちゃいますか。
引数?の方はこちら→【VBA在庫管理#20】
・Buhinknskプロシージャ変更
'部品検索→データ格納
Private Sub Buhinknsk(ByVal Retu As Integer) 'Retu(列番号)は整数でちょうだいね
Dim i As Long, cn As Long
cn = 0
For i = LBound(DataBase) To UBound(DataBase)
If DataBase(i, Retu) Like "*" & TextBox1.Value & "*" Then
cn = cn + 1
End If
Next i
If cn = 0 Then
ReDim KnskData(0)
KnskData(0) = "NoData"
Exit Sub
Else
ReDim KnskData(1 To cn, 1 To 5)
cn = 0
For i = LBound(DataBase) To UBound(DataBase)
If DataBase(i, Retu) Like "*" & TextBox1.Value & "*" Then
cn = cn + 1
'↓この部分Forでぶん回ししてもいいかもね
KnskData(cn, 1) = DataBase(i, 1) '部品管理№
KnskData(cn, 2) = DataBase(i, 2) 'バーコード
KnskData(cn, 3) = DataBase(i, 3) 'メーカー
KnskData(cn, 4) = DataBase(i, 4) '品名
KnskData(cn, 5) = DataBase(i, 5) '型式
End If
Next i
End If
End Sub
・TextBox1_Change変更
'部品検索処理
Private Sub TextBox1_Change()
ListBox1.Clear
If TextBox1 = "" Then
Exit Sub
Else
Dim Retu As Integer '変数の宣言は使用前でもOKよ
If OptionButton1.Value = True Then 'オプションボタン1を選択した場合
Retu = 3
ElseIf OptionButton2 = True Then Retu = 4 'オプションボタン2を選択した場合
ElseIf OptionButton3 Then Retu = 5 'オプションボタン3を選択した場合
Else 'オプションボタンを選択していない場合
MsgBox "検索する項目を選択してください。"
TextBox1 = ""
Exit Sub
End If
Call Buhinknsk(Retu) '引数にRetuを渡すよ(列番号)
ListBox1.List = KnskData
End If
End Sub
動作確認してみてください。
ちゃんと項目ごとで検索できていますか?
えっ? 気づいちゃったかしら(笑)
If OptionButton1.Value = True Then
ElseIf OptionButton2 = True Then
プロパティの.Valueは省略可能です。
省略した場合、だいたい.Valueとして処理されるみたい。
忖度ってやつだね(笑)
(# ゚Д゚)『そこじゃねーよ!!』って?
うん! わざと(*´з`)
ElseIf OptionButton3 Then
私も最近知ったんだけど、Boolean型で条件分岐する場合
このように書くらしいのよ。
Trueの場合
If OptionButton3 Then
Falseの場合
If Not OptionButton3 Then
詳しくはググってね。
でもさ、ぶっちゃけ分かりにくくね?
オレグラミングでは、『= True Then』 で進めていきます(笑)
よそはよそ、うちはうち!!
こまけぇこたぁ気にしない!!
SetFocus
・SetFocus セェトゥフォゥカァス
Setは、『整える』『設定』という意味みたいです。
Focusは、『焦点』という意味みたいです。
テキストボックスに入力後、オプションボタンの選択を変更すると、
テキストボックスに入力したデータが残っていますよね?
テキストボックスのデータを消すには、テキストボックスをクリックして
データを消さなければなりません。
面倒くさいので、オプションボタンの選択を変更したら、
自動でその辺をやってもらいましょう。
・オプションボタンをダブルクリック
↓こんなんでました?
Private Sub OptionButton1_Click()
End Sub
そうしたら、このように書きましょう。
'オプションボタン1選択
Private Sub OptionButton1_Click()
TextBox1 = ""
TextBox1.SetFocus
End Sub
※オプションボタン2・3も同様にね。
動作確認してみてください。
まとめ
次回 TextBox数字入力を検証するよ
コメント