『別シートのフィルタ結果を反映』(noa) おはようございます。よろしくお願いします。 ブック1に「データ」と「リスト」ふたつのシートがあります。 シート「データ」には、資料が横並びに入っており、 シート「リスト」には、シート「データ」の簡易版が縦並びに入っています。 簡易版のシート「リスト」でフィルターをかけた結果で、 シート「データ」もフィルタというか、不要列を非表示にしたいのですが、 どのような方法があるでしょうか? たとえば下記でしたら、 シート「リスト」のC列「タイプ」でフィルタをかけてAAの国、日本とタイ だけを表示させたら、シート「データ」でも日本列とタイ列以外を 非表示にしたいです。 【シート「データ」】    A  B  C  B  E  F ・・・・ 1見出し行列 2国名 日本 中国 韓国 タイ ベトナム 3コード 100  200 150  130  180 4タイプ AA  AB  A   AA  BA 5見出 ・・・・ 【シート「リスト」】   A  B  C 1見出 国名 タイプ  2 1 日本 AA 3 2 中国 AB 4 3 韓国 A 5 4 タイ AA 6 5 ベトナム BA < 使用 Excel:Excel2016、使用 OS:Windows10 > ---- Sub main() Dim c As Range Sheets("データ").Cells.SpecialCells(2).EntireColumn.Hidden = True For Each c In Sheets("リスト").Range("C:C").SpecialCells(2).SpecialCells(12) Sheets("データ").Columns(c.Row).EntireColumn.Hidden = False Next c Application.Goto Sheets("データ").Range("A1") End Sub (mm) 2020/06/24(水) 17:19 ---- 衝突しました。念のため。 こちらを参考にしてください。 「Excelで横方向にフィルターする」 https://www.excellence-blog.com/2018/01/30/excel%E3%81%A7%E6%A8%AA%E6%96%B9%E5%90%91%E3%81%AB%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF%E3%83%BC%E3%81%99%E3%82%8B/ (γ) 2020/06/24(水) 17:21 ---- mm様 γ様 ありがとうございます。 お礼が遅れて申し訳ありません。 mmさんのもので、間違いなく動くのですが、 内容が理解できていないため応用ができません。 specialcells(2).specialcells(12)あたりの意味を教えていただけませんか? (noa) 2020/06/29(月) 10:28 ---- 参考にどうぞ https://www.moug.net/tech/exvba/0050114.html (cai) 2020/06/29(月) 10:39 ---- cai様 ありがとうございます。 specialcells の意味がそもそも分かっていないのだと思うのですが、 ご提示いただいたようなページはいくつか見てみて、 それでも、mmさんが作ってくださった、  specialcells(2)←ここの数字は何を意味するのか specialcells(2).specialcells(12)←どうして二つ続いているのか、(12)ってなにを示すのか が、わからないのです。 (noa) 2020/06/29(月) 11:06 ---- specialcells(2) 定数が入力されたセル specialcells(12) 可視セル ですので、 specialcells(2).specialcells(12) 定数が入力された可視セル という意味(仕様)です。 (mm) 2020/06/29(月) 14:30 ---- mm様 え? xlCellTypeConstants と xlCellTypeVisible ってことですか? カッコの中の数字を入れ替えて試してみたりしてましたwww あらためて見てみると、caiさんが出してくださった参考ページにも 定数の横に「値」ってこの数字が書いてありますね。これのことですか・・・ (とは言っていますが、意味は分かっていません) ありがとうございます。 (noa) 2020/06/29(月) 15:11 ---- 重ねての質問、申し訳ありません。 mm様の書いてくださった形で希望通りのはずなのですが、実際のシートにあてはめてみると いろいろうまくいきません。 1つ目は「リスト」が別シートのデータ参照で作られていたので・・・ 本当は「リスト」はこのままで動くようにしたいですが、修正方法がわからないので、 とりあえず「リスト」全部を値貼り付けし直してこの問題はひとまず無視しました。 すると2つ目に、「リスト」でフィルターをかけ、「データ」でも同じものだけ表示するはずが、 「データ」側で「リスト」と関連性のなさそうなものが表示されてしまう、 という状態になりました。 例に使った簡易版ではうまくいったのですが。 実際のデータは ・質問に使った例よりはデータの量が多少多いです(最終セルがDZ80ぐらい・固定ではない) ・質問に使った例より見出し行列が多いです  「データ」はA1からD4まで見出し、「リスト」はA1からAHまで見出し 【シート 「データ」】  A B C D E   F  G ・・・DZ 1 空欄 2     空欄 3 国名  日本 中国 韓国  4 コード 100 200 150     5 タイプ AA AB A 6 気温 7 湿度 8 ・・・以下続く 【シート「リスト」】   A  B  C 1見出 国名 タイプ  2 1 日本 AA 3 2 中国 AB 4 3 韓国 A 5 4 タイ AA 6 5 ベトナム BA 「データ」の見出し行が多いので、表示非表示を開始する列をEからにしたいですが、 これもまだわからないので飛ばしました。 Sub main() Dim c As Range Sheets("データ").Cells.SpecialCells(2).EntireColumn.Hidden = True For Each c In Sheets("リスト").Range("C:C").SpecialCells(2).SpecialCells(12) Sheets("データ").Columns(c.Row).EntireColumn.Hidden = False Next c Application.Goto Sheets("データ").Range("A1") End Sub mmさんが作ってくださったのは、 「データ」シートの何か入っている行をすべて非表示にし、 「リスト」シートのC列の表示されているセルの値を、 「データ」と照らし合わせて一致するセルがある列を表示し、 それをC列で繰り返す。 という意味かなと思っていたのですが、合ってますでしょうか? (noa) 2020/06/30(火) 17:15 ---- あってます。 (mm) 2020/06/30(火) 17:57 ---- mm様 ありがとうございます。 「リスト」B列に入っている文字列(国名)で表示非表示をやりたいので、 Range("C:C") → Range("B:B") に変更しました。 表示非表示を開始したい「データ」のスタートがE3なので、 そのぶん右に+3(?)ずらしたいのですが、 Sheets("データ").Columns(c.Row).Entirecolumn.Hidden=False のところを変える?・・・としたらどう変えればよいですか? columns(c.Row) の意味がよく分かっていません。 (noa) 2020/07/01(水) 11:00 ---- 一度に質問をまとめられず申し訳ないです。 「リスト」をフィルタしたときに「データ」も表示非表示する、 この同じ作業をしたいという前提で、 「リスト」の一部セルが別のデータを参照していて、関数というか文字列になっていない場合、 何か解決方法はあるでしょうか。 (noa) 2020/07/01(水) 17:12 ---- Sub main() Dim c As Range, r As Range, rr As Range Set r = Range(Sheets("データ").Cells(3, 5), Sheets("データ").Cells(3, Columns.Count).End(xlToLeft)) r.EntireColumn.Hidden = True For Each c In Intersect(Sheets("リスト").UsedRange, Sheets("リスト").Range("B:B")).SpecialCells(12) Set rr = r.Find(c.Value, , , xlWhole) If Not rr Is Nothing Then rr.EntireColumn.Hidden = False Next c End Sub (mm) 2020/07/01(水) 18:07 ---- mm様 ありがとうございます!動きました! 入れ子な感じの条件も、ここまですっきりできるんですね。感動です。 分からないところがあるのですが、やりたいことは解決しましたので、 もしご面倒でなければ、お手すきのときに教えてください。 自分で作れるかどうかは別として、  "データ"の、3行E列セルから3行最終列セルまでの範囲で、値が入っている列を非表示し、  "リスト"の、B:B列で何か入っている、可視セルを参照し、  "データ"の上記と同じ範囲にを探して、完全一致するものがナシでなければ、非表示列を表示にする  対象の"リスト"のデータは値とする ということかなと読んだのですが(あってますでしょうか)、 下記の意味、特にカッコの中の,,,あたりがわかりません。 これはどういう意味なのでしょうか。  Set rr = r.Find(c.Value, , , xlwhole) (noa) 2020/07/02(木) 15:25