• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:(VBA)Trimでエラーが発生するのは ?)

(VBA)Trimでエラーが発生するのは?

このQ&Aのポイント
  • VBAのTrim関数を使って不要な空白(半角、全角)を削除するマクロを作成しましたが、特定のコードでエラーが発生します。
  • エラーコードは1004で、「アプリケーション定義またはオブジェクト定義のエラーです。」と表示されます。
  • 原因は何なのでしょうか?エラーが発生するコードは「Cells(I, "A").Value = Trim(Cells(I, "A").Value)」です。

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.5

> =」のようにif文で処理すべきイコール(=)以外の >    文字(文字列)が存在したら教えて下さい。 「+」「-」あたりは駄目なさそうな気がしましたがVBAだと大丈夫でした(手入力だと駄目なので後で編集すると#NAME?のエラーになります) 何が駄目なのかよくわかりませんので Ifで選別せずに 全て Cells(I, "A").Value = "'" & Trim(Cells(I, "A").Value) にしておくというのはどうでしょう。

NuboChan
質問者

お礼

そうですね。  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

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

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)
回答No.3

> 以下のようなコードを追加してみましたが > 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

NuboChan
質問者

お礼

kkkkkmさん、提示いただいたコードで  エラー無く処理ができました 。 今回の質問は、解決しましたが  転ばぬ前の杖ですが  「=」のようにif文で処理すべきイコール(=)以外の    文字(文字列)が存在したら教えて下さい。

  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.2

セルを書き替える必要が無ければ 変数 = Trim(Cells(I, "A").Value) 'MsgBox I & ": " & Cells(I, "A").Value Print #1, 変数 で試してみてください。

  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.1

トリムしたら「=」から始まって数式となりますが、数式として成り立たないのでエラーになっていると思います。 最初の「=」の前に「'」を入れるとエラは無くなりますので試してみてください。

NuboChan
質問者

補足

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

関連するQ&A