[[20120920205425]] 『文字の後部にある空白を削除したい』(かき氷) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『文字の後部にある空白を削除したい』(かき氷)

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)


文字数を調べて、6文字だったら5文字だけ取り出す。でどうでしょう。

(ドカ)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.