Excelで横方向にフィルターする

Excelには便利なオートフィルター機能がついてるが、これって縦方向しかイメージがない。

今回、横方向でフィルターしたいことがあったので、調べてみた。

 

とりあえず、知らないだけで実はそのような機能があるのかと思い、「エクセル 横 フィルター」でググる。

 

...

 

......

 

 

なかった。

 

 

エクセルには、横方向にフィルターする機能はない。

 

 

ではどうするのか。

サンプルを使ってみていく。

 

サンプルは、先生が担当できる科目を一覧にしたもの。

このように横に長く伸びている場合、どの科目に対して、どの先生が担当できるのか、横スクロールしていかないとわからない。

 

 

★このサンプルから、科目5を担当できる先生が誰か、フィルターして探してみる★

 


案①

  

行列を入れ替えてフィルターする。

 

エクセルには行列を入れ替える機能がある。(表をコピー → 形式を選択して貼り付け → 行列を入れ替える)

この機能と縦方向のフィルター機能を使って実現する。

行列を入れ替えるとこんな感じ。

科目5でフィルター。

担当先生が判明した。

だが、この方法は表をコピーして別の表を作成する手間がある。

一回限りならまだしも、何回も探すとなると、面倒くさすぎる。


案②

 

ExcelVBAを使う。

 

VBAでマクロを作る。

 

実現イメージは、

1.科目一覧でフィルターした状態の行番号を保存

2.その行番号の担当先生列を、右に一つずつ見ていき、

  ○が一つもない場合は、非表示にする

  ○が一つでもある場合は、表示にする

 

科目5でフィルターして、

横フィルターボタンをクリック。

担当先生が判明した。

だが、この方法では、速度が遅くなる可能性がある。(今回のサンプルでは早いが)

 

実現イメージの、以下の部分。

>2.その行番号の担当先生列を、右に一つずつ見ていき、

>  ○が一つもない場合は、非表示にする

>  ○が一つでもある場合は、表示にする

 

このときに、一つずつ設定していくと、速度が遅くなることがあった。

非表示の設定を行うときは、一括で設定したほうがよさそうである。

ダウンロード
案②.xlsm
xlsm ファイル 20.9 KB

 案③

 

ExcelVBA + SUBTOTAL関数を使う。

 

SUBTOTAL関数を埋め込み、それを用いてVBAでマクロを作る。

 

実現イメージは、

1.各担当先生列の○の個数を関数で取得する

2.その個数が

  0のセルをすべて取得する

  0以外のセルをすべて取得する

3.  取得した0セルを一括で非表示にする

  取得した0以外セルを一括で表示にする

               

図は、案②と一緒なので、違うところだけ。 

先頭行にSUBTOTAL関数を使用する。(別に先頭じゃなくてもいい)

案②との違いは、

・一括で設定するので速度が速いはず

・表の行を追加する場合は、VBAの修正が不要

 

たが、この方法では、関数が漏れたり式が壊れると誤動作する恐れがある。

(最終的にVBAで関数を埋め込めば、式が崩れる心配もなく、手間もなくなり、一石二鳥)

 

また、終端列に値が設定されていない場合、

一度横フィルターボタンを押してフィルターされた状態から、解除のボタンを押すと、フィルターされた位置までしか解除されない!

これを回避するためには、終端列の隣に、何か値を設定しておく必要がある。

ここら辺は、もうちょっと工夫したらよいのかもしれない。

ダウンロード
案③.xlsm
xlsm ファイル 21.5 KB

こちらの記事も参考にしてください。