アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在は複数条件検索していますがもう一つ条件を足して(コマンドボックス5)検索をかけたいのですが
何か良い方法ありませんでしょうか?
例えばfoamのコマンドボックス5のところにチェック入れて有効になり
外すと今まで通りの検索になるようにですね

tbl = Range("D1:N" & Cells(Rows.Count, 4).End(xlUp).Row)
Dim i As Long
ListBox1.Clear
For i = 1 To UBound(tbl)
If tbl(i, 2) = ComboBox3.Value And _
tbl(i, 3) = ComboBox4.Value And _
tbl(i, 7) = ComboBox5.Value And _'オプションボタンで無効有効化したい
tbl(i, 10) = "" And _
tbl(i, 6) = ListBox2.List(ListBox2.ListIndex) * 1 Then
tbl(i, 10) = "" '出荷日空白のみ
With ListBox1
.AddItem tbl(i, 1)
End With
宜しくお願い致します

「VBAチェックボックスで有効無効切り替え」の質問画像

質問者からの補足コメント

  • へこむわー

    すみません、質問に記載したコードですが次の工程のコードでしたm(__)m
    ベストアンサーは長い回答して下さった方にしたいと思います
    別で再度質問させていただきます、回答していただいたみなさまには感謝しかありません!
    ありがとうございました。

      補足日時:2022/10/24 10:18

A 回答 (5件)

なんとなくわかる初心者と思って回答します


気を害するように受け取れる部分がありましたらあらかじめおわびします

既に回答されていますが・・
一番ざっくりと言うならば、ご質問の文字通りに処理を追加すれば出来ると思いますよ
ご質問にはちょっと解釈が上手く出来ない部分がありますが
掲示コードが今まで通りなら
チェックが入っていたら今まで通り tbl(i, 7) = ComboBox5.Value 有効
入っていなければ条件から外す・・となります

どうすれば良いか分からないと思うのでこんな感じ
(文字通りCheckBox1のIf文で処理を2つ書く)さほど悩まずに出来るはず)

tbl = Range("D1:N" & Cells(Rows.Count, 4).End(xlUp).Row)
Dim i As Long
ListBox1.Clear
For i = 1 To UBound(tbl)
If CheckBox1.Value = True Then ' 条件 bl(i, 7) = ComboBox5.Value を含む
If tbl(i, 2) = ComboBox3.Value And _
tbl(i, 3) = ComboBox4.Value And _
tbl(i, 7) = ComboBox5.Value And _
tbl(i, 10) = "" And _
tbl(i, 6) = ListBox2.List(ListBox2.ListIndex) * 1 Then
tbl(i, 10) = "" '出荷日空白のみ
With ListBox1
.AddItem tbl(i, 1)
End With
Else '条件 bl(i, 7) = ComboBox5.Value を除く
If tbl(i, 2) = ComboBox3.Value And _
tbl(i, 3) = ComboBox4.Value And _
tbl(i, 10) = "" And _
tbl(i, 6) = ListBox2.List(ListBox2.ListIndex) * 1 Then
tbl(i, 10) = "" '出荷日空白のみ
With ListBox1
.AddItem tbl(i, 1)
End With
End If

まぁ、見栄えを気にするような場合を除きますね

もし、スマートなコードに纏めたいとか思われるなら
If文を理解して作り直してみるのが良いと思います
先ずは全部Andなので外して考えるのはどうでしょうか・・

For i = 1 To UBound(tbl)
If tbl(i, 2) = ComboBox3.Value Then
If tbl(i, 3) = ComboBox4.Value Then
If tbl(i, 7) = ComboBox5.Value Then
If tbl(i, 10) = "" Then
If tbl(i, 6) = ListBox2.List(ListBox2.ListIndex) * 1 Then
tbl(i, 10) = "" '出荷日空白のみ
With ListBox1
.AddItem tbl(i, 1)
End With
End If
End If
End If
End If
End If
Next

条件順位がどうか、CheckBoxの条件をどこに入れれば合理的なのかなどを
実際に合わせて考えてみましょう

If文を重ねて書く場合、出来るだけTrueにならないものから書きます
(余計な処理をさせたくないから)
予想すると
If tbl(i, 6) = ListBox2.List(ListBox2.ListIndex) * 1 かな・・
* 1している所を見るとIDやジャンコードなど一意の可能性がある気がします
となると
For i = 1 To UBound(tbl)
If tbl(i, 6) = ListBox2.List(ListBox2.ListIndex) * 1 Then
次は、実行部分で変更している
If tbl(i, 10) = "" Then ?
あとはComboBox・・・

あとはtbl(i, 7) = ComboBox5.Value をするかしないかなので
最後の部分で条件に加えるかどうかの処理をすればよい?

If CheckBox1.Value = True Then
If tbl(i, 7) = ComboBox5.Value Then
tbl(i, 10) = "" '出荷日空白のみ
With ListBox1
.AddItem tbl(i, 1)
End With
End If
Else
tbl(i, 10) = "" '出荷日空白のみ
With ListBox1
.AddItem tbl(i, 1)
End With
End If

最後にAndで纏められる条件を作り直すとか・・
メイン処理
tbl(i, 10) = "" '出荷日空白のみ
With ListBox1
.AddItem tbl(i, 1)
End With
が2度書くのがスマートでない場合はサブに出すとかしますが

If CheckBox1.Value = True Then
If tbl(i, 7) = ComboBox5.Value Then
でBooleanを作り最終段階で判定するとかでも出来ると思います

少し飛ばして色々まとめると
tbl = Range("D1:N" & Cells(Rows.Count, 4).End(xlUp).Row)
Dim i As Long
Dim flag As Boolean
ListBox1.Clear
For i = 1 To UBound(tbl)
If CheckBox1.Value = True Then
If tbl(i, 7) = ComboBox5.Value Then
flag = True ’条件がTRUEならフラグを建てる
Else
flag = False
End If
Else
flag = True ’条件を加えない場合はフラグを建てる
End If
If tbl(i, 2) = ComboBox3.Value And _
tbl(i, 3) = ComboBox4.Value And _
tbl(i, 10) = "" And _
tbl(i, 6) = ListBox2.List(ListBox2.ListIndex) * 1 And _
flag = True Then 'フラグを条件に加える
tbl(i, 10) = "" '出荷日空白のみ
With ListBox1
.AddItem tbl(i, 1)
End With
End If

ComboBoxとか沢山出てくるのでテストはしていません
違っていたらごめんなさい
こんな短いコードでも分解したり考えたり、、面白いですね
同じような処理を見かけるとフラグを建てるとか初めに考えるようになる?かな

長文になってしまいました ^^;
    • good
    • 0
この回答へのお礼

回答ありがとうございますm(__)m
参考にやってみます

お礼日時:2022/10/24 09:28

No.1です。



もしかしてダメだったかも?
検証できないのはやっぱ不利かな(初級者レベルなジジィなので)。
と言うか文的に変になるのに気づけないボケだなぁ。
    • good
    • 0
この回答へのお礼

回答ありがとうございますm(__)m
参考にやってみます

お礼日時:2022/10/24 09:28

No.1です。



>For i = 1 To UBound(tbl)
>If CheckBox1.Value = True Then ’チェックボックスにチェックが入っている時

最初のIf文は無視・消し忘れました。
    • good
    • 0

こんにちは



そのまま条件に追加してしまえば宜しいのではないでしょうか?

具体的には
 (チェックボックスがチェックされていない OR 追加の条件判定)
を条件として加えれば宜しいかと。

※ 上式は、チェックがある場合は追加条件の結果に一致し、チェックが無ければ常にTRUEになります。
    • good
    • 0

このコードがどのイベントなのかわかりませんけど。


http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/v …

For i = 1 To UBound(tbl)
If CheckBox1.Value = True Then ’チェックボックスにチェックが入っている時
If tbl(i, 2) = ComboBox3.Value And _
tbl(i, 3) = ComboBox4.Value And _
If CheckBox1.Value = True Then ’チェックボックスにチェックが入っている時だけ
tbl(i, 7) = ComboBox5.Value And _
End If
tbl(i, 10) = "" And _
tbl(i, 6) = ListBox2.List(ListBox2.ListIndex) * 1 Then
tbl(i, 10) = "" '出荷日空白のみ
With ListBox1
.AddItem tbl(i, 1)
End With

かな?
    • good
    • 0

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