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, A4 | Excel 2016以前 | |
concat関数 | コンカット | A1, A2, A3, A4 | A1:A4 | Office 365およびExcel 2019 |
textjoin関数 | テキストジョイン | 区切り文字,TRUE,A1:A4 | すべて |