Webで取得したデータの半角スペースが除去できない
最近、VBA開発でハマったケースです。
VBAでIE操作をしている際、取得した数値データを分析・加工が出来ず、エラーが発生しました。
VBAでIE操作をしている際、取得した数値データを分析・加工が出来ず、エラーが発生しました。
■現象
・目視ではWeb画面上のデータは、通常の数値データと認識可能。
・取得したデータを格納した変数上では半角スペースが存在。
→もしくは、DebugPrintをすると、スペース部分が「?」と表記される。
→その為、数値のデータを文字列として認識してエラーが発生していた。
・Trim関数やClean関数では空白(半角スペース)を削除できない。
・Replace関数で強制的に半角スペースを除去しようとしたが、置換できない。
・目視ではWeb画面上のデータは、通常の数値データと認識可能。
・取得したデータを格納した変数上では半角スペースが存在。
→もしくは、DebugPrintをすると、スペース部分が「?」と表記される。
→その為、数値のデータを文字列として認識してエラーが発生していた。
・Trim関数やClean関数では空白(半角スペース)を削除できない。
・Replace関数で強制的に半角スペースを除去しようとしたが、置換できない。
削除不可のスペースは「 」(ノーブレークスペース)
HTMLでよく使用される (ノーブレークスペース Non-Breaking SPace)
目視で確認する限りはスペースですが、正確にはスペースとは異なる為、
Trim関数やReplace関数で置換・削除(除去)ができません。
サンプルコード
「 」は文字コードでは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
コメント