第33話 配列数式

「ARRAYFORMULAってのはな配列数式を扱うための関数だ。たとえばこういう書き方をする」


 サイトウはおもむろにおれのギブスにマジックで数式を書きはじめた。やめてくれ中学校の部活の同級生じゃないんだ。そもそも読めねえよ


「あの、サイトウさん」


「いま書いてるからちょっと待て、動くなよ」


「いや、そこに書かれても読めないのですが…」




 サイトウはしばらく考え込んでいた。


「すまん、ちょっと疲れていたようだ。イノウエ、代わりに教えてやれ」


「はい、わかりました。例を書いていったほうがいいですね」


 そういってイノウエは病室のタイルの壁をシートに見立て、行列の番号を書いて説明しはじめた。


 行\列| A | B |

 1 | 1 | |

 2 | 2 | |

 3 | 3 | |

 4 | 4 | |

 5 | 5 | |


「こういうテーブルがあるとして、B1にこういう数式を書きます」


=ARRAYFORMULA(A1:A5+1)


「結果はこう」


 行\列| A | B |

 1 | 1 | 2 |

 2 | 2 | 3 |

 3 | 3 | 4 |

 4 | 4 | 5 |

 5 | 5 | 6 |


「え?B5まで結果が展開されるんですか?」


「そう、SPLITと同じような動きですね」


 なるほど。そんなことができるのか。数式の実行を結果を複数セルに反映させるのはすごいことだ。


「列同士の組み合わせも、配列の数を揃えてやればできます。例えばC1にこういうふうに書くと」


=ARRAYFORMULA(A1:A5*B1:B5)


 行\列| A | B | C |

 1 | 1 | 2 | 2 |

 2 | 2 | 3 | 6 |

 3 | 3 | 4 | 12 |

 4 | 4 | 5 | 20 |

 5 | 5 | 6 | 30 |


「式内で関数を使うこともできます。例えばべき乗関数のPOWをD1にこう書くと」


=ARRAYFORMULA(POW(A1:A5,B1:B5))


 行\列| A | B | C | D |

 1 | 1 | 2 | 2 | 1 |

 2 | 2 | 3 | 6 | 8 |

 3 | 3 | 4 | 12 | 81 |

 4 | 4 | 5 | 20 | 1024? |

 5 | 5 | 6 | 30 | ??? |


 イノウエは例に出す関数を間違えたらしい。4の5乗を30秒ぐらい考えて自信なさげに書いたが、5の6乗はさすがにあきらめたようだ。


「と、まあこんな感じですね!わかりましたか?」


「はい、基本的な雰囲気はわかりました。LEFT、RIGHTとか、REGEX関数も使えるんですか?」


「はい、文字列関数も使えますよ」


 イノウエはまた別の表を書き始める。


 行\列| A | B |

 1 | INOUE | |

 2 | SAITOU | |

 3 | TAKAHASHI | |


「こういう感じで文字列があって、B1に関数を書くと」


=ARRAYFROMULA(LOWER(A1:A3)


 行\列| A | B |

 1 | INOUE | inoue |

 2 | SAITOU | saitou |

 3 | TAKAHASHI | takahashi |


「という感じですね」


 イノウエは満足げに説明を終えた。


「便利ですね。VLOOKUPやSUMIFSとか、なんでも使えそうですね」


「それがそうでもないんです。VLOOKUPは使えるんですが、SUMIFSは使えません。関数の構文に元々範囲が入ってるとややこしいんですよ。例えばただのSUMでも」


 行\列| A | B |

 1 | 1 | 2 |

 2 | 2 | 3 |

 3 | 3 | 4 |

 4 | 4 | 5 |

 5 | 5 | 6 |


「この表で、A、B列をそれぞれの行で足し算するSUMをこう書いたとするじゃないですか」


=ARRAYFORMULA(SUM(A1:A5,B1:B5))


「ユーザーさんとしてはこういう結果を期待していると思うのですが」


 行\列| A | B | C |

 1 | 1 | 2 | 3 |

 2 | 2 | 3 | 5 |

 3 | 3 | 4 | 7 |

 4 | 4 | 5 | 9 |

 5 | 5 | 6 | 11 |


「実際にはC1にA1からB5までをぜんぶ足した、えーっと…35がはいるだけでC2からC5にはなにも起きないんです」


「ん?なんでですか?」


「中のSUM(A1:A5,B1:B5)だけで、A1:A5、B1:B5のすべての数字を足す、という意味になっちゃいますよね。元々のSUMの対象の範囲なのか、ARRAYFORMULAでそれぞれを処理したい範囲なのか解釈できないんです。エラーが出ることはないのですが、意図したようにはいかないですねちなみにSUMIFSはできそうでできなくて、SUMIFはなぜか使えます。他にもうまく動かない関数があるので、まだまだ発展途上って感じの関数ですね」


 なるほど、なかなか難しいがこれから出会うことになるだろう。聞けてよかった。


 ちなみに壁はホワイトボードにはなっておらず文字は消えなかった。そのため入院している1週間、おれはこの表や数式が書かれた壁のタイルを眺めて過ごすことになった 。




 ※今回の関数

 ARRAYFORMULA https://support.google.com/docs/answer/3093275

 POW https://support.google.com/docs/answer/3093603

 LOWER https://support.google.com/docs/answer/3094083

  • Xで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る