• ベストアンサー

マクロで半角・全角スペースと改行を削除したい

マクロ初心者です。 BookA-sheetAの「F1:F40」に入っている文字列左右(前後)の半角・全角スペースと、 改行コードを削除したいのですが、書いてみたマクロはエラーが出てしまいます。 trim関数と、改行コード削除はどう組み合わせればよいのでしょうか? 初心者で申し訳ないのですが、ご教示いただければ幸いです。

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

  • ベストアンサー
  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.5

nyan_chikiさん こんにちは。 Trimは文字の途中の空白(全角・半角)は取り除いてくれません。 空白(全角・半角)はReplaceで取り除くことができますが、総合的(半角文字も取り除く)な観点から 単純に1文字ずつチェックした方がプログラムが分かりやすく、また今後のメンテもしやすいと思います。 Sub 文字クリア()  Dim N       As Integer  Dim セル     As Range  Dim チェック文字 As String  Dim 決定文字列  As String    For Each セル In Workbooks("A").Sheets("A").Range("F1:F40")   決定文字列 = ""   For N = 1 To Len(セル)    チェック文字 = Mid(セル, N, 1)    Select Case True     Case チェック文字 = " "                     ' 全角スペース     Case チェック文字 = vbCr                     ' キャリッジリターン     Case チェック文字 = vbLf                     ' ラインフィード     Case LenB(StrConv(チェック文字, vbFromUnicode)) = 1  ' 半角文字,スペース     Case Else      決定文字列 = 決定文字列 & チェック文字    End Select   Next N   セル = 決定文字列  Next End Sub

その他の回答 (5)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

質問では、単に曖昧な文章だけで、どういう状況なのか詳しく説明されていませんから、こちらの勝手な想像の範囲でしかありません。 >文字列左右(前後)の半角・全角スペース は、全角でも半角でも、Trim でも十分なはずです。 >改行コードを削除 Excelのセル内での改行は、Chr(10) = vbLf だけです。 ただし、改行した前後の空白というものがあるなら、その内容は、まったく違ってきます。 Sub TestMacro1()  Dim c As Range  Dim buf As String  Application.ScreenUpdating = False  For Each c In Workbooks("BookA.xls").Worksheets("SheetA").Range("F1:F40")   If VarType(c) = vbString Then    For Each n In Split(c, vbLf)     buf = buf & Trim(n)    Next n    c.Value = buf   End If   buf = ""  Next  Application.ScreenUpdating = True End Sub

  • myRange
  • ベストアンサー率71% (339/472)
回答No.4

またまた間違い、myRangeです。(^^;;; CR、LFはひとつずつしないといけないので。。。 '---------------------------- Sub Test()  Dim R As Range  For Each R In Sheets("SheetA").Range("F1:F40")     R.Value = Trim(Replace(R.Value, vbCr, ""))     R.Value = Trim(Replace(R.Value, vbLf, ""))  Next R End Sub '---------------------- または、一行にして、  R.Value = Trim(Replace(Replace(R.Value, vbCr, ""), vbLf, "")) 以上です。

  • myRange
  • ベストアンサー率71% (339/472)
回答No.3

回答1、myRangeです。 改行コードも、とはっきり書いてありますねぃ。 阿呆な回答、申し訳ないです。 tom04さんの回答がグッドです。 で、参考までに。 他のアプリからもってきたデータであれば 改行がCRかもしれませんので、 CR,LF、両方とも削除した方がいいかも知れません。 '---------------------------- Sub Test()  Dim R As Range  For Each R In Sheets("SheetA").Range("F1:F40")     R.Value = Trim(Replace(R.Value, vbCrLf, ""))  Next R End Sub '---------------------- 以上です。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! こんな感じで良いですかね? BookとSheetは指定していませんので、 操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に貼り付けてマクロを実行してみてください。 Sub test() Dim i As Long For i = 1 To 40 Cells(i, 6).Value = Trim(Replace(Cells(i, 6), vbLf, "")) Next i End Sub 外していたらごめんなさいね。m(__)m

  • myRange
  • ベストアンサー率71% (339/472)
回答No.1

>書いてみたマクロはエラーが出てしまいます。 折角自分で書いたマクロですから、それを提示し、 間違い部分を指摘してもらった方がベターだと思いますが。。。 ま、それは置いといて、、、 Trim関数は、半角、全角に拘わらず前後のスペースを削除してくれますので、 '---------------------------- Sub test()   Dim R As Range   For Each R In Sheets("SheetA").Range("F1:F40")       R.Value = Trim(R)   Next R End Sub '---------------------------- 対象ブックBookAがこのマクロの書いてあるブックでない場合は Workbooks("BookA.xls").Sheets("SheetA").Range("F1:F40") とします。 以上です。

関連するQ&A

専門家に質問してみよう