VBA開発

Webで取得したデータの半角スペース削除ができない【ExcelVBA】

Webで取得したデータの半角スペースが除去できない

最近、VBA開発でハマったケースです。
VBAでIE操作をしている際、取得した数値データを分析・加工が出来ず、エラーが発生しました。
■現象
・目視ではWeb画面上のデータは、通常の数値データと認識可能。
・取得したデータを格納した変数上では半角スペースが存在。
 →もしくは、DebugPrintをすると、スペース部分が「?」と表記される。
 →その為、数値のデータを文字列として認識してエラーが発生していた。
・Trim関数やClean関数では空白(半角スペース)を削除できない。
・Replace関数で強制的に半角スペースを除去しようとしたが、置換できない

削除不可のスペースは「 」(ノーブレークスペース)

HTMLでよく使用される (ノーブレークスペース Non-Breaking SPace)
目視で確認する限りはスペースですが、正確にはスペースとは異なる為、
Trim関数やReplace関数で置換・削除(除去)ができません。

ノーブレークスペース – Wikipedia

サンプルコード

「 」は文字コードではChrW(160)です。
Replace関数
を使用し、文字コードChrW(160)を””(空白)へ置換しましょう。

'■Replace関数で「nbsp;」を除去する
Sub sample_Repleace_nbsp()
    Dim str As String
    
    '■取得したデータで空白は「nbsp;」
    str = "test test"
    
    '■strから「nbsp;」を除去
    MsgBox Replace(str, ChrW(160), "")
    
    '結果→「test test」→「test」
    
End Sub

結果、空白スペースを除去され、エラーが発生せず、数値として比較する事ができました。

その他

ChrW関数Unicodeをサポートしている環境のみ動作します。=Macでは動作しません。
・文字コード自体が不明な場合は、以下AscW関数で文字コードを取得する事が可能です。
'■ASCW関数で文字コードを取得する
Sub sample_AscW_nbsp_get()
    Dim str As String
    
    '■空白は「 」とする
    str = " "
    
    '■strの文字コードを取得
    MsgBox AscW(str)
    
    '結果→160
    
End Sub

コメント

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