スポンサーリンク

エクセルにて縦書きと横書きを混在させる(数字だけ横書きなど)方法【かっこだけ横】

Excelのスキルアップ

エクセルはデータ解析・管理を行うツールとして非常に機能が高く、上手く使いこなせると業務を大幅に効率化できるため、その扱いに慣れておくといいです。

ただ機能が充実しているあまり初心者にとっては処理方法がよくわからないことも多いといえます。

例えばエクセルにて縦書きで数字だけ横書きにする方法(縦書きと横書きを混在)を理解していますか。

ここではエクセルにて縦書きで数字だけ横書きにする方法(縦書きと横書きを混在)について解説していきます。

スポンサーリンク

エクセルにて縦書きで数字だけ横書きにする方法1【縦書きと横書きを混在】

それでは以下のサンプルデータを用いてエクセルにて「基本的には縦書きであり数字だけ横書きにする方法」を確認していきます。

縦書きの文字の中で数字だけ横書きにするには、

・セルの中で一文字毎に改行し
・横書きにしたい数字等は改行しない

ことで、縦書きと横書きを混在させることができます。

今回は以下のように、赤線の位置で改行していきます。

すると以下のようエクセルにて縦書きと横書きが混在する中で、数字だけを横書きとすることができました。

 

エクセルにて縦書きと横書が混在の中で数字だけ横書きにする方法【関数を使用】

続いて計算式を使って、縦書きで数字だけ横書きにする方法について説明します。

A列の文字列から1文字ずつに取り出して、B列から横方向に展開します(1セル1文字)。

具体的には

IF(ISNUMBER(MID($A1,COLUMN()-1,1)*1),IF(ISNUMBER(MID($A1,COLUMN(),1)*1),MID($A1,COLUMN()-1,1),MID($A1,COLUMN()-1,1)&CHAR(10)),MID($A1,COLUMN()-1,1)&CHAR(10))

とB1セルに上式を入力し、縦方向にB3セルまで、横方向にR1セルまでコピーします。

上の意味を解説します。

 

最も内側にて使用される関数のCOLUMN関数では、対象セルの列番号を出力させることができ、

=COLUMN(対象セル)

と入れるといいです。なお対象セルをいれなずに=COLUMN()とした場合は、選択位置のセルの列番号が返されます。

その外側の関数のMID関数では、対象の文字列における任意の位置の文字を取得できる関数であり、

=MID(対象文字列, 開始位置,文字数)

と入れるといいです。

今回は上のCOLUMN関数と組み合わせ、MID($A1,COLUMN()-1,1)*1とすることで、A1(対象文字列)に対して最初の文字から1文字ずつを順に「別々のセルに分離」させているわけです。

さらにISNUMBERにて上にて分けた各文字が「数値かどうか」を判定しています。

=ISNUMBER(対象セル)

数値であればTRUEを返し、そうでなければFALSEとなります。

さらにIF関数にて、

・文字が数字の場合で、次に続く文字も数字の場合は改行コードなし
・次の文字が数字でない場合は改行コードあり
・その他の文字並びパターンでは改行コードあり

という処理をおこなっています。

ここで数値でないならば改行させる処理としてCHAR関数を用いており、

=CHAR(対象セル)

と処理するだけで改行することが可能です。

 

なおIF関数は入れ構造にすることによって、複数の条件分岐を指定しているわけです。

 

 

以上で、文字列(A列)から一文字ずつB~R列の各セルに取り出されます。(改行コードは目に見えませんが数字を除いた各文字に追加されています)

後は分離した関数をCONCAT関数でB~R列の各セルの値を結合することで、縦表示用に改行コードを付加した文字列ができます。下記のコードを任意のセルに入力してください。

=CONCAT(範囲)

と入れるといいです。(例)A1セルが対象の場合は「=CONCAT(B2:R2)」)

ENTERにて処理を確定させますと、以下のように縦書きの中に横書きの数字をいれることができました。

 

エクセルにて縦書きでかっこだけ横書きにする方法【VBA使用】

 エクセルで縦書きと横書きを混在させるには煩雑な手順や複雑な計算式が必要になり、必要に応じてセル内の改行で対応するやり方のほうが現実的なやり方といえます。

しかしながら、エクセルのマクロ機能(VBA)を使えば、より柔軟な対応が可能になります。以下でマクロ機能の一つであるユーザー定義関数を使い、縦書きと横書きを混在させる方法について説明していきます。

 

①メニューの【開発】>【Visual Basic】でVisual Basic Editorを開きます。

 

②【挿入】>【標準モジュール】でコード記述用のウィンドウを開きます。

 

③下記のサンプルコードを記述用のウィンドウ(module1)に張りつけます。

 

Function AddCRLF(MyString As String) As String

 

Dim Buf, StrPattern, Str, Result As String

Dim i As Long

‘文字列パターン

StrPattern = “[0-9()/]”

‘一文字毎に文字並びを調べる → 改行コードを付加する/しないを判定

Buf = StrConv(MyString, vbNarrow)

For i = 1 To Len(Buf)

If Mid(Buf, i, 1) Like StrPattern And Mid(Buf, i + 1, 1) Like StrPattern Then

Str = Mid(Buf, i, 1)

ElseIf Mid(Buf, i, 1) Like StrPattern And Not (Mid(Buf, i + 1, 1) Like StrPattern) Then

Str = Mid(Buf, i, 1) & vbCrLf

ElseIf Not (Mid(Buf, i, 1) Like StrPattern) Or Mid(Buf, i + 1, 1) Like StrPattern Then

Str = Mid(Buf, i, 1) & vbCrLf

Else

Str = Mid(Buf, i, 1)

End If

Result = Result & Str

Next

‘末尾改行コードの削除

If Right(Result, 1) = vbLf Then

AddCRLF = Left(Result, Len(Result) – 1)

Else

AddCRLF = Result

End If

End Function

こちらのコードを以下の位置に貼り付けましょう。

 

Visual Basic Editorを閉じてエクセルのシートに戻ります。

以上で、シート上で「AddCRLF()」という関数(ユーザー定義関数)を使用することができます。

具体的には

AddCRLF(文字列)

と処理することで、文字列で指定した文字列をセル内で改行し、縦書き表示することができます。今回の場合では=AddCRLF(A2)と入力しましょう。

()付きの数字、/の入った日付も横書きのまま全体を縦書きにすることができました。

*「=AddCRLF(“明日(10/1)の予定”)」のように、文字列を“ ”で括って直接指定することもできます。

 

このようにして縦書きと横書きを混在させる処理が完了となります。

 

まとめ

 

コメント

タイトルとURLをコピーしました