Excelで実現するバリアブル原稿作成

セミナーイベント関連のお知らせメールは、ほぼ同じ文言で次の情報のみが変わります。

  • イベント名
  • 告知ページのURL
  • 開催日時

これまで慎重に差し替えてきたのですが、「面倒なことは時間がかかるだけでなく、ミスが生じやすい」ため、システム化するべく行った試行錯誤をまとめてみます。

この記事内の目次

セルの参照

セルの参照は非常にシンプルです。次のように連結演算子「&」でつなぐことで合成します。

="文字列"&参照セル&文字列"&参照セル&文字列"

実際には、次のようになります。

計算式で完結せずに、合成する文字列を視覚化してCONCAT関数で束ねる方がスマートかも(後で修正しやすい)。

日付

自分が使っているDoorkeeperでは「2022-01-07(金)21:00 - 23:00」のように記載されています。

これを入力し直すのはミスのものですので、ペーストしたセルから必要な情報を抜き出します。

MID関数を利用し、C1の6文字目から2文字を抜き出します。

=MID(B1,6,2)

月の0を削除

VALUE関数で数値にすると0が消えます。

=VALUE(B2)

TEXT関数を利用してもよいのですが、数値として扱うにはVALUE関数がシンプルです。

=TEXT(B2,0)

月日

連結演算子「&」を使って合成します。

=B3&"月"&B5&"日"

年月日

年を参照しておけば、DATE関数で日付に組み立てられます。

=DATE(B7,B9,B11)

最初にB1から日付の情報に変換してしまう方がスマートかも。

=DATE(LEFT(B1, 4),MID(B1,6,2),MID(B1,9,2))

本日の日付

本日の日付にはTODAY関数を使います。

=TODAY()

「2022年1月10日」のように表記したいとき、TODAY関数で算出した日付を参照して次のように設定したいのですが、エラーになります。

=TEXT(B15,"yyyy"年"m"月"d"日")

そこで、煩雑に見えますが、次のように記述します。

=TEXT(B15,"yyyy"&"年"&"m"&"月"&"d"&"日")&"発行"

複数行を束ねる

結論からいうとTEXTJOIN関数を用いるのがスマートです。

改行なし

B17からB21までのセルを束ねるのに、CONCAT関数を使うと改行は消えてしまいます。

=CONCAT(B17:C21)

改行を入れる(1)

改行は「=CHAR(10)」で入れます。

まず、右隣の列に「=CHAR(10)」を入れます。

CONCAT関数の引数を「B17:C21」のように設定すると、B17、B18、C17、C18…のように参照するため、見た目のように改行が入ります。

=CONCAT(B17:C21)

改行を入れる(2)

「改行を入れる(1)」の方法だと行が増えるのに従って右隣の列に「=CHAR(10)」を入れる手間が必要ですし、そもそも最終行には「=CHAR(10)」が不要です。

TEXTJOIN関数を使うとスマートに複数セルを束ねられます。この際、空行を空行として扱うために2番目の引数はFALSEに設定します。

=TEXTJOIN(CHAR(10), FALSE,B17:B21)

Excelから別アプリへのペースト

改行があるセルをExcelから別アプリにペーストすると""がついてしますが、手作業で消すのは面倒です。。

処理するタイミングは3つあります。

  • ほかのアプリでペースト時
  • Excelから別アプリに移ったとき
  • Excelでコピー時

ペースト時に処理

Keyboard Maestroでペースト時に次のように処理できます。スクリーンショットでのhot keyは「⌘ + option + shift + control + V」になっていますが、アプリによってキーボードショートカット(hot kye)のダブりが心配です。

  • ^"(行頭の") → 空白
  • "$(行末の") → 空白
  • "" → "

なお、「" → 空白」だけだと、ソースコードの"もすべて消えてしまいます。

Excelから別アプリに移るタイミングで処理

「Application "Microsoft Excel" deactivates」をトリガーにすると、Excelから別アプリに移ったタイミングでクリップボード内を処理します。

キーボードショートカットなど、ユーザーが何かする必要がないのが美しい。

「activates」はアプリが前面に来たら、「deactivates」はその逆で別アプリに移ること。

Excelでコピーするタイミングで処理

「⌘ + Cをダブルタップ」のきっかけでクリップボード内を処理します。

前提条件として、[編集] → [コピー]に対して、⌘ + CをKeyboard Maestroにて設定しておく必要があります

つまり、⌘ + Cのダブルタップは次のように処理されます。

  • 1回目:コピー
  • 2回目:テキスト整形

応用編として「⌘ + Cをトリプルタップ」をトリガーに別の処理(カンマを削除)などを仕込んでおくことが考えられます。多くのオンラインバンキングでは「,」なしで入力することが求められるため、「,」を削除するのに有効。

Keyboard Maestroマクロのダウンロード

連結に関してのまとめ

次のアプローチがあります。

  • &(連結演算子)
  • CONCATENATE関数
  • CONCAT関数
  • TEXTJOIN関数

CONCATENATE関数はCONCAT関数に変更され、「A1:B9」のような引数を持てるようになりました。

項目読み方引数1引数2対応
&アンパサンドA1&A2&A3&A4すべて
concatenate関数コンカティネイトA1, A2, A3, A4Excel 2016以前
concat関数コンカットA1, A2, A3, A4A1:A4Office 365およびExcel 2019
textjoin関数テキストジョイン区切り文字,TRUE,A1:A4すべて