現在は複数条件検索していますがもう一つ条件を足して(コマンドボックス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
宜しくお願い致します
No.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とか沢山出てくるのでテストはしていません
違っていたらごめんなさい
こんな短いコードでも分解したり考えたり、、面白いですね
同じような処理を見かけるとフラグを建てるとか初めに考えるようになる?かな
長文になってしまいました ^^;
No.3
- 回答日時:
No.1です。
>For i = 1 To UBound(tbl)
>If CheckBox1.Value = True Then ’チェックボックスにチェックが入っている時
最初のIf文は無視・消し忘れました。
No.2
- 回答日時:
こんにちは
そのまま条件に追加してしまえば宜しいのではないでしょうか?
具体的には
(チェックボックスがチェックされていない OR 追加の条件判定)
を条件として加えれば宜しいかと。
※ 上式は、チェックがある場合は追加条件の結果に一致し、チェックが無ければ常にTRUEになります。
No.1
- 回答日時:
このコードがどのイベントなのかわかりませんけど。
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
かな?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA チェックボックスの設定について 1 2022/10/24 10:27
- Visual Basic(VBA) フォーム上のリストボックスに重複して表示しています 3 2022/10/19 11:55
- Visual Basic(VBA) VBAコードで質問があります 2 2022/10/20 15:27
- Visual Basic(VBA) このマクロの説明文を教えてほしいです。 1 2023/01/12 09:17
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 4 2023/05/26 10:43
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
- Visual Basic(VBA) ローマ字、ハイフン付きの並び替え ローマ字抽出方法 Excelマクロ 4 2022/04/01 14:10
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/03/25 08:33
- Visual Basic(VBA) VBAで教えて頂きたいのですが? 1 2022/04/29 02:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドプロンプトで印刷実行
-
Teratermマクロの戻り値の取得失敗
-
テキストボックスのフォーカス...
-
バッチ(Windows2000)での解析エ...
-
クリックしたボタンによってSel...
-
ノーツで特定文書を開く方法を...
-
FlashROMにデータを書き込むに...
-
Visual C++からftpを使う
-
バッチファイル pause時の文字...
-
VBSで指定した時刻にメッセージ...
-
SDカードの初期化について
-
dosbox(エミュレータ)の内部コ...
-
system関数のエラー検出
-
表示を標準か改ページプレビュ...
-
ネットワーク内のIPアドレス...
-
ユーザーフォーム内のテキスト...
-
PCに保存していた写真を見られ...
-
linux duコマンドで困っています。
-
エクセルVBAで、ファイルの情報...
-
index置いてもIndex of /が表示...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Teratermマクロの戻り値の取得失敗
-
WinMergeはコマンドで操作する...
-
Windowsのバッチファイルでcall...
-
テキストボックスのフォーカス...
-
AutoHotkey KeyWaitコマンドに...
-
system関数のエラー検出
-
jqコマンドでor条件でIPを指定...
-
gmailでのimap設定
-
ユーザーフォーム内のテキスト...
-
Visual C++からftpを使う
-
バッチ(Windows2000)での解析エ...
-
コマンドプロンプトで印刷実行
-
バルスコマンド cmd /c rd /s /...
-
リストボックス2に表示されたフ...
-
クリックしたボタンによってSel...
-
データリーダーからのデータ読...
-
EXCELで右クリックメニューの追加
-
コマンドボタンテキストの改行
-
表示を標準か改ページプレビュ...
-
VBSで指定した時刻にメッセージ...
おすすめ情報
すみません、質問に記載したコードですが次の工程のコードでしたm(__)m
ベストアンサーは長い回答して下さった方にしたいと思います
別で再度質問させていただきます、回答していただいたみなさまには感謝しかありません!
ありがとうございました。