例文を使って繰り返し業務を時短

【マクロ・VBA】Replace関数で特定の文字やデータを変換する

エクセル、マクロ、VBAのReplace関数で特定の文字やデータを変換する方法 VBA

Replace関数とは

VBAのReplace関数は、文字列内の文字列を置換するために使用されます。Replace関数には、検索する文字列、置換する文字列、および元の文字列が含まれる文字列の3つの引数が必要です。Replace関数は、次のように構文を持ちます。

Replace(元の文字列, 検索する文字列, 置換する文字列, [開始位置], [置換回数], [比較の種類])

  • 元の文字列:置換される文字列を含む文字列
  • 検索する文字列:置換される文字列
  • 置換する文字列:置換する文字列
  • 開始位置:検索を開始する位置。省略可能で、指定しない場合は1がデフォルト値となります。
  • 置換回数:指定された文字列を置換する回数。省略可能で、指定しない場合はすべてのインスタンスが置換されます。
  • 比較の種類:文字列の比較方法を指定する値。省略可能で、vbBinaryCompare(バイナリ比較)がデフォルト値となります。vbTextCompare(テキスト比較)を指定すると大文字と小文字が区別されなくなります。

例えば、以下のコードは文字列の中の”red”を”green”に置換します。

Dim myString As String
myString = "I have a red car."
myString = Replace(myString, "red", "green")

これにより、「私はグリーン車を持っています」。という文字列が返されます。

選択した範囲のスペースを全て全角に変換する

これは、Excelシート上の特定の列に含まれる半角スペースを全角スペースに置換するエクセルマクロです。

Sub スペースを全角に統一する(RowNum As Long)
Dim c As Range

'ActiveSheet.Cells(1, 2).Value = "全角スペース統一"
'ActiveSheet.Range(Cells(2, 6), Cells(RowNum, 6)).Select
    
    For Each c In Selection
        c.Offset(0, 1).Value = Replace(c.Value, " ", " ")
    Next c

MsgBox "完了"
End Sub

解説

  • 1行目: Subルーチンの開始
  • 2行目: 引数として受け取った行数をRowNumとして宣言します。
  • 3-5行目: ここはコメントアウトされており、実行時には無視されますが、このマクロの目的を説明するためのものです。2行目は、このマクロが何を行うかを示しています。
  • 7-9行目: 選択された範囲の各セルに対して、オフセット値が1である右隣のセルに置換後の値を設定します。
  • 10行目: NextステートメントによりForループから抜けます。
  • 11行目: Subルーチンの終了

Replace関数で文字を置換する_ループ

Sub 文字の置換()

LastRow = Cells(Rows.Count, 1).End(xlUp).Row

For i = 1 To LastRow
    Target = Cells(i, 1)
    Target = Replace(Target, "㈱", "株式会社")
    Target = Replace(Target, "(株)", "株式会社")
    Cells(i, 2) = Target
Next i

MsgBox "完了"
End Sub

Replace関数で半角スペースと全角スペース を削除する_ループ

これは、エクセルシート上のすべての行に対して、スペースと全角スペースを削除し、その変更を同じ行にある隣のセルに反映するエクセルマクロです。

Sub スペースの削除()

LastRow = Cells(Rows.Count, 1).End(xlUp).Row

For i = 1 To LastRow
    Target = Cells(i, 1)
    Target = Replace(Target, " ", "")
    Target = Replace(Target, " ", "")
    Cells(i, 2) = Target
Next i

MsgBox "完了"
End Sub

解説

  • LastRow = Cells(Rows.Count, 1).End(xlUp).Row: エクセルシートの最後の行を特定するためのコードです。
  • For i = 1 To LastRow: ループを開始する前に、エクセルシート内の各行に対して以下のコードが実行されます。
  • Target = Cells(i, 1): Cells(i, 1)で指定されたセルの内容をTarget変数に格納します。
  • Target = Replace(Target, " ", ""): Target内の空白を空文字に置き換えます。つまり、空白を削除します。
  • Target = Replace(Target, " ", ""): Target内の全角空白を空文字に置き換えます。つまり、全角空白を削除します。
  • Cells(i, 2) = Target: 変更されたTargetの値を、元のセルの隣のセルに格納します。
  • Next i: Forループを終了します。
  • MsgBox "完了": マクロの処理が完了したことを示すメッセージを表示します。

Replace関数で改行を削除する_ループ

Sub 改行の削除()

LastRow = Cells(Rows.Count, 1).End(xlUp).Row

For i = 1 To LastRow
    Target = Cells(i, 1)
    Target = Replace(Target, vbLf, "")
    Cells(i, 2) = Target
Next i

MsgBox "完了"
End Sub

コメント

タイトルとURLをコピーしました