LWP | 文字列連結をテンプレートへ置き換える
文字列連結をテンプレートへ置き換える
TakiLibで、報告文の形と埋め込む値を分ける
Copyright © 2026 LWP 山中 一弘
本資料は、出典を明記いただければ、商用・非商用を問わず、ご自由に複製・改変・再配布していただけます。なお、著作権表示は改変せず、そのまま記載してご利用くださいますようお願いいたします。
ストーリー
月次報告の文面が、今月も少し変わります。フナさんは数字と文章を照合し、シャケもんは連結の式を修正中。「件数を先に」「担当を先に」と変更が重なり、二人は文章の形と値を分ける方法を考えます。
TakiLib Ver 3.5.4を導入したWindows版Excel VBAを題材にした、説明用の物語です。図と掲載例の結果は原ソースの読解に基づきます。
1 文章を直すたび、連結が増える

図1|図のnは3、personは「フナ」。文章の形が、値をつなぐ式の中へ入り込んでいる。
2 文章に穴を開け、値を入れる

図2|textFormatは値を個別の引数で、textFormatPackedは配列で受け取る。
3 並び替えには、番号付きの穴

図3|値の並びを保ったまま、テンプレート側で使う位置を指定できる。
4 番号を使っても、順番は進まない

図4|混在は可能でも、順番の追跡が必要。番号指定は現行実装では一桁に限られる。
5 文字が返っても、成功とは限らない

図5|ここでの#VALUE!は、TakiLibが戻す文字列の一部。図の「…」はエラー説明を省略している。
6 行を貯めても、最後は内容を照合

図6|textBuildは一回につき整形した一行を追加する。表示やファイルへの出力は別の処理。
まとめ
テンプレートを使うと、報告文の形と埋め込む値を分けられます。ただし、穴と値の対応、引数不足、数値や日付の表記まで自動で正しくなるわけではありません。シャケもんが組み立て方を整え、フナさんが報告としての内容を確かめる。その両方が必要です。
今回の仕掛け
textFormatは、受け取った可変長引数を配列へまとめ、textFormatPackedへ渡します。内部では、{}を読むと順番用の位置を進め、{0}〜{9}では指定した位置だけを使います。番号指定で順番用の位置は進みません。{10}は十番目を指定する書式としては解釈されません。
値の文字列化にはCStrを使います。引数不足などで値を取得・変換できなかった箇所には、#VALUE!にエラー番号などを添えた文字列が入ります。図5はこの経路の説明であり、Excelのセルが持つError型全般を文字列と呼んでいるわけではありません。IsErrorはエラー値かどうかを判定する関数なので、この文字列を渡してもTrueにはなりません。
textBuildは整形した文字列を配列の末尾へ追加し、同じ文字列を戻り値にもします。改行やファイル出力を自動で行う関数ではありません。また、数値・日付を外部へ渡すときは相手先の書式を決め、必要な整形を済ませてから埋め込みます。テンプレートはCSV・JSON・SQLなどの専用エスケープ処理を代替しません。
今回のソースコードのサンプル
サンプルコード 文面の入れ替えと二行の蓄積
01 |
|
|---|---|
02 |
|
03 |
|
04 |
|
05 |
|
06 |
|
07 |
|
08 |
|
09 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
関数の説明
textFormatの第1引数は文面、第2引数以降は埋め込む値です。textFormatPackedでは、第2引数に値の配列を渡します。どちらも整形した文字列を返します。textBuildは、第1引数の配列へ整形した文字列を追加する点が異なります。
コードの説明
最初の二つのtextFormatは、同じ3と「フナ」を使い、文面の順番だけを変えています。続くtextFormatPackedは、番号と順番を混ぜたときの対応を示します。x_linesにはtextBuildで二行を追加し、For Eachで一行ずつ表示します。
入力・概要
TakiLib Ver 3.5.4本体と依存処理を導入したブックで、別の標準モジュールへ全文を貼り付け、Test_Mainを実行します。同名手続きがある場合は名前を変更してください。入力値はコード内にあり、表示先はVBEのイミディエイトウィンドウです。シートへの書き込みはありません。
結果
原ソースから予測される出力は、順に「件数=3、担当=フナ」「担当=フナ、件数=3」「B / A / B」「件数=3」「担当=フナ」の五行です。今回はこのサンプルをExcelで実行していません。
読むポイント
文章の形を変える箇所と、値を渡す箇所を分けて読みます。番号なしと番号付きの穴は、動きを確かめる例では混在させていますが、保守する文面ではどちらかへ揃えると対応を追いやすくなります。
出典メモ
TakiLib Ver 3.5.4、taki3libUTF8.basのtextFormat、textFormatPacked、textBuild。2026年9月13日に元資料TK-053の参照版とSHA-256の一致、関数本体・引数・結果を照合しました。
Microsoft Learn:IsError関数。エラー値の判定と、説明文字列との区別を確認しました。
Microsoft Learn:データ型変換関数。CStrの戻り値と、日付のシステム書式への依存を確認しました。
