- ベストアンサー
マクロで半角・全角スペースと改行を削除したい
マクロ初心者です。 BookA-sheetAの「F1:F40」に入っている文字列左右(前後)の半角・全角スペースと、 改行コードを削除したいのですが、書いてみたマクロはエラーが出てしまいます。 trim関数と、改行コード削除はどう組み合わせればよいのでしょうか? 初心者で申し訳ないのですが、ご教示いただければ幸いです。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
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)
質問では、単に曖昧な文章だけで、どういう状況なのか詳しく説明されていませんから、こちらの勝手な想像の範囲でしかありません。 >文字列左右(前後)の半角・全角スペース は、全角でも半角でも、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)
またまた間違い、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)
回答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)
こんばんは! こんな感じで良いですかね? 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)
>書いてみたマクロはエラーが出てしまいます。 折角自分で書いたマクロですから、それを提示し、 間違い部分を指摘してもらった方がベターだと思いますが。。。 ま、それは置いといて、、、 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") とします。 以上です。