半角数字を横書き(縦中横)にした縦書き文字列をつくる

 縦書きに関してはテキストボックスのオプションに「縦書き」がありますが、Wordの縦中横(一部の文字を横書き、つまり横並びにする)のような機能はありません。それは仕方ありませんが、特に(2桁以上の)数字だけはどうしても横書き(横並び)にしたいという場合が考えられますので、そのような文字列を作ってしまおうというものです。レイアウトは横書きのままで、改行を用いて文字列そのものを縦書き風にするやり方にしています。
 いわゆる簿冊の背表紙を意識してやってみましたが、正直かなりムリヤリ感が漂う内容です。

 右のようなテーブルを用います。


クエリデザインで次のような列を設けます。

縦書き表題: Replace(Replace(Replace(Trim(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Format([表題],Replace(String(Len([表題]),"&"),"&"," &")),"0","_0_"),"1","_1_"),"2","_2_"),"3","_3_"),"4","_4_"),"5","_5_"),"6","_6_"),"7","_7_"),"8","_8_"),"9","_9_")),"_ _",""),"_","")," ",Chr(13) & Chr(10))

 かなり長くなってしまいましたが、考え方としては
・Format関数〜Len関数で文字列の間に空白を挟む(後で改行に置き換えるため)
・Replace関数×10個(0〜9の10種の文字に対応)で1つ1つの半角数字の左右にアンダーバー(_)を加える
・文字列の先頭に生じている空白をTrim関数で除く
・もとの文字列に半角数字が複数並んでいた場合、「_ _」という文字列が生じているはずなので、それをReplace関数で除く
・半角数字の左右(半角数字が複数並んでいた場合はその両端)に残っているアンダーバーをReplace関数で除く
・Replace関数で空白を改行に置き換える
となります。

 列をちょっとくらい広げても最初の少ししか表示できませんので、全部を手で入力する場合はズームが欠かせません。


 データシートビューです。1桁の数字はもちろんそのまま改行されていますが、4桁の数字の部分は横書きになっています。


 レポートに貼り付ける場合はテキストボックスは横書きのまま、そして中央揃えにするときれいに表示できます。
 なお、実用に供するにあたってはさらに音引き(ー)やカッコの表示も考える必要があり、なかなか面倒です。