見出し画像

セルの値を特定の範囲に展開する【関数】【Googleスプレッドシート】【ARRAYFORMULA】

そんな機能いります?

いや、そういわれると。。。セルのコピーでも、初めから=B1を全範囲に入れとけばいいと言われたりもしますし。。。
でもまあ、それだと、一つが消えたりすることってあるじゃないですか。
ARRAYFORMULAの機能は体系立てて理解できてないです。
でも、メリットとしては、「一つのセルに入力するだけで展開できる」というところだと思います。
すごく必要ではないんですけど、ようやく希望通りのイメージできたので公開させていただいています。バグがありましたらご指摘くださいませ。

どんな時に必要なのか?経理の伝票インポートには使えると思います?

経理業務で、会計ソフトに伝票をインポートするとき、弥生会計・freee会計などでは、同じ数字や日付などを複数行に入力しないといけないケースがあります。

こんな時に、一つのセルの入力で、特定の範囲に展開したいなという用途の想定でした。
段階を追って解説していきます。

1.ARRAYFORMULA関数を使って特定のセルから、通し番号を表示する

3行目から、一定の範囲に通し番号を振る数式です。完成イメージは下の図で「B」列です。

A3:=ARRAYFORMULA(ROW(A3:A15))

まず、A3には、こちらの関数が入っています。
ROW()という関数は、そのセルが入力されたセルの行を返す関数です。
 A1 に「=ROW()」と入力すれば、「1」が
 A1 に「=ROW(B2)」と入力すれば、「2」が表示されます。
 単純に範囲指定しても、起点のセルの行が返されます。
A1 に「=ROW(B2:B10)」と入力すれば、「2」と表示されるということです。
これをARRAYFORMULAでくくると、図のように、A3を起点に3,4,5,6・・・と数字が続いていきます。「3行目から15行目まで、ROW()を展開する」という数式になります。しかし、それだと通し番号になりません。でもよく見ると、2多いだけじゃないか。2引いたら通し番号になるんじゃないの?という感じです。

B3:=ARRAYFORMULA(ROW(B3:B15)-2)

というわけで、2を引いてみました。希望通りの表示になりましたね。
B4を起点とするときは、-3、B5を起点とするときは、-4と調整値を入れれば、どこからの開始にも対応できます。
=ARRAYFORMULA(ROW(B3:B15)-row(B3)+1) という表現にすれば調整値の自動処理もできますね!

C3:=ARRAYFORMULA(ROW(C3:C15)-2&"月")

最後はおまけです。&で連結すれば、文字列追加にも対応できますよ、という例でした。

2.ARRAYFORMULA関数を使って同じ情報を一定の範囲に展開する

先ほどは通し番号を振ってみました。
通し番号なので、同じ数字はありません。
同じ数字にするのはどうしたらいいか。。。
あ、おなじ数字を引けばどうだろうか。
ということで、こちらです。

A3:=ARRAYFORMULA((ROW(A3:A15)-ROW(A3:A15)))

先ほどの通し番号にたいして、同じ数字を引き算させて展開させてみました。結果は、全範囲が「0」の表示になります。
同じ数字が展開できただけで、なんだかうれしいです。
では、それをテキストにするためには次のステップです。
とりあえず、テキストを追加してみましょう

B3:=ARRAYFORMULA((ROW(B3:B15)-ROW(B3:B15))&"あああ")

先ほどと同様、テキストを加えてみました。
お!なんかイメージに近くなりましたけど、0が邪魔ですよね。
0を除いてしまいましょう。
すごく単純に、「値がゼロだったら表示しない」+「展開したい文字列」で何とかなりそうです。

【完成】C3:=ARRAYFORMULA(if((ROW(C3:C15)-ROW(C3:C15))=0,"","")&"いいい")

イメージ通りになりました!

おまけです。ARRAYFORMULAは横への展開もできます。
ROWではなく、COLUMを使い、横展開にすればいいです。

=ARRAYFORMULA(if((COLUMN(B1:F1)-COLUMN(B1:F1))=0,"","")&"えええ")

3.他の列の情報に依存する方法
この展開、ほかの列の入力情報に依存する方法でしたら
=ARRAYFORMULA(if(G3:G<>"","ううう",""))
このような書き方があります。

こちらも活用用途はあるのですが、あえて、単独で展開できる計算式を考えてみました。

3.「名前付き関数」に応用が利きそう

関数の構成を見直しますと、
=ARRAYFORMULA(if((ROW(【範囲】)-ROW(【範囲】)=0,"","")&【展開したい文字列】)
と、実用化のためには、名前付き関数との相性もよさそうですね。早速作ってみます。

=TENKAI(M6:M10,"ああ") という関数で展開できたのを確認できました。
名前付き関数については、過去記事に詳細を書いております。よろしければご参考ください。

では今回のシートです。
https://docs.google.com/spreadsheets/d/17vmWXuTVnA9TcUEOKRiGQo-2sOzuUbS8KpkrxsMRpjA/edit#gid=0





どんな記事ならサポートしてみようと思えるか、ご要望ありましたら教えてくださいね。