[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『複数の列のフィルターを集約したいのですが』(つむつむ)
日頃から拝見させて頂いて降ります。
有難うございます。
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
フィルターでは、無理でしょうか
出来る事なら下記の様に、選択したバナナとりんごのデーターが有る行を表示したいのですが
フィルター以外でも出来ないでしょうか
A B C D 1 選択リスト ▼ 3 りんご さば 4 大根 バナナ はまち
▼ □いちご □いも □かれい □きのこ □さば □たい □大根 □なすび ☑バナナ □はまち □メロン ☑りんご
宜しくお願い致します。
(つむつむ) 2016/06/14(火) 21:06
先程も申し上げたように、上記例だとりんごにチェックが入って、サバにチェックが入っていないと、 表示データに矛盾が生じます。 バナナにチェックが入って、大根とはまちにチェックが無いのも同じです。 フィルタの機能としては、チェックの無いものは表示してはいけませんよね。
そう言う矛盾を許せる構造の方がおかしいと思いませんか?
(sy) 2016/06/14(火) 21:18
そうですよね
やっぱり無理ですよね
諦めます。
有難うございました。
(つむつむ) 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
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
今回やりたい事は、フィルター機能を使い検索した結果で行を表示させることでしたので
ご提案を頂きました関数では残念ながら、当初の目的を達成する事は出来ませんでした。
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
シートにボタンを作成して
ボタンクリックでユーザーフォーム起動するようにして
そのユーザーフォームにリストボックスがあって、
リストボックスは、品目が一覧表示されるようにして
リストボックスの項目はチェックボックスをクリックし選択するようにして
ユーザーフォームには、フィルター実行ボタンがあって
そのボタンをクリックするとリストボックスで選択した項目の行が表示される
(マナ) 2016/06/15(水) 23:45
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
ようやく気が付きました。
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.