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

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

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

不要な空白(半角、全角)を削除して  テキストに書き出すマクロを作成しましたが下記のコードでエラーが出ます。  原因は何でしょうか ? Cells(I, "A").Value = Trim(Cells(I, "A").Value) I=2の時 エラー 1004 「アプリケーション定義またはオブジェクト定義のエラーです。」 ----------------------------------------------------- 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\Nobu\Desktop\My_text.txt" For Output As #1 For I = 1 To EndLow 'Cells(I, "B").Value = Len(Cells(I, "A").Value) Cells(I, "A").Value = Trim(Cells(I, "A").Value) 'MsgBox I & ": " & Cells(I, "A").Value Print #1, Cells(I, "A").Value Next '開いたファイルを閉じる Close #1 '終わったのが分かるようにメッセージを出す MsgBox "完了!" End Sub

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1617/2456)
回答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/17068)
回答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
  • ベストアンサー率65% (1617/2456)
回答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
  • ベストアンサー率65% (1617/2456)
回答No.2

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

  • kkkkkm
  • ベストアンサー率65% (1617/2456)
回答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

  • VBAで実行時エラー'13': がでます

    初歩の初歩ですいません。 VBAで Dim A As Integer Dim B As Integer Dim C As Integer Dim gokei As Integer For i = 8 To 70 A = Cells(i, 4).Value B = Cells(i, 5).Value C = Cells(i, 6).Value goukei = A + B + C Cells(i, 7) = goukei Next i としていますが A = Cells(i, 4).Value のところで今使っているシートだと止まってしまいます。 新規でワークシートを使って仮に数字を代入すると普通に動きます。 今使っているシートもセル内には =100 と入力して 100 と表示され セルの書式設定も数値になってるんですがどうしてでしょうか?

  • エクセルVBAでの質問

    お世話になります。 エクセルVBAのプログラムコードをコピーし、 エクセルの通常シートへ貼り付けした際、 「’」で始まる説明分または注釈をプロシージャ画面の 様に色づけしたいと思い下記の様なコードを書きました。 しかし、VBA実行後、元のコードが行によって、空白 から始まって行の途中に「’」がある場合など、 少し手前の文字から着色されたりしていました。 何故なのでしょうか。 どこがおかしいのでしょうか。 空白が半角か全角になっている為にこのような現象に なっているのでしょうか。 しかしその解決方法が分からなく、 どなたかご教授頂きたく宜しくお願い致します。   記 Sub サンプル() Dim x As Integer Dim y As Integer Dim z As Integer Dim myrng As String Dim zz As Integer For y = 1 To 10 For x = 1 To Cells(Rows.Count, y).End(xlUp).Row If InStr(Trim(Cells(x, y).Value), "'") = 1 Then Cells(x, y).Font.ColorIndex = 10 ElseIf InStr(Trim(Cells(x, y).Value), "'") = 0 Then Else z = InStr(Trim(Cells(x, y).Value), "'") myrng = Cells(x, y) zz = Len(myrng) Cells(x, y).Characters(z, zz).Font.ColorIndex = 10 End If Next x Next y End Sub

  • マクロ ランキングの表を作成し、HTML出力 

    A1、B1、C1…にテキストを入れます。 A1 スペシャル B1 (空白) C1 (空白) A2 スズキ B2 2000 C2 1000 A3 タナカ B3 1000 C3 800  ・  ・ 下記のプログラムはセルに空白があるとそこでループが止まってしまいます。 セルの空白で止まるのではなく、最終尾の行に全て空白があると判断した時点でループをストップしたいのです。 上記ではB1とC1に空白があり、B1で止まってしまいます。 アドバイスをお願いします。 Sub convertHTML()  Dim ws As Worksheet  Dim htmlFile As String  Dim i As Long  Dim LineData As String    Set ws = ThisWorkbook.Worksheets(1)  htmlFile = ActiveWorkbook.Path & "\Sample.html"  Open htmlFile For Output As #1    i = 1  Do While ws.Cells(i, 1).Value <> ""   LineData = "<div>" & ws.Cells(i, 1).Value & "</div>" & vbCrLf   LineData = LineData & "<p>" & ws.Cells(i, 2).Value & "</p>" & vbCrLf   LineData = LineData & "<span>" & ws.Cells(i, 3).Value & "</span>" & vbCrLf   Print #1, LineData   i = i + 1  Loop  Close #1  MsgBox htmlFile & "に書き出しました" End Sub

  • 【VBA】MsgBoxの文字数について

    下記のコードを使い、MsgBoxに 各シートの合計値と、それらの総計 を表示しますが、シート数が膨大の時は、メッセージボックスに収まり切りません。 対処法をご教示願います。 Dim i As Long Dim mMsg As String: mMsg = "" Dim mSum As Long For i = ActiveSheet.Index To Sheets.Count mMsg = mMsg & Sheets(i).Name & " : " & Sheets(i).Cells(Rows.Count, "A").End(xlUp).Offset(0, 4).Value & vbCrLf mSum = mSum + Sheets(i).Cells(Rows.Count, "A").End(xlUp).Offset(0, 4).Value Next Sheets(1).Select MsgBox mMsg & "総計 : " & mSum, vbInformation

  • VBA グループ化について

    VBAで、取り込んだ本のリストをグループ化して見やすくしようと思ったのですが、@のついているところでエラーが出ます。 (あるところからとってきたVBAを自分で付け加えたものです。) A列に著者、B列に本のタイトルが書かれているリストで、完成図としては著者の毎にグループがされ、著者のグループを開くと、本のタイトルのグループが出てくるかたちを目指しています。 エラー内容は以下の通りです。 実行時エラー 1004 アプリケーション定義またはオブジェクト定義のエラーです。 どなたか教えて下さい。 Sub TEST() Dim wri1 As Long Dim wri2 As Long Dim wri As Long Dim com1 As Long Dim com2 As Long Dim com As Long Dim strFORMULA As String ActiveCell.Activate com = 1 Do While Cells(com, 2).Value <> "END" com1 = com com = com + 1 Do While Cells(com, 2).Value = Cells(com1, 2).Value com = com + 1 Loop com2 = com - 1 Rows(com).Insert Cells(com, 2).Value = Cells(com1, 2).Value Cells(com, 1).Value = Cells(com1, 1).Value Rows(com1 & ":" & com2).Group com = com + 1 Loop wri = 1 Do While Cells(wri, 1).Value <> "END" wri = wri wri = wri + 1 @@@ Do While Cells(wri, 1).Value = Cells(wri1, 1).Value wri = wri + 1 Loop wri2 = wri - 1 Rows(wri).Insert Cells(wri, 1).Value = Cells(wri1, 1).Value Rows(wri1 & ":" & wri2).Group wri = wri + 1 Loop End Sub 

  • 全角空白のTRIMができない・・・

    文字列の前後の全角空白を除去するのに trimが使えると思っていたのですが、できませんでした。 (半角なら取れるのですが・・・) select trim(' あいうえお ') from dual; 何とか前後の全角空白を除去したいのですが、 何か方法はないでしょうか。

  • VBAで教えてください。

    データがないときはExitSubしたいのですが、何処に記述すれば良いでしょうか? Sub 削除() Dim i As Long If MsgBox("データを削除します。よろしいですか?", vbYesNo) = vbYes Then Sheets("リスト").Select i = 5 Do Until i = 200 If Cells(i, 5).Value = Sheets("マスタ登録").Range("D5") Then Cells(i, 1).EntireRow.Delete End If i = i + 1 Loop Else Exit Sub End If End Sub

  • Visual Basic Editorの実行時エラーのことについて教えてください。 

    Visual Basic超初心者ですがよろしくお願いします。 標準モジュールで入力したものを実行すると、必ず「実行時エラー "53": ファイルが見つかりません。」と表示してしまいます。 入力したものはミスはないと思うのですが、何回やってもエラーが出てしまいます。 わかる方いましたら教えてください。 入力したものを一応載せときます↓ Sub list_file() Dim numfile As Long Dim i As Long With Application.FileSearch .NewSearch .LookIn = Range("b1").Value .Filename = Range("b2").Value .SearchSubFolders = Range("b3").Value If .Execute() > 0 Then file_count = .FoundFiles.Count MsgBox file_count & "files exis" Worksheets.Add after:=Worksheets("sheet1") Range("a1").Value = "filename" Range("b1").Value = "date" Range("c1").Value = "size" For i = 1 To file_count Cells(i + 1, 1).Value = .FoundFiles(i) Cells(i + 1, 2).Value = FileDateTime(.FoundFiles(i)) Cells(i + 1, 3).Value = FileLen(.FoundFiles(i)) Cells(i + 1, 2).Value = Hex(Cells(i + 1, 3).Value) Next Columns("a:c").AutoFit Else MsgBox "no file exists" End If End With End Sub

  • 二つのエラーを発生させたい

    ひとつのプロシージャー内で、 二つのエラートラップを仕掛ける事は出来ないのでしょうか? Sub エラーが発生した時にエラーが発生したら() Dim i As Long On Error GoTo Err1 i = "a" Exit Sub Err1: MsgBox "Err1のエラー: " & Err.Description On Error GoTo Err2 i = "b" Exit Sub Err2: MsgBox "Err2のエラー: " & Err.Description End Sub を行うと、 i = "b" で2回目のエラーが発生した時は、 実行時エラーになってしまいます。 i = "b" で2回目のエラーが発生した時に、 「Err2のエラー: 型が一致しません。」 と表示させるにはどうすればいいでしょう? Sub エラーが発生した時にエラーが発生したら() Dim i As Long On Error GoTo Err1 On Error GoTo Err2 i = "a" Exit Sub Err1: MsgBox "Err1のエラー: " & Err.Description i = "b" Exit Sub Err2: MsgBox "Err2のエラー: " & Err.Description End Sub にすると、 i = "a" のエラーで、 「Err2のエラー: 型が一致しません。」 へ移動してしまいます。

  • msgboxの表示

    A列の値とC列の値をMsgboxに表示するにはどうしたらいいのでしょうか?C列で一番高い商品とその品名A列を表示させたいのですが・・ Sub hinmei() Dim i As Long For i = 2 To Range("C65535").End(xlUp).Row Dim x As Long Dim a As Long x = Cells(i + 1, 5) If Cells(i, 5).Value < x Then a = x End If Next MsgBox a End Sub

専門家に質問してみよう