6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【GAS】ARRAYFORMULA関数を使って九九計算表、可変長型計算表を作ってみよう

Last updated at Posted at 2017-06-29

 エクセルで九九計算表を作る場合、縦軸と横軸に1から9を用意し、中に式を入力し、それを横方向にコピー、さらに下方向にコピーといった方法で作るのが一般的かと思います。

 参考サイト
 http://www.acroquest.co.jp/webworkshop/excel/excel_1_01.html

 そして今回、グーグルスプレッドシートでこれをよりスマートに実現する方法を紹介しようと思います。

スクリーンショット 2017-06-29 21.35.00.png

 縦横に1から9を用意するところまではエクセルと同じですが、セルB2に、


=ARRAYFORMULA(A2:A10*ARRAYFORMULA(B1:J1))

 とするだけで一気に九九が完了します。

 このように、ARRAYFORMULA関数は入れ子状態にすることで通常のプログラミングでいうところのForのネストと似たようなことをしでかしてくれるわけです。

 で、当然これだけでは不満なわけで、10,11,12・・・と増えたときに自動的に反応してくれないかな?ってなりますよね。

 そこで次に可変長のARRAYFORMULAを見てみましょう。

スクリーンショット 2017-06-29 21.41.46.png

 これも一撃です。セルB2に


=ARRAYFORMULA(INDIRECT("A2:A"&COUNTA(A:A)+1)*ARRAYFORMULA(INDIRECT("B1:"&CHAR(COUNTA(1:1)+65)&1)))

 とするだけです。見やすく改行すると、


=ARRAYFORMULA(
 INDIRECT("A2:A"&COUNTA(A:A)+1)*
 ARRAYFORMULA(
  INDIRECT("B1:"&CHAR(COUNTA(1:1)+65)&1)
 )
)

 このような感じになるでしょうか。すなわち、COUNTA関数を混ぜることで行列数の変動に対応させています(だから空白セルとかは勘弁)。同時に、INDIRECT関数で包むことでA2:A10,A2:A11,・・・といった文字列を動的に生成しています。横軸はアルファベットに変換するためにCHAR関数も使っています。なお、CHAR関数だとZまでしか対応できず、AA以降はまた別の方法が必要になりますがここでは割愛します。

6
8
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?