VBAについて質問です。


現在I列に名前のデータが入っています。
しかし、名前のデータの最後には半角スペースが全部入っおり、
この半角スペースをどうしても削除したいのですが、やり方が分からず困っております。
置換を用いて実行してみようと思ったのですが、置換で消えない半角スペースでした。
そこでやり方として、I1~Iのデータが入っている最終行まで、
ひとつひとつのセルに入っていって一回だけBackSpaceキーを押すという処理を施したいのですがそのようなことは可能でしょうか?
もしくはその他のやり方として、最後の半角スペースを削除する方法はありますでしょうか。

お手数をおかけしますがわかるかたおりましたらご回答をお待ちしております。

回答の条件
  • 1人2回まで
  • 登録:2009/12/17 20:53:27
  • 終了:2009/12/17 21:38:19

ベストアンサー

id:Mook No.1

Mook回答回数1312ベストアンサー獲得回数3912009/12/17 21:01:08

ポイント100pt

前後のスペースを取り除くのは Trim 関数を使用します。

(右だけなら RTrim)


下記のコードで希望通りになりますか。

Sub TrimI()
    Dim lastRow As Long
    lastRow = Range("I" & Rows.Count).End(xlUp).Row
    For r = 1 To lastRow
        Cells(r, "I").Value = Trim(Cells(r, "I").Value)
    Next
End Sub
id:aiomock

ご回答ありがとうございます。

プログラム実行してみましたがうまく取り除くことができません。

置換でも取り除けない半角スペースなので何か特殊な半角スペースなのでしょうか?

あああ ああ (半角スペース)の様なデータなのですが。。。

2009/12/17 21:10:00

その他の回答(1件)

id:Mook No.1

Mook回答回数1312ベストアンサー獲得回数3912009/12/17 21:01:08ここでベストアンサー

ポイント100pt

前後のスペースを取り除くのは Trim 関数を使用します。

(右だけなら RTrim)


下記のコードで希望通りになりますか。

Sub TrimI()
    Dim lastRow As Long
    lastRow = Range("I" & Rows.Count).End(xlUp).Row
    For r = 1 To lastRow
        Cells(r, "I").Value = Trim(Cells(r, "I").Value)
    Next
End Sub
id:aiomock

ご回答ありがとうございます。

プログラム実行してみましたがうまく取り除くことができません。

置換でも取り除けない半角スペースなので何か特殊な半角スペースなのでしょうか?

あああ ああ (半角スペース)の様なデータなのですが。。。

2009/12/17 21:10:00
id:chinjoh No.2

chinjoh回答回数103ベストアンサー獲得回数52009/12/17 21:22:07

ポイント100pt

TABコードが入ってるのでは?

それか改行コード

id:aiomock

ご回答ありがとうございます。

2009/12/17 21:23:44
  • id:aiomock
    サンプルとしては以下のようなものです。

    http://aiomock2008.kage-tora.com/sample.xlsx

    どうしても半角スペースを削除することが出来ません。。。
  • id:Mook
    半角スペースであれば、Trim 関数で除去されるはずですが、
    それで消えないとなるとスペースではない可能性もありますね。

    VBE で
    Sub ChekCode()
    MsgBox Asc(" ")
    End Sub
    として、" "の中にその問題の空白をコピーしてみてください。
    それで表示される数値は何ですか?
  • id:aiomock
    32と表記されます。
  • id:Mook
    32 はスペースですね。
    こちらではコピーすると"?"になってしまい、63 となります。

    最後に ? がないことが前提ですが、
    Sub TrimI()
      Dim lastRow As Long
      lastRow = Range("I" & Rows.Count).End(xlUp).Row
      For r = 1 To lastRow
        If Asc(Right(Cells(r, "I").Value, 1)) = 63 Then
          Cells(r, "I").Value = Left(Cells(r, "I").Value, Len(Cells(r, "I").Value) - 1)
        End If
      Next
    End Sub

    でどうでしょうか(汎用性のないコードですが)。
  • id:chinjoh
    http://e-words.jp/p/r-ascii.html
    32ならスペースですね。
  • id:aiomock
    無事実行出来ました。
    ありがとうございます^^。
  • id:aiomock
    大変お手数をおかけします。プログラムに組み込んだところ

    プロシージャの呼び出し、または引数が不正です。

    というエラーが

     If Asc(Right(Cells(r, "I").Value, 1)) = 63 Then

    の所で出てくるのですが、これは何らかの処理を施さないといけないのでしょうか?

    せっかく単体ですと出来ていたものが急に出来なくなったので、少し困っております。。
  • id:Mook
    セルが空白の時にエラーになっているのではないでしょうか。

    If Len( Cells(r, "I").Value, 1) ) > 1 Then
      If Asc(Right(Cells(r, "I").Value, 1)) = 63 Then
        :
      End If
    End If
    としてもダメですか?
  • id:aiomock
    はい、ご指摘いただいた通り空白行が含まれているからだと思います。

    If Len( Cells(r, "I").Value, 1) ) > 1 Then

    を付け加えてみたのですが、

    Value, 1

    の,の所で構文エラーが出てしまうのですがこれはどのように変更すればいいでしょうか。
    お手数おかけしますがここまでご回答いただければと思います。。
  • id:Mook
    すみません。
    If Len( Cells(r, "I").Value, 1) ) > 1 Then

    If Len( Cells(r, "I").Value) ) > 1 Then
    に修正してください。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません