人生のプチ美学を教えてください!!

エクセル2003、XPを使用しています。

エクセルのマクロで置換をしているのですが、
置換対象がCHAR(160)です。
セル上に上のを打ち込むと、実際は違いますが半角スペースに見えます。
特殊文字であっているのでしょうか。
それで、この文字を消したいと思い、以下の通りマクロで記述しているのですが、成功しません
おわかりになる方いらしたらよろしくお願いします。

Cells.Replace What:=Chr(160), Replacement:="", LookAt:=xlPart, SearchOrder:= _
xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

A 回答 (5件)

=CHAR(160)


を「形式を選択して貼り付け」の「値」で貼り付けた文字は
文字コードで
Unicode:0x00A0
となりました。

ActiveCell.Value = Chr(160)
で貼り付けた文字は
文字コードで
Unicode:0xF8F0
となりました。

CHAR(160)とChr(160)は別物だと思います。

n_na_ttoさんが言われるように
ChrW(&HA0)
を使えば良いと思います。

Cells.Replace What:=ChrW(&HA0), Replacement:="", _
  LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
  SearchFormat:=False, ReplaceFormat:=False
    • good
    • 0
この回答へのお礼

へんしんありがとうございます。
全く別のものとして、認識されるのですね。
ちょっとびっくりです。
ありがとうございました。

お礼日時:2008/11/14 10:29

確かにcuctus_200さんのやり方だと置換できませんね。


私が置換に成功したときは、以下のマクロでCHAR(160)を埋め込みました。
これで埋め込んだCHAR(160)は置換できるはずです。

Sub test()
Range("A3") = Chr(160)
End Sub

同じCHAR(160)のはずなんですがねぇ
    • good
    • 0
この回答へのお礼

返信、ありがとうございます
なるほど、そういったやり方もありますね。
それにしても、CHAR(160)不思議です。
ありがとうございます。

お礼日時:2008/11/14 10:28

こんばんは。



確認しました。確かに、出来ないようですね。

ただ、なぜ、Chr(160)自体が、ワークシートに入り込むのでしょうか?
元がテキストにしてある限りは、そのようなコードは入らないのではないかと思います。もしかしたら、データベースの区切り文字かな?

通常の方法では難しいようです。VBAからですと、このような方法が出来るのではないかと思います。

Sub Test2()
  Dim c As Variant
  Dim i As Long
  Dim n As String
  Dim m As String
  Dim a() As Byte
  For Each c In ActiveSheet.UsedRange
    If VarType(c.Value) = vbString Then
      For i = 1 To Len(c.Value)
        n = Mid(c.Value, i, 1)
        a() = n
        If Not (a(0) = 160 And a(1) = 0) Then
          m = m & n
        End If
      Next i
      c.Value = m
      m = ""
    End If
  Next c
End Sub
    • good
    • 0
この回答へのお礼

コードまで書いていただきありがとうございます。
Chr(160)はお察しの通り、区切り文字だと思います。
WEBベースのシステムがあり、それをコピペしたときにありました。
ありがとうございました。

お礼日時:2008/11/14 10:26

Chr(160)



ChrW(160)
とかChrW(&HA0)で試してみてください。
    • good
    • 0
この回答へのお礼

出来ました。
ありがとうございます。
chrWという物があったのですね。
知りませんでした
ありがとうございました

お礼日時:2008/11/14 10:24

同じXP+Excel2003の環境で試してみましたが正常に動きました。


コードとしては問題ないと思われます。
どんな状態になるのでしょうか?

この回答への補足

早速の返信ありがとうございます。

例えば、A1に"=CHAR(160)"と打って
それを、A2に値のみをコピーします。
マクロを実行した場合、きちんと表示してくれません。
わかりやすくするために置換後の言葉を"*"にすると通常であれば、A2に*と表示されるはずですが、"=CHAR(160)"をコピーした物が残っていて表示されません。
つまり、まったくChr(160)というのを認識していないような状態です。
よろしくお願いします。

Cells.Replace What:=Chr(160), Replacement:="*", LookAt:=xlPart, SearchOrder:= _
xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

補足日時:2008/11/13 19:25
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報