こんにちは、おかちゃんせんせいです!
先日Googleスプレッドシートでデータ表を作成しているときに、メンテナンス性の観点からArrayformula関数を使うことに決めました。
Arrayformula関数は以前ブログでご紹介した関数です。
しかし、いざArrayformula関数を使おうと思ったとき、Arrayformula関数の欠点にぶち当たりました。
それが、
フィルターを設定して並び替えをすると関数が崩れてしまう問題
です。
目次
Arrayformula関数は便利だがフィルターによる並び替えに弱い
データについては、A列・B列は手入力する箇所で、C列・D列はF〜H列にある別表からVLOOKUP関数でデータ参照する想定です。
C列・D列にただVLOOKUP関数を入れればいいだけですが、毎回行が増えるごとに数式を下の行に適用する作業は地味に面倒です。
そこでArrayformula関数の出番!
2行目に関数を入れておくだけで、適応したい行まで関数を自動反映させることができます。
=Arrayformula(if(A2:A<>””,Vlookup(B2:B,$F$1:$H$4,2,false),””))
しかし、フィルターを設定して、例えばA列を降順で並び替えると、下図のように数式が崩れてしまい意図したように並び替えができません。
なぜそうなってしまうかというと、並び替え前にC2セルに入れた関数がC5行目に移動してしまい、2〜4行目までが関数が反映されなくなってしまったからです。
つまり、上記のような事態を回避するようになんらか工夫してあげる必要があるのです。
ネット検索してみて結果・・・
問題解決するためにネット検索してみると、一番上にヒットした記事はこちら。
ただ、下記記事では「ARRAYFORMULA関数が入っているとフィルタはかけられない」という回答で終わっています。
関連記事の中に同じような記事があったので、こちらでは「式をアレンジして1行目のタイトル行に式を入れれば大丈夫です」という回答に対して、質問者が「できましたー」とコメントしていますが……
パッと数式を見た限り、データ全体を見ていないのもありわかりにくい!
自分がやりたいことに置き換えにくい。。。
と、いうことで、あれこれ手を動かしていたら解決方法を2つ見つけましたので、情報共有しますね。
解決方法1.1行目のタイトル行に数式を入れる
1つ目の解決方法は、先述した通りの方法で1行目のタイトル行に数式を入れる方法です。
ただこの時に数式を少し工夫する必要があります。
数式をただ入れるだけでなく、1行目は項目名になるようにif(s)関数で条件分岐させて、2行目以降から並び替えをしたいデータが表示されるように工夫します。
=Arrayformula(ifs(A1:A=”実行日”,”実行名”,A1:A<>””,Vlookup(B1:B,$F$1:$H$4,2,false),true,””))
解決方法2.2行目に数式を入れて行を非表示にする
2つ目の方法は、ある意味Googleスプレッドシートの特性を活かした方法ですw
まずは、ヘッダー項目(1行目)の下に空白行を挿入し、空白行に関数を入れます。
ただ、この状態で並び替えをしてしまうと、2行目の空白部分が認識されてしまい、また関数が崩れてしまう可能性があります。
=Arrayformula(if(A2:A<>””,Vlookup(B2:B,$F$1:$H$5,2,false),””))
なので、関数が入れ終わったら、空白行(2行目)を非表示にします。
すると、空白行が認識されずに、並び替えができるようになります。
解決方法1つ目は数式が少し複雑になることと、2つ目は空白行を作成して非表示にするという手間があります。
けれど、どちらかの方法を試すことで、Arrayformula関数を使いつつフィルターによる並び替えが可能になります。
今回の記事が同じ悩みを抱いた方にとって役立てば幸いです。
最後まで読んでいただき、ありがとうございました!