関数の結果に同一値の列を追加する


別のコンテンツで「関数の結果に連番の列を追加する」やり方を解説しました。

関数の結果に連番の列を追加する

これ、関数セミナーの受講者さんから質問されたのですが、実は同時にもうひとつ質問されました。たとえば、FILTER関数の結果に対して、次のようにしたいと。

上図で、FILTER関数はセルF2に入っています。その結果に、もう1列追加して(ここではE列の「チェック」)、そこに同じ"○"という値を表示したいと。いや、別に"○"でなくてもいいのですが、"済み"でも"レ"でも何ならすべて今日の日付でも。要するに同じ値を表示したいらしいです。正直言って「はぁ?そんなことして何になるの?」って思いましたけど、上司の命令や会社のルールならしかたありません。おそらく、こうして作ったFILTER関数の結果を、また別の何かに使うのでしょうね。いずれにしても、連番だったらSEQUENCE関数で作成できます。しかし、こっちはちょっと面倒です。さて、関数職人の皆さんだったら、どうしますか?何なら、下記の解説を読む前にチャレンジしてみてください。けっこう楽しいですよ。ちなみに私は、質問の内容を聞きながら、ひとつの方法を思いついたので、今回はそれをご紹介します。

複数の表を横に並べる

今回も、基本的な方針は「関数の結果に連番の列を追加する」と同じです。HSTACK関数を使って、2つの表を横方向に結合します。HSTACK関数で表を結合する考え方は「関数の結果に連番の列を追加する」で詳しく解説していますので、そちらをご覧ください。

さて、問題は①です。ここで考えるべきことは2つあります。

  1. "○"という値はシート内に存在していない
  2. "○"の個数はFILTER関数の結果の行数とする

この①部分を、いかに作るのかが最大のポイントです。ああ、ちなみに、ご自身でチャレンジする方は、"○"という値にこだわないでくださいね。"○"ではなく、今日の日付や、何らかの計算結果や、何ならアクティブシートの名前などなど、何になるかは分からないものとします。その方が楽しいでしょw

ゴールから考える

当たり前ですが、こういうときはゴールから考えます。

数式を使って、上図のような結果になればいいんです。最終的に作成する行数は、FILTER関数の結果に合わせますが、まずは「4行」と決め打ちして考えましょう。下方向にスピる関数と言えばUNIQUE関数ですけど、ちょっと今回の用途には向きません。下方向が無理だったら、右方向はどうでしょう。

これを作れれば、後はTOCOL関数で縦横を変換できます。にしても、このように横方向へスピる関数って見覚えがあります。そう!TEXTSPLIT関数です。もし「"○-○-○-○"」みたいな文字列を作成できたら、これをTEXTSPLIT関数で分割できます。

区切り文字は何でもいいのですが、とりあえずここでは「ハイフン(-)」としました。特に意味はありません。あ、でも、待ってください、確かTEXTSPLIT関数って"行(下)方向"に分割することも可能だったはず。

これなら、TOCOL関数で縦横変換をする必要もありませんね。う~ん、いい流れです。ということは「"○-○-○-○"」みたいな文字列を作れれば事件解決です。もちろん、"○"の数はFILTER関数の行数です。

ここまでくれば勝ったようなものです。ある文字を、指定した回数だけ繰り返すにはREPT関数を使います。REPT関数なんて、実務では使う機会もないです。せいぜい"簡易グラフ"を作る程度でしょう。

REPT関数の解説

実務で使う機会が少ないので、知名度の低い関数ですが、90年代のExcelではよく使われていました。

最後に「4」と決め打ったところを「ROWS(FILTER関数)」にすれば完了です。

最終形態は、こんな感じです。

「"○-"」部分を工夫すれば、後はどうとでもなります。