![見出し画像](https://assets.st-note.com/production/uploads/images/88537753/rectangle_large_type_2_a3ea774abef22cb7e2f3906ad1435ba2.png?width=800)
名前付き関数がキタ━━(゚∀゚)━━!!という話
スプレッドシートで複雑なマクロを書いている方もいらっしゃるかと思いますが、それを関数化できる機能が実装されました。
この記事がTLで流れてきたので会社のtimesチャンネルに流したら速攻ほしいリアクションが帰ってくる弊社…好き…。
![](https://assets.st-note.com/img/1665050047749-Fm5yfKpko0.png)
具体的にどうすごいのかを紹介していきたいと思います。
まずはサンプルマクロのご紹介
例えばこういうマクロがあるとします。
=ARRAYFORMULA( IFERROR( VLOOKUP($A2:$A22,'一覧'!$A$1:$L$912,8,false)))
内容を簡単に説明すると、
・別シートの情報('一覧'!$A$1:$L$912)を
・vlookupで検索し
・エラー処理(iferror())を含ませた
処理をarrayformula関数で列全体に適用させてます。
行ごとのマクロ実装はarrayformula関数で1セルにまとめることは出来るものの、列ごとに同じ検索領域から様々なデータを持ってくる場合、何度の似たようなマクロを書く必要があるため、参照元のデータが変わるたびにメンテナンスが必要でした。
これを名前付き関数にしてみましょう。
名前付き関数の作成方法
日野市における新型コロナウイルス患者数のデータを元に説明します。
![](https://assets.st-note.com/img/1665203121591-CUHnmuMvA7.png?width=800)
このマスターデータからC列、F列、H列を別シートに参照させたいとします。
愚直にマクロを組むとこんな感じ。
![](https://assets.st-note.com/img/1665203620902-Qqp08MhTbs.png?width=800)
こうなるとちょっと壊れたら全部確認しないといけないので非常にメンテナンスコストが高いですね。
なのでarrayformula関数で列ごとにまとめます。
![](https://assets.st-note.com/img/1665203958049-Urii0k6mgZ.png?width=800)
これにより、範囲内であれば日付を入力するだけで必要な情報を引っ張ってきますし、2行目を非表示にしておけば他の人にいじられてマクロが崩れることもかなり抑えられます。
ですが、よく見てみるとこの3つのマクロ、違いはここだけです。
![](https://assets.st-note.com/img/1665204132873-DGxJGSJflo.png?width=800)
なので、名前付き関数を作ることで更にメンテナンスする箇所を圧縮したいと思います。
![](https://assets.st-note.com/img/1665204359113-l2tGJqc2wq.png)
関数名はセルに入力する時に呼び出す関数名になるのでわかりやすくも汎用性が高い感じにするといいですね。
あんまり汎用性に重きを置くとパっと見で作成した関数とわからなくなるかもしれないので注意です。
と言いつつ面倒なのでGET_DATAという関数にしてしまう。あるある。
![](https://assets.st-note.com/img/1665204394071-wYWgg5wCWJ.png?width=800)
![](https://assets.st-note.com/img/1665204460714-YzpHN8oviV.png?width=800)
これにより、マクロ自体をGET_DATA関数として使用できるためメンテナンスも1箇所を修正するだけで済みます。
引数に参照したい列数を入力することでお目当てのデータを取得することができます。
セル入力欄もスッキリしてわかりやすくなりましたね。
マクロのメンテナンス向上におすすめ
様々なマクロを駆使している会社ではぜひ導入して処理の可視化とメンテナンスコストの軽減を目指してみてはいかがでしょうか。
この記事が気に入ったらサポートをしてみませんか?