プロが教える店舗&オフィスのセキュリティ対策術

マクロ初心者です。

BookA-sheetAの「F1:F40」に入っている文字列左右(前後)の半角・全角スペースと、
改行コードを削除したいのですが、書いてみたマクロはエラーが出てしまいます。

trim関数と、改行コード削除はどう組み合わせればよいのでしょうか?

初心者で申し訳ないのですが、ご教示いただければ幸いです。

A 回答 (6件)

>書いてみたマクロはエラーが出てしまいます。



折角自分で書いたマクロですから、それを提示し、
間違い部分を指摘してもらった方がベターだと思いますが。。。

ま、それは置いといて、、、

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")
とします。
以上です。
    • good
    • 0

こんばんは!


こんな感じで良いですかね?

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
    • good
    • 0

回答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
'----------------------

以上です。
    • good
    • 0

またまた間違い、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, ""))

以上です。
    • good
    • 0

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
    • good
    • 0

質問では、単に曖昧な文章だけで、どういう状況なのか詳しく説明されていませんから、こちらの勝手な想像の範囲でしかありません。



>文字列左右(前後)の半角・全角スペース
は、全角でも半角でも、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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!