ここから本文です

【Excel】AutoFilterで複数条件(最大12条件)で抽出するためのVBA Worksheets(...

チョッピーさん

2019/1/2509:12:42

【Excel】AutoFilterで複数条件(最大12条件)で抽出するためのVBA

Worksheets("印刷用")のB列に北海道、東北、関東・・・四国、九州と12の地域を入力しています。

それをUserForm上で指定した時にAutoFilterで抽出できるようにしたいと考えています。

UserForm上にはCheckBoxとTextBoxを配置しており、
Check1、Text1が北海道、Check2、Text2が東北・・・Check12、Text12が九州となっております。各TextBoxの値は不変です。※画像をご参照ください。
Check1~12がTrueの地域を表示、Falseで非表示にしたいです。

CheckBox_Clickイベントで設定したかったので、
各CheckBox_Click()に以下のように書けばいけるかと思ったんですが、
考えが甘かったです。

For i = 1 To 12
If Me("Check" & i).Value = True Then
Worksheets("印刷用").Rows(2).AutoFilter field:=2, Criteria1:= Me("Text" & i).Text
Else
Exit Sub
End If
Next

また、現在のところB列に中国、四国など地域が入力されていないものもありますが、
今後増える可能性があるのでUserForm上では項目として設定しております。

ご教授のほどよろしくお願いいたします。

check&quot,Criteria1,Check1,UserForm上,checkbox,1 To 12,True Then

閲覧数:
51
回答数:
3
お礼:
250枚

違反報告

ベストアンサーに選ばれた回答

fro********さん

2019/1/2510:53:13

CheckBox_Clickでは動かないんじゃないかと。
これでやるならCheckBox1_Clickと書かないとなので、12個もプロシージャを書かないといけないと思います。
なので、コマンドボタンを1つ追加して実行用にしてください。
あと、配列を使わないと複数条件は無理です。
CommandButton1_Clickのプロシージャで下記コードで試してみてください。

Private Sub CommandButton1_Click()
Dim str(1 To 12) As String, f As String
Dim i As Long

For i = 1 To 12
If Me.Controls("CheckBox" & i).Value = True Then
str(i) = Me.Controls("TextBox" & i).Text
End If
Next

For i = 1 To 12
If str(i) <> "" Then
If f = "" Then
f = str(i)
Else
f = f & " , " & str(i)
End If
End If
Next
ActiveSheet.Rows(2).AutoFilter Field:=1, Criteria1:=Array(Split(f, ",")), Operator:=xlFilterValues
End Sub

  • 質問者

    チョッピーさん

    2019/1/2516:27:24

    ありがとうございます。
    イメージ通りの出来になりました。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2019/1/25 16:29:50

アドバイスいただいたようにコマンドボタンを配置しました。
印刷プレビューが表示される前段階で処理が出来るように設定してイメージ通りの出来になりました。ありがとうございます。

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

Chiquilinさん

2019/1/2510:13:29

何故 AutoFilter…… AdvancedFilterを使うべきかと思います。
Cliteliaは書き出しが必須ですが 数式も使えます。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

プロフィール画像

カテゴリマスター

aka********さん

2019/1/2510:00:38

For i = 1 To 12
If Me("Check" & i).Value = True Then
Worksheets("印刷用").Rows(2).AutoFilter field:=2, Criteria1:= Me("Text" & i).Text
Else
Exit Sub
End If
Next

では 一地区だけで フィルターをかけて 抽出を 終わり 次の地区を となりますが それで いいのですか?

チェックをいれたところは すべて ORで 検索するのでは

1地区で いいのなら
If Me("Check" & i).Value = True Then
条件 = Me.Controls("TEXTBOX" & I).Value
Worksheets("印刷用").Rows(2).AutoFilter Field:=2, Criteria1:=Array(条件), Operator:=xlFilterValues

いいと 思いますが

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

あわせて知りたい

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる