Word で書いた文章の中で選択した文字列の1文字1文字の間に空白(スペース)を入れたい場合があると思います。
例えば、「貸借対照表」という文字列を「貸 借 対 照 表」というように表示を変えたい場合。
文字列が短ければ1文字ずつスペースを入れても良いのですが長いと面倒です。
選択した文字列1文字1文字の間に空白(スペース)を入れるマクロ(VBA)を考えましたので、紹介したいと思います。
1、選択した文字列1文字1文字の間に空白(スペース)を入れるマクロ(VBA)
プログラミングコード
文字列を選択した状態で標準モジュールに記述した次のマクロ(VBA)を実行します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Sub Select_Range_Space() Dim S_Range Dim S_Range_New Dim Moji S_Range = Selection.Range S_Range_New = "" For i = Len(S_Range) To 1 Step -1 Moji = Mid(S_Range, i, 1) If i <> 1 Then S_Range_New = " " & Moji & S_Range_New Else S_Range_New = Moji & S_Range_New End If Next i Selection.Range = S_Range_New End Sub |
動作確認
例えば、次のようにある程度長い文字列を選択して上記マクロ(Word VBA)を実行しても、正常に動作することが確認できます。
文字列の選択時↓
マクロ実行後↓
2、コード説明
さて、プログラミングコードを説明したいと思います。
変数の定義
1 2 3 |
Dim S_Range Dim S_Range_New Dim Moji |
・「S_Range」は選択した文字列を格納するための変数
・「S_Range_New」は間にスペースを入れた文字列を格納するための変数
・「Moji」は選択した文字列の1文字1文字を格納するための変数
変数への代入
1 2 |
S_Range = Selection.Range S_Range_New = "" |
文字列の間に空白(スペース)を入れる
1 2 3 4 5 6 7 8 9 10 11 |
For i = Len(S_Range) To 1 Step -1 Moji = Mid(S_Range, i, 1) If i <> 1 Then S_Range_New = " " & Moji & S_Range_New Else S_Range_New = Moji & S_Range_New End If Next i |
For i = Len(S_Range) To 1 Step -1
この部分↑で、i の値を「選択した文字列の長さ」から「1」まで1ずつ下げていくことを意味しています。
Len(S_Range)は変数「S_Range」の長さを意味します。
つまり、選択した文字列の長さを表しているということですね。
例えば選択した文字列が「貸借対照表」の5文字であれば、i を5から1まで1つずつ下げていくことになりますね。
3行目の
Moji = Mid(S_Range, i, 1)
この部分↑で、選択した文字列の左からi番目の文字を変数「Moji」に入れ込んでいます。
例えば文字列が「貸借対照表」の場合において、iが3であれば左から3文字目の「対」が変数「Moji」に入ります。
5~9行目の
If i <> 1 Then
S_Range_New = “ ” & Moji & S_Range_New
Else
S_Range_New = Moji & S_Range_New
End If
この部分↑では、iが変化する中でiが1でない場合(左から1文字目でない場合)は、変数「Moji」の前に” ”(空白)を付けて変数「S_Range_New」に加えています。
また、i が1の場合は” ”(空白)を付けずに変数「Moj」を変数「S_Range_New」に加えています。
つまり選択した文字列の左から1文字目の前には空白を入れないということですね。
「貸借対照表」という文字列を選択した場合、iは最初は5からはじまり、1になるまで1つずつ下がって行きます。
i = 5 のとき
「S_Range_New」は「 表」となります。
i = 4 のとき
「S_Range_New」は「 照」に「 表」が足されて「 照 表」となります。
i = 3 のとき
「S_Range_New」は「 対」に「 照 表」が足されて「 対 照 表」となります。
i = 2 のとき
「S_Range_New」は「 借」に「 対 照 表」が足されて「 借 対 照 表」となります。
i = 1 のとき
「S_Range_New」は「貸」に「 借 対 照 表」が足されて「貸 借 対 照 表」となります。
選択した文字列を「S_Range_New」に置き換える
1 |
Selection.Range = S_Range_New |
「貸借対照表」という文字列を選択した場合、それが「貸 借 対 照 表」と置き換わります。
3、まとめ
選択した文字列1文字1文字の間に空白(スペース)を入れるマクロ(Word VBA)を紹介しました。
文字の間隔を調整することもできるので、そちらの機能を使えば良いのかもしれませんが、見栄えなどの関係上サクッと空白(スペース)を入れたい場合もあるかもしれません。
使えそうなケースで使って頂きたいと思います。