OptionButtonを使って、検索する項目を変更する 【VBA在庫管理#30】

Excel VBA 部品在庫管理アイキャッチ画像部品在庫管理

マスクもさ、裏っ返して2回使えるよね、どうもoReです。

今回は、オプションボタンを使っていきます。

OptionButton

・OptionButton オプシャンバァタァン

Optionは、『選択』という意味みたいです。

 

まんま、選択するボタンってことね。

何がしたいかというと、

メーカー名・品名・型式など、選択した項目ごとで検索したいのよね。

 

とりあえず、部品検索フォームにオプションボタンを配置してみましょう。

オプションボタン配置

 

・OptionButton1のCaptionを『メーカー検索』に変更

・OptionButton2のCaptionを『品名検索』に変更

・OptionButton3のCaptionを『型式検索』に変更

 

これで実行してオプションボタンをポチってみてください。

oReのぞき見

どう? 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の中身は

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

 

動作確認してみてください。

ちゃんと項目ごとで検索できていますか?

oReのぞき見

 

えっ? 気づいちゃったかしら(笑)

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』 で進めていきます(笑)

よそはよそ、うちはうち!!

こまけぇこたぁ気にしない!!

oReバンザイ

 

SetFocus

・SetFocus セェトゥフォゥカァス

Setは、『整える』『設定』という意味みたいです。

Focusは、『焦点』という意味みたいです。

 

テキストボックスに入力後、オプションボタンの選択を変更すると
テキストボックスに入力したデータが残っていますよね?

 

テキストボックスのデータを消すには、テキストボックスをクリックして
データを消さなければなりません。

 

面倒くさいので、オプションボタンの選択を変更したら、
自動でその辺をやってもらいましょう。

 

オプションボタンをダブルクリック

オプションボタンダブルクリック

 

↓こんなんでました?

Private Sub OptionButton1_Click()

End Sub

 

そうしたら、このように書きましょう。

'オプションボタン1選択
Private Sub OptionButton1_Click()
  TextBox1 = ""
  TextBox1.SetFocus
End Sub

※オプションボタン2・3も同様にね。

動作確認してみてください。

oReのぞき見

 

まとめ

OptionButton 1つしか選択できない
OptionButton Boolean型
SetFocus 焦点を設定する

oReパンツ

次回 TextBox数字入力を検証するよ

ExcelVBA部品在庫管理【目次】へ戻る

コメント

タイトルとURLをコピーしました