- ベストアンサー
(VBA)Trimでエラーが発生するのは?
- VBAのTrim関数を使って不要な空白(半角、全角)を削除するマクロを作成しましたが、特定のコードでエラーが発生します。
- エラーコードは1004で、「アプリケーション定義またはオブジェクト定義のエラーです。」と表示されます。
- 原因は何なのでしょうか?エラーが発生するコードは「Cells(I, "A").Value = Trim(Cells(I, "A").Value)」です。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> =」のようにif文で処理すべきイコール(=)以外の > 文字(文字列)が存在したら教えて下さい。 「+」「-」あたりは駄目なさそうな気がしましたがVBAだと大丈夫でした(手入力だと駄目なので後で編集すると#NAME?のエラーになります) 何が駄目なのかよくわかりませんので Ifで選別せずに 全て Cells(I, "A").Value = "'" & Trim(Cells(I, "A").Value) にしておくというのはどうでしょう。
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17070)
Sub test01() 'I = 2 Cells(I, "A").Select MsgBox "AA" MsgBox Trim(Cells(I, "A").Value) End Sub は実行するとエラー Sub test01() I = 2 Cells(I, "A").Select MsgBox "AA" MsgBox Trim(Cells(I, "A").Value) End Sub はOK I(アイ?)の設定がうまく行ってないのでは?この部分を実行する前のステップで、このアイを他の文字(変数)で定義設定してしまっているとか。 こんなエラー問題は自分で色々考えるものと思う。全体を示していない・できないので他人にはわかりにくいのだから。
- kkkkkm
- ベストアンサー率66% (1742/2617)
> 以下のようなコードを追加してみましたが > if分に処理が移らないようです。 以下で試してみてください。 If Left(Trim(Cells(I, "A").Value), 1) = "=" Then Cells(I, "A").Value = "'" & Trim(Cells(I, "A").Value) Else Cells(I, "A").Value = Trim(Cells(I, "A").Value) End If
お礼
kkkkkmさん、提示いただいたコードで エラー無く処理ができました 。 今回の質問は、解決しましたが 転ばぬ前の杖ですが 「=」のようにif文で処理すべきイコール(=)以外の 文字(文字列)が存在したら教えて下さい。
- kkkkkm
- ベストアンサー率66% (1742/2617)
セルを書き替える必要が無ければ 変数 = Trim(Cells(I, "A").Value) 'MsgBox I & ": " & Cells(I, "A").Value Print #1, 変数 で試してみてください。
- kkkkkm
- ベストアンサー率66% (1742/2617)
トリムしたら「=」から始まって数式となりますが、数式として成り立たないのでエラーになっていると思います。 最初の「=」の前に「'」を入れるとエラは無くなりますので試してみてください。
補足
kkkkkmさん、回答ありがとうございます。 <最初の「=」の前に「'」を入れるとエラは無くなりますので試してみてください。 手打ちで「’」を入れると処理できたので 以下のようなコードを追加してみましたが if分に処理が移らないようです。 如何したら良いですか ? For I = 1 To EndLow If Left(Cells(I, "A"), 1) = "=" Then Cells(I, "A") = "'" & Cells(I, "A") MsgBox Cells(I, "A") End If
お礼
そうですね。 if文のいらない「'」を付加する方式の方が 後々面倒が起きないようなので下記に修正しました。 これで解決にしたいと思います。 (しばらく、解決としないので 何か他にありましたらコメントください。) Option Explicit '空白は半角・全角ともに削除されます。 '空白が複数あった場合でもすべて削除されます。 '文字列間の空白は削除されない Sub Delete_Space_With_Save_Text() Dim I As Long Dim EndLow As Long EndLow = Cells(Rows.Count, "A").End(xlUp).Row 'ファイルを書き込みで開く(無ければ新規作成される、あれば上書き) Open "C:\Users\Nubo\Desktop\My_text.txt" For Output As #1 For I = 1 To EndLow Cells(I, "A").Value = "'" & Trim(Cells(I, "A").Value) Print #1, Cells(I, "A").Value Next '開いたファイルを閉じる Close #1 '終わったのが分かるようにメッセージを出す MsgBox "完了!" End Sub