#記事の概要
ビジネスサイドで 「なんでスペースしかないはずなのに ?
が文字化けで出るの?」という話題が出ました。
かつてVBA初心者だったころに、CSVファイルの読み込みでこんなんに遭遇して1時間つぶしたことを思い出したので、1年数か月ぶりにQiitaに記事を書きました。
#環境
- Excel2016
- Windows10
#単純にスペースを削除できる場合
###Trim関数
文字列の先頭や末尾のスペースを削除する関数。全角も半角もスペースなら削除してくれます。
下記3つのいずれかを使用。
- Trim : 先頭と末尾のスペース削除
- LTrim :先頭のスペース削除
- RTrim : 末尾のスペース削除
Sub ex_Trim()
Dim s As String
s = Trim(cells(1,1)) 'A1セルの先頭と末尾からスペースを削除
cells(1,2) = s 'B1セルに書き出し
End Sub
###Replace関数
Replace関数は置換を行う関数。
" "
や" "
を""
に置換してスペースを削除します。
Trim関数だと文字列の先頭か末尾のスペースしか削除できないので、hoge hoge
をhogehoge
にしたい場合はReplace関数を使います。
半角スペースを消したい場合はこんな感じ。
Sub ex_Replace()
Dim s As String
s = Replace(Cells(1,1)," " ,"") 'A1の半角スペースを""に置換
Cells(1,2) = s 'B1に書き出し
End Sub
#そもそも
があるか知りたい
###InStr関数
,
の後ろに入れた文字が、,
の前に入れた文字列の何文字目に存在しているかを返す関数。
諸々省略できるけれど、正式にはこういう関数。
半角もしくは全角のスペースが存在するかを調べたい場合はこんな感じ。
Sub ex_InStr()
If InStr(Cells(1, 1), " ") > 0 Or InStr(Cells(1, 1), " ") > 0 Then 'A1の先頭からスペースを探して0よりも大きい(スペースが存在する)場合
MsgBox "True" 'メッセージボックスに`True`を表示
Else
MsgBox "False" 'スペースが存在しない場合、メッセージボックスに`False`を表示
End If
End Sub
#スペースを削除したはずなのに、何故か
が消えなかったり、?
が表示されている場合
ノーブレークスペースがいらっしゃる可能性が高いです。
WordPressに入稿する際に自動で入ってたりするこういうやつ
見た目は
ですが、正確にはスペースとは異なるので、Trim関数を使ったり、Replace関数で" "
や" "
を置換しようとしても削除できません。
?
になるのは、ざっくり言うと
で表現できない文字コードに変換されているから。(2バイト系文字コードが云々のような話になるので割愛)
##Unicodeをサポートしてる環境のみ
※Visual Basic for the Macintoshでは、Unicodeをサポートしていないので、Mac勢はこの項目で解決できないです…
AscB関数とChrB関数で行けそうな気はします。
###ChrW関数
指定した文字コードをUnicode(String型)で返す関数。
VBA(Windowsで、バージョンがあまりに古すぎないもの)のString型はUnicodeなので、ChrW関数を使うのが手っ取り早いです。
が
で確定なら、文字コードは160なのでこんな感じ。
Sub ex_ChrW()
Cells(1, 2) = Replace(Cells(1, 1), ChrW(160), "") 'B1にA1の文字コード160を""に置換した値を書き出し
End Sub
###AscW関数
Unicodeの文字コードを返す関数。
「文字コードが分からん」という場合は、AscW関数で文字コードを調べてからChrW関数での処理に移ってください。
Sub ex_AscW()
Msgbox = AscW(Cells(1, 1)) 'メッセージボックスにA1の文字コードを表示
End Sub