いきなり答える備忘録

G Suite・Microsoft 365・LibreOfficeなどに関するメモと日々の実験

(Gスプレッドシート)INDEX+ARRAYFORMULA関数の代替手段

 GoogleスプレッドシートでARRAYFORMULA関数を使ってINDEX関数の第2引数に配列(行列)を与えても、配列(行列)は返ってきません。そこで代わりとなる手段の例を紹介します。

  • VLOOKUP関数とARRAYFORMULA関数を使い、インデックスの配列を与えて戻り値の配列を得ることができます。

手順

f:id:accs2014:20200705181856p:plain:right:w500

 B3:B7に5つの動物の名前が並んでいます。
 一方でD3:G6の範囲に1~5の16個の数字が並んでます。関数を使ってこの16個の数字を動物の名前と対応付け、1なら「うさぎ」、2なら「ねこ」…5なら「ぶた」、と置き換えた結果を得るものとします。

 ExcelならINDEX関数の第2引数に配列が与えられるので「=INDEX(B3:B7,D3:G6)」で一発なのですがGoogleスプレッドシートで「=ARRAYFORMULA(INDEX(B3:B7,D3:G6))」とやっても効きません。そこで……
 

f:id:accs2014:20200705181900p:plain:right:w500

 次のように記して成功です。 

=ARRAYFORMULA(VLOOKUP(D3:G6,{SEQUENCE(5),B3:B7},2,FALSE))

 VLOOKUP関数を使い、第2引数(範囲)を「{SEQUENCE(5),B3:B7}」とします。つまり「1列目は1から5の数字で2列目は動物の名前」となる2列の表を生成します。そして第1引数(検索キー)をD3:G6とし、表の2列目を抽出することで動物の名前を取り出しています。VLOOKUP関数の第1引数になら配列を与えられる(配列が返ってくる)、というのがポイントです。
 なお「SEQUENCE(5)」のところは本来「SEQUENCE(ROWS(B3:B7))」とやるところですが省略して即値にしました。