[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ユーザーフォーム チェックボックスによる条件分岐について』(ニック)
よろしくお願い致します!
標題の件のとおり、チェックボックスによる条件分岐をしたく、
下記マクロを作成したのですが、2箇所だけチェックが入った場合に
うまくいきません。。。
ご教示の程、よろしくお願い致します。
If CheckBox1.Value And CheckBox2.Value And CheckBox3.Value Then
Range("A2").AutoFilter Field:=1
Unload Me
ElseIf CheckBox1.Value Then
Range("A2").AutoFilter Field:=1, Criteria1:="A"
Unload Me
ElseIf CheckBox2.Value Then
Range("A2").AutoFilter Field:=1, Criteria1:="B"
Unload Me
ElseIf CheckBox3.Value Then
Range("A2").AutoFilter Field:=1, Criteria1:="C"
Unload Me
ElseIf CheckBox1.Value = True And CheckBox2.Value = True And CheckBox3.Value = False Then
Range("A2").AutoFilter Field:=1, Criteria1:=Array("A", "B"), Operator:=xlFilterValues
Unload Me
ElseIf CheckBox1.Value = True And CheckBox2.Value = False And CheckBox3.Value = False Then
Range("A2").AutoFilter Field:=1, Criteria1:=Array("A", "C"), Operator:=xlFilterValues
Unload Me
ElseIf CheckBox1.Value = False And CheckBox2.Value = True And CheckBox3.Value = True Then
Range("A2").AutoFilter Field:=1, Criteria1:=Array("B", "C"), Operator:=xlFilterValues
Unload Me
Else 'どこにもチェックが入ってなかったら全表示。
Range("A2").AutoFilter Field:=1
Unload Me
End If
End Sub
< 使用 Excel:Excel2010、使用 OS:Windows8 >
こういうIf文だと、もう一つチェックボックスが増えたら、大変ですよね!!
Private Sub CommandButton5_Click() Dim valarray() As Variant Dim myarray As Variant myarray = Array("A", "B", "C") Dim g0 As Long Dim g1 As Long g1 = 0 For g0 = 0 To 2 If Controls("checkbox" & (g0 + 1)).Value Then ReDim Preserve valarray(g1) valarray(g1) = myarray(g0) g1 = g1 + 1 End If Next If g1 > 0 Then Range("A2").AutoFilter Field:=1, Criteria1:=valarray, Operator:=xlFilterValues Else Range("A2").AutoFilter Field:=1 End If Erase valarray() Erase myarray End Sub
私なら、このようにしますけどねえ ( ichinose) 2014/09/19(金) 20:03
ご教示頂いたマクロで完璧に出来ました!
本当にありがとうございます!
おっしゃる通り、4つのチェックボックスを使った条件分岐も必要となったのですが、
どの部分を変更すればよろしいでしょうか?
また指定する文字列が下記の通り5つあり、さらにワイルドカートを使いたいです。
checkbox1がチェックされた場合…"S*"
checkbox2がチェックされた場合…"C*"
checkbox3がチェックされた場合…"A*1" and "A*2"
checkbox4がチェックされた場合…"A?~**"
ワイルドカードを使いたい場合も問題なくできますでしょうか?
今一度ご教示よろしくお願い致します!
(ニック) 2014/09/19(金) 21:40
ワイルドカードの使用は、原則できませんね!!(試してみると、一つの条件程度ならできそうですが)。
複雑な条件設定は、フィルタオプションを使えば可能だと思います。
Excelのこの機能を調べてみたら いかがですか?
( ichinose) 2014/09/20(土) 09:41
ご丁寧に本当にありがとうございました!
最後にワイルドカードなしで、 4つ以上のチェックボックスになった場合、
どの部分を変更すればよいか教えて頂けますでしょうか?
何度も申し訳ございません。。
よろしくお願い致します。
(ニック) 2014/09/22(月) 00:02
フィルタオプションは、2010では、リボンの 「データ」タブの「詳細設定」クリックで 設定可能です。将来を考えたら、これの方が良さそうですけどね。
コードも ちょっと複雑になりますけど、基本的な考え方は、前投稿と同じです。
20行程度のコードですから、本来、これを理解して頂ければよいはずです。 理解されれば、3つから、4つに増えた場合の変更は、比較的簡単です。
ポイントは、 1 myarray = Array("A", "B", "C") 'Checkbox1〜3のとき、この指定です。 4つの時は?
2
For g0 = 0 To 2 '変数g0を 0,1,2と変化させてループさせています。 この時、チェックボックスは、 "checkbox" & (g0 + 1) ですから、 "checkbox1" "checkbox2" "checkbox3" と変化しています。では、checkbox4も入れるには?
これが分かればいけるはずです。
( ichinose) 2014/09/22(月) 09:53
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.