現在は複数条件検索していますがもう一つ条件を足して(コマンドボックス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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
クリックしたボタンによってSel...
-
バッチファイル pause時の文字...
-
表示を標準か改ページプレビュ...
-
C# mciSendStringでエラーコー...
-
RPGでのダメージの算出方法につ...
-
Windowsのバッチファイルでcall...
-
コマンドボタンテキストの改行
-
PCに保存していた写真を見られ...
-
拡張子をつくる
-
【MRTG】グラフ表示で抜けがある。
-
soulseek日本語ぱっちについて...
-
FFFTPの自動化バッチについて
-
フォルダ名やファイル名、テキ...
-
EPSON emqファイルをPrint CDで
-
フォルダー構成のみをコピーしたい
-
robocopyをすると隠し属性フォ...
-
ファイルの作成日時について
-
OpenFileDialogを使った後にも...
-
メモリマップドファイルは動作...
-
MkDir パス名が無効です
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Teratermマクロの戻り値の取得失敗
-
ユーザーフォーム内のテキスト...
-
Visual C++からftpを使う
-
system関数のエラー検出
-
Windowsのバッチファイルでcall...
-
コマンドプロンプトで印刷実行
-
コマンドプロンプトでサービス...
-
テキストボックスのフォーカス...
-
シリアル通信でのread関数の戻り値
-
バッチ(Windows2000)での解析エ...
-
VBで定期的にタイムサーバに時...
-
データリーダーからのデータ読...
-
リストボックス2に表示されたフ...
-
バッチファイル pause時の文字...
-
popen使用時のエラー出力を出し...
-
VBA USB接続のラベルプリンタ...
-
クリックしたボタンによってSel...
-
RPGでのダメージの算出方法につ...
-
telnetで接続した先のコマンド...
-
FlashROMにデータを書き込むに...
おすすめ情報
すみません、質問に記載したコードですが次の工程のコードでしたm(__)m
ベストアンサーは長い回答して下さった方にしたいと思います
別で再度質問させていただきます、回答していただいたみなさまには感謝しかありません!
ありがとうございました。