5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Excel VBA】関数でいろんな空白を削除する

Last updated at Posted at 2019-08-29

#記事の概要

ビジネスサイドで 「なんでスペースしかないはずなのに ? が文字化けで出るの?」という話題が出ました。
かつて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

image.png

###Replace関数

Replace関数は置換を行う関数。
" "" """に置換してスペースを削除します。

Trim関数だと文字列の先頭か末尾のスペースしか削除できないので、hoge hogehogehogeにしたい場合はReplace関数を使います。

半角スペースを消したい場合はこんな感じ。


Sub ex_Replace()

 Dim s As String
 
   s = Replace(Cells(1,1)," " ,"") 'A1の半角スペースを""に置換
   Cells(1,2) = s 'B1に書き出し

End Sub

image.png

#そもそも があるか知りたい

###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

image.png
image.png

#スペースを削除したはずなのに、何故か が消えなかったり、?が表示されている場合

ノーブレークスペースがいらっしゃる可能性が高いです。
WordPressに入稿する際に自動で入ってたりするこういうやつ  

見た目は ですが、正確にはスペースとは異なるので、Trim関数を使ったり、Replace関数で" "" "を置換しようとしても削除できません。
? になるのは、ざっくり言うと で表現できない文字コードに変換されているから。(2バイト系文字コードが云々のような話になるので割愛)

##Unicodeをサポートしてる環境のみ

Visual Basic for the Macintoshでは、Unicodeをサポートしていないので、Mac勢はこの項目で解決できないです…:bow:
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

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?