(Excel)縦書きにして数字だけ横書きにする方法

 Excelで、セルやテキストボックス内の文字列を縦書きにしつつ数字だけ横書き(縦中横)にする方法です。
 手動で設定する例と数式で縦書き文字列を取得する例を紹介します。

セル内の文字列の場合

手動で改行を挿入していく例

 ここではB3セルの文字列(右側にはみ出しています)を縦書きにし、半角数字だけを横書きにして表示するものとします。

 


 書式設定を開き(B3セルを右クリック→「セルの書式設定」を選択)、配置タブで縦位置及び横位置を「中央揃え」に設定します。縦の設定は任意ですが、横の中央揃えをしないと文字の左右位置が揃わずガタガタになります。
 普通、縦書きにするときは右側にある「方向」で縦書きの設定を行いますが、この縦書き設定は行いません

 なお、「折り返して全体を表示する」のチェックは入れてもいいですが後の操作(Alt+Enter)をしたときに自動的に設定されます。



 あとは適当な位置(数字の間以外)にカーソルを合わせ、Alt+Enterキーで1つ1つ改行を挿入していきます。

 


 完成した様子です。
 対象となる文字列が1つ2つならいいですが、多いとさすがに面倒くさいです。

関数を使って縦書き文字列を取得する例

 関数を使う方法です。ただしREGEXEXTRACT関数(Microsoft 365バージョンで使用可)を必要としますのでご注意ください。

 ここではC3セルに数式を入力し、B3セルの文字列を縦書きにして半角数字は横書きにした文字列を取得するものとします。

 


 C3セルで書式設定を開き(セルを右クリック→「セルの書式設定」を選択)、配置タブで縦位置及び横位置を「中央揃え」に設定し、さらに「折り返して全体を表示する」にチェックを入れます。チェックを忘れると数式による改行が反映されません。
 「方向」での縦書きの設定は不要です。

 


 そしてC3セルに次の数式を入力すると完成です。

 C3セル

=TEXTJOIN(CHAR(10),,REGEXEXTRACT(B3,"[^0-9]|[0-9]+",1))

 REGEXEXTRACT関数を使い、半角数字以外は1文字ずつ、半角数字はそれぞれ1つのかたまりとして抽出しています。
 そしてTEXTJOIN関数を使い、それらの文字列の間に改行を挿んで結合しています。
 全角数字も横並びにする場合は2か所の「0-9」を「0-90-9」に置き換えてください。



 なお、REGEXREPLACEで改行を挿んだ方が早そうですが、余分な改行が生じやすく案外面倒です。
 一応は次の式で同じ結果になりますが、ちょっと難解です。

=REGEXREPLACE(B3,"(?<![0-9]|^)|(?![0-9]|$)","\n")

 否定後読み/先読みを使っています。左側の隣が数字や文字列の先頭ではない、または右側の隣が数字や文字列の末尾ではないような「文字の間」を改行(バックスラッシュは¥ですので注意)に置き換えています。

テキストボックス内の文字列の場合

 横書きのテキストボックスで上記の手動の例と同じことができます。
 また、テキストボックスからセルを参照する(テキストボックスを選択して数式バーに「=セル番地」を入力)こともできるので、上記の手動または数式による実行内容を反映させることもできます(次の画像参照)。
 ただし縦横の文字位置(揃え)は別途設定が必要です。