2
1

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 1 year has passed since last update.

【GAS】Google スプレッドシートで sprintf 関数を使う方法

Posted at

Google スプレッドシートで JSON, HTML, XML 等を組み立てたいときに、&CONCATENATE 関数を用いた文字列の連結では苦しいことがあるかと思います:

組み立てたい JSON
{"id":1} // 値は A 列にあるセルを参照したい!
& を用いた数式
="{"&CHAR(34)&"id"&CHAR(34)&":"&A2&"}"
CONCATENATE 関数を用いた数式
=CONCATENATE("{",CHAR(34),"id",CHAR(34),":",A2,"}")

C 言語 や Go 言語などには sprintf という、%d%s といったフォーマット指定子を用いて文字列を組み立てる関数が備わって、簡単に文字列を組み立てることができます:

Go 言語の例
fmt.Sprintf(`{"id":%d}`, 1)

これと同様の機能を Google スプレッドシートで実現する方法を紹介します。

sprintf 関数を準備

Google スプレッドシートのメニューにある「拡張機能」→「Apps Script」を選択します:
image.png

コードエディタ上に以下のコードを貼り付けて保存してください:

function sprintf(template, ...args) {
  return Utilities.formatString(template, ...args);
}

上記の sprintf 関数は、Utilities.formatString という Apps Script のユーティリティ関数をスプレッドシート上で利用できるようにしています。
https://developers.google.com/apps-script/reference/utilities/utilities?hl=ja#formatString(String,Object...)

使い方

例として、E2 セルにフォーマット文字列を入れます:

E2 セルの内容
{"id":%d}

A 列に id の数値が入っている場合、以下のような数式を入力します:

=SPRINTF($E$2,A2)

$E$2 の 2 つの $ は絶対参照のために付けており、数式を列方向・行方向どちらにコピーしてもセル参照が変化しません。
(数式入力中に E2 セルを選択している状態で F4 キーを 1 回押すと E2$E$2 に置き換わり、便利です1)

これで、冒頭に記載した「組み立てたい JSON」が表示されます:

組み立てたい JSON
{"id":1}

注意点

Apps Script で定義された関数を利用しているため、&CONCATENATE 関数を使う場合に比べて処理に時間がかかることがあります:

spreadsheet_sprintf.gif

Loading... が表示される時間が許容できない場合や、簡単な文字列の結合には &CONCATENATE 関数を用いるのがおすすめです。

GitHub Copilot Chat に聞いてみた

GitHub Copilot Chat に対して、以下のような質問をしてみました:

Google スプレッドシートで Go 言語の fmt.Sprintf 関数のような関数を利用する方法

spreadsheet_sprintf_copilot.png

:100:

  1. Microsoft Excel にも同様の機能があります。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?