縦書きにしたときに文字や数字が横向きになる場合の対応

 あて先住所を表示する際など、文字列を縦書きにした場合に数字が横倒しになったり、縦になってほしい棒が横のままだったりということがあります。
 その場合の対策についてです。

f:id:accs2014:20161210131212p:plain:right:w200

 まず、特に変わったことをせず、テキストボックスの縦書きプロパティを「はい」とすることで住所を縦書き表示してみます。


f:id:accs2014:20161210131211p:plain:right:w200

 印刷プレビューではこのように表示されます。
 問題点として、半角英数字が90度横向きになっていること、そして全角の「-」が横長のままなので縦書きの書式に合っていないこと、の2つが挙げられます。


f:id:accs2014:20161210131210p:plain:right:w200

 英数字は全角であれば横向きになりませんし、全角の「-」ではなく半角の「-」であれば横向きになり、結果的に縦長に表示されます。
 そこで、文字列をすべて全角にしたうえで全角の「-」については半角の「-」に変換することとし、テキストボックスのコントロールソースを以下のように改めます。

=Replace(StrConv([住所],4),"-","-")


f:id:accs2014:20161210131209p:plain:right:w200

 印刷プレビューです。
 おおむね問題はなさそうですが、縦書きの「-」のあたりで文字が詰まりすぎに思われる場合は適宜スペースを挟むなどしてください。


 補足ですが、どうしても英数字を全角にしたくないという場合は、縦書きプロパティを用いず、単に細い縦長のテキストボックスを用いる、という方法も考えられます(テキストボックスの幅が細いと1文字ごとに改行されますので、視覚的には縦書きに見えるというわけです。ただし中央揃えにしないと表示がガタガタになります)。
 しかし、半角英数字は細いため、テキストボックスの幅をさらに細くしたり、左右の余白を設定しないと、部分的に半角英数字が横に2つ並ぶということが起こります。また、幅を狭めすぎると今度は全角文字の左右が切れてしまいますので微妙な調整が必要です。「I」のような非常に細い文字がある場合は調整しきれませんので、このような文字の前後に改行を挟む(Replace関数で「"I"」を「"I"&chr(13)&chr(10)」に置き換えるなど)といった対応が必要となります。なかなか多難です。