追記あり (Excel VBA) 選択範囲の全角スペースおよび半角スペースを一括で削除する
注意点 (2017.7.18追記)
2017年4月の追記以降、しばらく運用してみたんですが、原因は不明なんですけど、やっぱりどうしても選択範囲だけじゃなくてワークシート全体のスペースが一括で削除されてしまうことが多いので、もうちょっと考えた方がいいのかなと思いました。
そういうことがあるという前提でこの記事を読んで下さい。申し訳ありませんが宜しくお願い致します。
全・半角スペースを削除する
削除は置換
文字を削除するときにはReplaceメソッドを使います。削除というか、""に置換する訳です。そして、選択範囲の全角スペースおよび半角スペースを削除する場合は、Selectionに対してReplaceを適用します。
Sub DelSpaces() ' ** 選択範囲の全・半角スペースを削除 ** Selection.Replace " ", "" ' <--- スペースは全角で入力 Selection.Replace " ", "" End Sub
または、キャラクターコードで記述して
Sub DelSpaces() ' ** 選択範囲の全・半角スペースを削除 ** Selection.Replace Chr(-32448), "" Selection.Replace Chr(32), "" End Sub
[ 2017.4.26追記 ]
選択範囲外のスペースも削除されてしまうことがある!
しばらく上記のコードで運用していたところ、"選択範囲を指定しているにもかかわらず、選択範囲以外の全てのセルでスペースが削除されてしまう"場合が何回も発生しました。
そこで、コードを改良することにしました。
選択範囲は取得されてるのか?
最初に思ったのは、このSelectionは本当に取得されているのか?
Sub CheckSelection() Dim R1, R2, C1, C2, cnt cnt = Selection.Count R1 = Selection(1).Row C1 = Selection(1).Column R2 = Selection(cnt).Row C2 = Selection(cnt).Column MsgBox R1 & "," & C1 & "-" & R2 & "," & C2 End Sub
結果は、取得されているようです。
ならばと、改良コードその1
Sub DelSpaceV2() ' ** 選択範囲の全・半角スペースを削除 ** Dim R1, R2, C1, C2, cnt cnt = Selection.Count R1 = Selection(1).Row C1 = Selection(1).Column R2 = Selection(cnt).Row C2 = Selection(cnt).Column For r = R1 To R2 For c = C1 To C2 Cells(r, c).Replace Chr(-32448), "" Cells(r, c).Replace Chr(32), "" Next c Next r End Sub
ただ、上記コードだと単一の矩形範囲しか選択できませんよね。ということで、改良コードその2
Sub DelSpaceV3() ' ** 選択範囲の全・半角スペースを削除 ** Dim CL As Range For Each CL In Selection CL.Replace Chr(-32448), "" CL.Replace Chr(32), "" Next CL End Sub
とりあえずこれでまたしばらく運用してみることにします。