Excelバージョン
マイクロソフト365
VScodeからエクセルにコピペして再度VScodeにコードをコピペすると変な空白ができてエラーが出てしまいました。
あれ~何だこれは??
ということで色々調べた結果、nbspという特殊な空白文字が含まれているためにエラー表示になってしまいました。
本日はこのnbsp空白について解決できたので解説していきたいと思います。
【特殊空白】
【解決後】
それではいってみましょう(^O^)
エラーの内容
行頭に奇妙な空白ができたので削除するためにtrimで削除しようとした結果、空白が削除できませんでした。
え?trimで削除できない?頭の中が?マークだらけになります。
とりあえず文字コードを調べるために下記の関数で文字を調べてみます。
1 | =UNICODE(文字列) |
【結果】
160と表示されました。
ちなみに同じようにセルに空白を入れて調べてみると…
半角空白→32、全角空白→12288になります。
え?160はなんだ?とまたまた頭の中が?マークだらけに…
色々調べた結果エラー文字が160でnbsp(ノンブレークスペース)ということが判明。htmlやワードプレスのテキストで出てくる ですよね…
半角空白→32
全角空白→12288
nbsp→160
念のためdebug.printで試してみると空白の箇所が????というような?マークになります。
下記はイミディエイトウィンドウで表示させると見れます。
解決法
文字コードが160ということがわかったのでChrW(文字コード)を160にしてreplaceメソッドを使用してnbspを半角空白に置き換えます。
1 | repStr = Replace(Cells(1, "A"), ChrW(160), Chr(32)) |
VBAサンプル
データがA列にある場合のVBAサンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Option Explicit Sub sample() '変数 Dim i, lastRow As Integer Dim repStr As String '最終行番号取得 lastRow = Cells(Rows.Count, "A").End(xlUp).Row For i = 1 To lastRow 'nbspを半角空白に置き換える repStr = Replace(Cells(i, "A"), ChrW(160), Chr(32)) Debug.Print repStr Next End Sub |
下記はイミディエイトウィンドウで表示させると見れます。
データ数が大量にあるときのために繰り返し処理で全ての行のnbspを置き換えてあげれば大量データも一瞬で置き換えができます。
あとはイミディエイトウィンドウで置き換えしたものを再度VSCodeにコピペしてあげれば特殊空白が半角空白に変換されているのでエラー表示はされません(*^^)v
まとめ
こういった特殊文字のエラーはほんとややこしくて嫌になりますね。
私はこういうのが一番苦手でエラーが出ると頭の中が?マークだらけになってしまいます(? ?)v
でも…なんとか解決できたので参考になれば幸いです(*゚▽゚)ノ
以上です。