[[20140919173512]] 『ユーザーフォーム チェックボックスによる条件分』(ニック) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ユーザーフォーム チェックボックスによる条件分岐について』(ニック)

よろしくお願い致します!
標題の件のとおり、チェックボックスによる条件分岐をしたく、
下記マクロを作成したのですが、2箇所だけチェックが入った場合に
うまくいきません。。。
ご教示の程、よろしくお願い致します。

******************

Private Sub CommandButton5_Click()

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

Ichinoseさん

ご教示頂いたマクロで完璧に出来ました!
本当にありがとうございます!

おっしゃる通り、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


Ichinoseさん

ご丁寧に本当にありがとうございました!
最後にワイルドカードなしで、 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.