(VBA)Trimでエラーが発生するのは?
- 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
- NuboChan
- お礼率65% (1290/1967)
- Excel(エクセル)
- 回答数5
- ありがとう数2
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> =」のようにif文で処理すべきイコール(=)以外の > 文字(文字列)が存在したら教えて下さい。 「+」「-」あたりは駄目なさそうな気がしましたがVBAだと大丈夫でした(手入力だと駄目なので後で編集すると#NAME?のエラーになります) 何が駄目なのかよくわかりませんので Ifで選別せずに 全て Cells(I, "A").Value = "'" & Trim(Cells(I, "A").Value) にしておくというのはどうでしょう。
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17068)
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)
> 以下のようなコードを追加してみましたが > 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
- ベストアンサー率65% (1617/2456)
セルを書き替える必要が無ければ 変数 = Trim(Cells(I, "A").Value) 'MsgBox I & ": " & Cells(I, "A").Value Print #1, 変数 で試してみてください。
- kkkkkm
- ベストアンサー率65% (1617/2456)
トリムしたら「=」から始まって数式となりますが、数式として成り立たないのでエラーになっていると思います。 最初の「=」の前に「'」を入れるとエラは無くなりますので試してみてください。
補足
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 と表示され セルの書式設定も数値になってるんですがどうしてでしょうか?
- ベストアンサー
- その他MS Office製品
- エクセル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
- ベストアンサー
- Visual Basic
- マクロ ランキングの表を作成し、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
- ベストアンサー
- Excel(エクセル)
- 【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
- ベストアンサー
- Excel(エクセル)
- 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
- ベストアンサー
- JavaScript
- 全角空白のTRIMができない・・・
文字列の前後の全角空白を除去するのに trimが使えると思っていたのですが、できませんでした。 (半角なら取れるのですが・・・) select trim(' あいうえお ') from dual; 何とか前後の全角空白を除去したいのですが、 何か方法はないでしょうか。
- ベストアンサー
- Oracle
- 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
- 締切済み
- Visual Basic
- 二つのエラーを発生させたい
ひとつのプロシージャー内で、 二つのエラートラップを仕掛ける事は出来ないのでしょうか? 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
- 締切済み
- Visual Basic
お礼
そうですね。 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