人によっては「エクセル」「表計算ソフト」というとイメージできない人もいるかもしれませんが、エクセルには文字列操作の機能があります。そのなかで最もシンプルな文字列連結について紹介したいと思います。
まずは文字列連結の基本から
まず上のようになっていたとしましょう。
文字列連結は&でつなげるだけです。
A2,B2,C2のセルをつなげるには
=A2&B2&C2
とします。ただし、この方法だと日付や時刻はシリアル値(そのうちこの話もします。)で表示されてしまいます。TEXT関数等を使って修正しなければいけません。
例えば
=A3&TEXT(B3,”yyyy/m/dd”)&C3
のようにします。yyyy/m/ddは表示形式です。(この話もそのうちします。)
CONCATENATE関数を使う方法もあります。
=CONCATENATE(A3,TEXT(B3,”yyyy/m/d”),C3)
のようにします。
文字列のあるセルを選択するだけではなく”で囲んで直接入力しても構いません。
=”オセロ盤は”&B2&”マスあります。”
とできます。
さらには式を入力することもできます。(すでにCONCATENATE関数の例を載せましたが…)
=”オセロ盤は”&8*8&”マスあります。”
等のようにします。
ちなみに&の前後の半角スペースは無視されるので半角スペースを入れて見やすくすることもできます。
= A2 & B2 & C2
とできます。
応用事例1 HTML tableタグで吐き出す。
エクセルで作った表をウェブページやwikiに載せることがあるかもしれません。それを、文字列連結で変換したいと思います。
上記のようになります。G列が目標の結果です。G列まとめてコピーしてもよいのですべてを一つのセルにまとめる必要はありません。
式で表すと上のようになります。
主なタグはJ1からP2に文字列で保存しました。N3とP3はよくある組み合わせなので別途作りました。
F列は作業列です。本番のG列がこれくらいなのでわざわざ作業列を作る必要はなかったかもしれません。
$は絶対参照を表します。オートフィルでコピーするためのものです。
エクセルで作ってインデントを入れる必要があるかどうかわかりませんが(上の事例では入れていません。)インデント入れる場合はタブと改行が必要にまります。
タブはchar(9)で改行はchar(10)&char(13)で入力できます。タブはエクセル上で見た目の変化がないので気に入らない場合は半角スペースでインデントを取りましょう。
もっともwiki等では|等を使ってもっと簡単に表を作れるのでもっと簡単に作ることができますが。
ちなみに実際に作った例がクォーターニートの大冒険です。
応用事例2 レベルごとにテキストデータを出す
前の項では表全体でtableタグを使った表に変換しました。今度はレベルごとにテキストを作ることを考えます。
I列が目標のテキストでF列G列H列は作業列です。
F1にテンプレートを記入してあります。全部表示すると縦に長くなるので他の列と同じ高さにしました。
レベル$lev$の情報です。 最大HPは$hp$です。 次のレベルに上がるのに必要な経験値は$exp$です。 その時の累積経験値は$sumexp$になります。
と入力されています。$と$で挟まれているものはレベルごとに書き換える部分です。
ここの部分は何でもいいのですが、唯一気を付けないといけないことはテンプレート内の他の部分に引っかからないようにすることです。そのため、決して使うことのない文字列で囲むことをお勧めします。
そしてA2からD2にあるのはその文字列の対応部分です。
式で表すと上記のようになります。SUBSTITUTE関数で置換をしています。
$は絶対参照を示す文字です。F列だけ独特なのはテンプレート部分を直接変換したからです。
これはネスト(入れ子構造・関数の中に関数を入れる)でまとめるのは大変ですね。事実上作業列必須です。
実際に吐き出された例が
“レベル5の情報です。 最大HPは54です。 次のレベルに上がるのに必要な経験値は16です。 その時の累積経験値は80になります。”
テキストデータなので”で囲まれています。全部手動で張るのが大変かもしれませんが…。ファイルを作るのならマクロでできます。それならここまでの部分もマクロで作ればいいということに…。
コメント