1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【小ネタ】Google Sheetsにcoalesceを導入する

Last updated at Posted at 2023-11-30

はじめに

みなさん、こんにちはM&Aクラウドの尾村です。業務で、Google Sheetsを使っていた時、SQLのcoalesce関数のように動く関数を使いたくなりました。しかし、Google検索しても全然、わかりやすい関数としては出てきません。。。そこで、chatGPTさんに問い合わせたところ、ifs関数を使うのが最も簡単そうでした。入力がせいぜい3つだったため、業務上はifs関数を利用して切り抜けました。2つの場合、3つの場合があったので、それぞれの名前付き関数を作成しました。ふと、もっと長さが長くなったら、可変長の入力を受け付ける関数が欲しくなるだろうと思ったので、今回は実際にchatGPTに聞いて、GASで作ってみました。Google Sheetsのような表計算ソフトでそのようなことするなというツッコミがあるかもしれませんが、小ネタとして投稿します。

ifs関数の利用

まずは、関数の組み合わせだけでできるので、長さが固定されている場合、これが一番便利です。
例えば、N=3のような場合は以下で書けます。簡単ですね。コピーすれば、4つでも5つでも可能ではあります。ただ、必要なNごとに、関数をN個作るのはやりたくないですよね。

=IFS(
    NOT(ISBLANK(引数1)), 引数1,
    NOT(ISBLANK(引数2)), 引数2,
    NOT(ISBLANK(引数3)), 引数3,
    TRUE, "")

GASを利用

Google Sheetsを開き、「拡張機能」→「App Scripts」で、エディターを開き、下記の関数を貼り付けた上で、保存しましょう。これだけです。利用可能です。これだけで、可変の引数でも、一番最初の非null値を返してくれます。少し、難点を上げるとするとどうしてもGASを呼び出すための時間がかかることでしょうか。体感1秒ぐらいかかっているように感じました。また、複数人で利用する際は全員が同じ権限がないといけないようです。

function myCoalesce() {
  // 引数のリストを取得
  var args = Array.prototype.slice.call(arguments);

  // 引数を順番にチェック
  for (var i = 0; i < args.length; i++) {
    // 現在の引数がnullまたは空ではない場合、その値を返す
    if (args[i] !== null && args[i] !== '') {
      return args[i];
    }
  }

  // すべての引数がnullまたは空の場合、nullを返す
  return null;
}

image.png

最後に

今回は小ネタとして、GASの機能を使って、SQLのcoalesce関数を再現しました。また、初めてGASでシート側から呼び出せる関数を作成したのですが、思いの外、簡単に呼び出せてびっくりしました。何より、この回答を瞬時にしたchatGPTに一番、驚きました。

1
0
0

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?