[[20160614190124]] 『複数の列のフィルターを集約したいのですが』(つむつむ) ページの最後に飛ぶ

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

 

『複数の列のフィルターを集約したいのですが』(つむつむ)

日頃から拝見させて頂いて降ります。
有難うございます。

A1からD1は連結しています。(選択リスト)
1行目にフィルターを設定しています。
選択リストのフィルター▼をクリックした場合A列からD列の、全てのデーターを一括で下記の様に表示させたいのですが
エクセルの機能で出来るのでしょうか

      A        B      C        D
  1          選択リスト		 ▼
  2 たい			
  3 りんご  さば		
  4 大根    バナナ  はまち	
  5 かれい  なすび  メロン   かれい
  6         いちご  いも     いちご
  7                 メロン   きのこ
  8                          たい

                              ▼
                          ☑いちご
                          ☑いも
                          ☑かれい
                          ☑きのこ
                          ☑さば
                          ☑たい
                          ☑大根
                          ☑なすび
                          ☑バナナ
                          ☑はまち
                          ☑メロン
                          ☑りんご
宜しくお願い致します。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 こんばんわ。

 お望みの事はオートフィルタでは不可能です。

 例えばりんごにチェックが入っていて、さばのチェックが外れていたら矛盾が出ますね。
 そう言う事が出来た方がおかしいですね。

 E列にAからD列の文字を結合させて表示させて、E列でフィルタとかなら可能です。

(sy) 2016/06/14(火) 20:21


sy様
ご連絡有難うございます。

フィルターでは、無理でしょうか

出来る事なら下記の様に、選択したバナナとりんごのデーターが有る行を表示したいのですが

フィルター以外でも出来ないでしょうか

      A        B      C        D
  1          選択リスト		 ▼		
  3 りんご  さば		
  4 大根    バナナ  はまち	

                              ▼
                          □いちご
                          □いも
                          □かれい
                          □きのこ
                          □さば
                          □たい
                          □大根
                          □なすび
                          ☑バナナ
                          □はまち
                          □メロン
                          ☑りんご

宜しくお願い致します。

(つむつむ) 2016/06/14(火) 21:06


 先程も申し上げたように、上記例だとりんごにチェックが入って、サバにチェックが入っていないと、
 表示データに矛盾が生じます。
 バナナにチェックが入って、大根とはまちにチェックが無いのも同じです。
 フィルタの機能としては、チェックの無いものは表示してはいけませんよね。

 そう言う矛盾を許せる構造の方がおかしいと思いませんか?

(sy) 2016/06/14(火) 21:18


sy様
ご連絡有難うございます。

そうですよね

やっぱり無理ですよね

諦めます。

有難うございました。
(つむつむ) 2016/06/14(火) 21:23


 条件が一つなら関数で表示できます。
 条件が2つ以上でも出来ない事は無いと思いますが、かなり複雑になります。
 ちょっと考えるのが面倒なので、需要があればで、

 例えば下のようなレイアウトにして、
     |[A]   |[B]   |[C]   |[D]   |[E]|[F]   |[G]   |[H]   |[I]   
 [1]|たい  |      |      |      |   |メロン|      |      |      
 [2]|りんご|さば  |      |      |   |かれい|なすび|メロン|かれい
 [3]|大根  |バナナ|はまち|      |   |      |      |メロン|きのこ
 [4]|かれい|なすび|メロン|かれい|   |      |      |      |      
 [5]|      |いちご|いも  |いちご|   |      |      |      |      
 [6]|      |      |メロン|きのこ|   |      |      |      |      
 [7]|      |      |      |たい  |   |      |      |      |      

 F1に検索する名前

 F2 =IFERROR(INDEX(A:A,AGGREGATE(15,6,(1/($A$1:$D$7=$F$1))*ROW($1:$7),ROW(A1)))&"","")
 I列までと下にオートフィル

(sy) 2016/06/14(火) 21:50


Sub main()
    Dim dic1 As Object, dic2 As Object, c As Range, k
    Set dic1 = CreateObject("Scripting.Dictionary")
    Set dic2 = CreateObject("Scripting.Dictionary")
    Rows("1:" & Rows.Count).EntireRow.Hidden = False
    For Each c In ActiveSheet.UsedRange.Columns("A:D").Cells
        If Trim(c.Value) <> "" Then dic1(c.Value) = True
    Next c
    For Each k In dic1.keys
        mg = MsgBox(k & "をチェックしますか?", 36)
        If mg = 6 Then dic2(k) = True
    Next k
    Rows("1:" & Rows.Count).EntireRow.Hidden = True
    For Each c In ActiveSheet.UsedRange.Columns("A:D").Cells
        If dic2(c.Value) Then Rows(c.Row).EntireRow.Hidden = False
    Next c
End Sub
(mm) 2016/06/15(水) 18:18

sy様
ご連絡有難うございます。

今回やりたい事は、フィルター機能を使い検索した結果で行を表示させることでしたので
ご提案を頂きました関数では残念ながら、当初の目的を達成する事は出来ませんでした。
AGGREGATE関数は初めての経験ですので、勉強させて頂き今後に役立てたいと思います。

有難うございました。

mm様
ご連絡有難うございます。

あきらめて降りましたので感激です。

ほぼ思っていた通りの結果を得る事が出来ました。

三つ希望が有ります。
 1 チェックしますか  いいえ  の時にも選択の質問が続きます。
   いいえの時には、VBAを終了する様に変更する事は可能でしょうか

 2 選択項目は約100有りますので、選択方法に何か良いアイデアはございませんか
  (今のままでも、かなり満足して降りますが)

 3 VBA実施後に、選択した行が表示されて終わる様にならないでしょうか

選択対象列を変更する場合は、2ケ所のColumns("A:D")を変更するだけで良いのでしょうか
E:Hに変更して実行して見ましたが問題は有りませんでした。
他に変更するケ所が御座いましたら教えて頂きたいのですが

宜しくお願い致します。

(つむつむ) 2016/06/15(水) 20:46


勘違いをしておりました

>>三つ希望が有ります。

  1 チェックしますか  いいえ  の時にも選択の質問が続きます。 
    いいえの時には、VBAを終了する様に変更する事は可能でしょうか 
 希望1は、撤回します。

  3 VBA実施後に、選択した行が表示されて終わる様にならないでしょうか
 希望3は、ウインドウ枠の固定で解決致しました。

  2 選択項目は約100有りますので、選択方法に何か良いアイデアはございませんか
    (今のままでも、かなり満足して降りますが)
 希望2は、P列に全項目を表示させO列に1を記入するとそのP列を選択する様な事は可能でしょうか
      良いアイデアが有れば教えて頂けませんでしょうか

宜しくお願い致します。

(つむつむ) 2016/06/15(水) 22:49


こんな感じにするとよいです。
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_userform03b.html

シートにボタンを作成して
ボタンクリックでユーザーフォーム起動するようにして
そのユーザーフォームにリストボックスがあって、
リストボックスは、品目が一覧表示されるようにして
リストボックスの項目はチェックボックスをクリックし選択するようにして
ユーザーフォームには、フィルター実行ボタンがあって
そのボタンをクリックするとリストボックスで選択した項目の行が表示される

(マナ) 2016/06/15(水) 23:45


Sub main()
    Dim dic1 As Object, c As Range
    Set dic1 = CreateObject("Scripting.Dictionary")
    Rows("1:" & Rows.Count).EntireRow.Hidden = False
    For Each c In ActiveSheet.UsedRange.Columns("A:D").Cells
        If Trim(c.Value) <> "" Then dic1(c.Value) = True
    Next c
    Range("P:P").ClearContents
    Range("P1").Resize(UBound(dic1.keys)) = Application.Transpose(dic1.keys)
    MsgBox ("O列に1を入力してmain2を実行してください")
End Sub

Sub main2()

    Dim dic2 As Object, c As Range
    Set dic2 = CreateObject("Scripting.Dictionary")
    For Each c In ActiveSheet.UsedRange.Columns("P").Cells
        If c.Offset(, -1).Value = 1 Then
        dic2(c.Value) = True
        End If
    Next c
    Rows("1:" & Rows.Count).EntireRow.Hidden = True
    For Each c In ActiveSheet.UsedRange.Columns("A:D").Cells
        If dic2(c.Value) Then Rows(c.Row).EntireRow.Hidden = False
    Next c
    Range("O:P").ClearContents
End Sub
(mm) 2016/06/16(木) 09:45

マナ様
ご連絡有難うございます。

自信は有りませんが、調べながら挑戦したいと思いますが今回はmm様のご提案でやろうと思います。

有難うございました。

mm様
ご連絡有難うございます。

ご提案頂きました Sub main()  Sub main2()を原案のまま実行で思う様な結果が出ました。
(最後の選択条件は表示されませんが、最終行に捨て選択条件を記入しておくことで対応しました)

実際の表は、F:Iに選択条件が有ります。
そこで二か所有るColumns("A:D")をColumns("F:I")に変更して実行して見ましたが「型が一致しません」と表示が出ます。

他に変更する箇所が有るのでしょうか

宜しくお願い致します。
(つむつむ) 2016/06/16(木) 19:36


mm様

ようやく気が付きました。

Sub main()
For Each c In ActiveSheet.UsedRange.Columns("F:I").Cells

Sub main2()
For Each c In ActiveSheet.UsedRange.Columns("A:I").Cells

に変更して思い通りの結果が得られました。

ほぼ初心者には、難しい事でしたが勉強になりました。

今後の仕事が楽になり、ミスがなくなると思います。

有難うございました。

(つむつむ) 2016/06/18(土) 06:04


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.