質問: EXCELにWEBページから貼り付けて利用しています。 貼り付けを行うとHTML上の「&nbsp」まで張り付いており、 それをEXCELのVBA上で削除したいと思いいろいろ思考錯誤しておりますがうまくいきません。 ASC関数で調べると63を返すので、Replace関数でchr(63)を置き換えようとしますが、 一致しないらしく、まったく置換えができない状況です。 ※同構文でたとえば「a」を削除などは問題なくできていますので、構文の問題ではないと考えています。 ※なお、MID関数で一文字ずつ文字コード比較を行うと63でヒットしますのでわけがわかりません。。。 ネットでいろいろ検索しましたが、どれも解決にはいたっていないらしく途方にくれております。 EXCELのVBAに詳しい方がいれば解決方法をお教えください。
回答: Excelの不具合?だと思いますが、 の文字の扱いがおかしいです。 は、Unicodeでは普通のスペース(U+0020)とは別の、U+00A0(10進数では160)が割り当てられています。(文字の名称としては、Non-break Space) しかし、ExcelはHTMLからの変換の際に、ASCIIコードとして変換してしまっているようです。ASCIIコード(0x80~0xFFは拡張ASCII)では、0xA0は、「á」です。 ここでさらにおかしくしているのは、áが我々の使っているシフトJISのコードには存在しないため、Excelは、「á」に近い文字である「a」に勝手に変換して処理してしまいます。そのため、ASC()で文字コードを取得すると「a」の文字コード 0xA0(63)を返します。 一応回避策としては、ASCB()を使うと、63ではなく、160(0xA0)を取得できます。そのため、ASCB()で1文字ずつ操作して160の場合は と見なすことができそうです。Unicodeで切り出して(MID())、ASCIIコードを取得する(ASCB())という一見おかしな処理になるところがポイントです。 Excelが、0x100未満(0x00~0xFF)はASCIIと勝手に見なしてしまっておかしなことになっているのかもしれません。