[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『文字の後部にある空白を削除したい』(かき氷)
A列のセルに入力してある文字の後部にどうしても空白が入ってしまう為、
VBAで空白を消したいと考えております。
A列のセルは3行ずつセルが結合しており、結合したセルにそれぞれ文字が入力
されています。
下記のコードを書いてみたのですが、うまく空白が消えてくれません。
申し訳ありませんが、アドバイスをお願い致します。
Sub 空白セル削除()
Dim c As Variant
With Sheets("sheet1")
For Each c In .Range("A4", .Range("A" & .Rows.Count).End(xlUp)) c.Value = RTrim(c.Value) Next c End With
End Sub
>下記のコードを書いてみたのですが、うまく空白が消えてくれません。
その空白の文字コードは何ですか?
※ シート上で関数を使って調べる場合 → =CODE(RIGHT(そのデータが入ったセル))
(半平太) 2012/09/20 21:14
Application.Clean(c.Value) では? (seiya)
上記のコードは、ネットで調べたコードをそのまま代用したようなコードだったのですが・・・。
Application.Clean(c.Value)
だと、文字の中のすべてのスペースが削除されてしまうのでは?
文字後部の半角スペース1文字分だけ削除したいのです。
>上記のコードは、ネットで調べたコードをそのまま代用したようなコードだったのですが・・・。
「プログラムのコード」についてお尋ねしたのではありません。
問題となっているデータの右端(スペースと思われる文字)の「文字コード」が何かをお尋ねしたのですけども・・・・
(半平太) 2012/09/21 22:47
どうも普通の半角スペースでは無いみたいです。
半角スペースに直すと、上記のコードで消えますので・・・。
VBE で
Sub ChekCode() MsgBox Asc(" ") End Sub
("")の中に空白を入れて実行したところ、63と出ました。
通常のスペースだと、32と出ます。
>Application.Clean(c.Value) >だと、文字の中のすべてのスペースが削除されてしまうのでは?
実際そうなったの?
だとしたら Trim$(Replace(c.Value,Chr(63)," ")) で、良さそうだけど? (seiya)
(ドカ)2012.09.22 0546
問題の文字のみを適当なセルに残して(例えば A1)、
Sub ChekCode() MsgBox AscW(range("a1").value) End Sub
これで 何が表示されますか?
ichinose
>>Application.Clean(c.Value) >>だと、文字の中のすべてのスペースが削除されてしまうのでは?
>実際そうなったの?
C.Value = Application.Clean(c.Value)
とコードを書いてみたのですが、何事も起こりませんでした。
だとしたら Trim$(Replace(c.Value,Chr(63)," ")) で、良さそうだけど?
C.Value = Trim$(Replace(c.Value,Chr(63)," "))
で書いてみたのですが、やはり何事も起こりません。
> 138 が表示されました
C.Value = Trim$(Replace(c.Value,Chr(138)," ")) は試した? (seiya)
-138 が表示されました
C.Value = Trim$(Replace(c.Value,Chr(-138)," ")) は試した?
試したんですが、ダメでした・・・。
VBAではできないんですかねー。
>C.Value = Trim$(Replace(c.Value,Chr(-138)," ")) は試した? -138? (seiya)
文字コードは苦手なので、力業です。
A1セルに、その謎の文字ひと文字だけを入れた状態で下記を実行。
イミディエイトウィンドウになにか書き込まれるようなら
Trim$(Replace(c.Value,Chr(その数値)," ")) で行けます。
Rtrimのほうがいいのかな? そのへんはよろしいように。
ほかのかたからもっと良い回答がある思いますが、まあ、それまでの繋ぎってことで。
Sub test()
Dim i As Long Dim c
c = ActiveSheet.Range("A1").Value
On Error Resume Next For i = -500 To 20000 If Replace(c, Chr(i), "") = "" Then Debug.Print i End If Next i On Error GoTo 0 End Sub
iを-500から始めているのは、-138に敬意を表してです。
iを20000で終えているのは、まあこのくらい試せばもうよかろうかと。
Debug.Print i のあと、Exit For していないのは、まさか2つ以上ヒットするとは思いませんが、
逆に「まさか」と思ったら確認する習慣だからです。
−佳−
>Sub ChekCode() > MsgBox AscW(range("a1").value) >End Sub
>これで 何が表示されますか?
これの答えが -138ですか? う〜ん
>C.Value = Trim$(Replace(c.Value,Chr(-138)," "))
これを
C.Value = Trim$(Replace(c.Value,Chrw(-138)," "))
これで試すとどうでしょうか?
ichinose
上で提案されている方法ではダメだった場合にのみ試してみてください。
Sub 空白セル削除()
Dim c As Variant
With Sheets("Sheet1") For Each c In .Range("A4", .Range("A" & .Rows.Count).End(xlUp)) If c.Value <> "" Then Select Case AscW(Right(c.Value, 1)) Case 160, 8194, 8195, 8201 'これ以外にあるのかどうか分かりません。 c.Value = Left(c.Value, Len(c.Value) - 1) End Select End If Next End With End Sub
(Html文書で使われている特殊なスペースを削除するもの・・のつもり)
(半平太) 2012/09/22 23:51
C.Value = Trim$(Replace(c.Value,Chrw(-138)," "))
セルの値がすべてFALSEに置き換わってしまいました。
半平太さんのコードをそのまま使用しましたら、謎の空白スペースは削除できました!
ありがとうございます。
いや〜、簡単に削除できると思っていたのですが、こんなに大変なことになるなんて
思っていませんでした。
勉強になりました。
アドバイスを頂いた方々、本当にありがとうございました。
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.