サイトについて      連絡先   検索

VBA セルを置換する

はじめに

Excel VBA マクロのセルを置換する方法を紹介します。

Range.Replace メソッドまたは Cells.Replace メソッドでセルの値を置換できます。

フォントなどの書式も置換や検索条件にできます。

  • 目次
    • Replace メソッド
    • セルを置換する
    • 書式を検索条件にする
    • 書式を置換する
    • 指定したシートのセルを置換する

Replace メソッド

Replace(What, Replacement)

Replace(What, Replacement, LookAt, SearchOrder, MatchCase, MatchByte, SearchFormat, ReplaceFormat)

引数「What」検索する文字列やワイルドカードを指定します。
引数「Replacement」置換する文字列を指定します。
引数「LookAt」省略できます。完全に一致するセルを検索するか指定します。
  • xlPart:一部分が一致するセルの検索
  • xlWhole:完全に一致するセルを検索
引数「SearchOrder」省略できます。どの方向に検索するか指定します。
  • xlByRows:行方向
  • xlByColumns:列方向
引数「MatchCase」省略できます。大文字と小文字を区別するか指定します。
  • True:区別する
  • False:区別しない
引数「MatchByte」省略できます。半角と全角を区別するか指定します。
  • True:区別する
  • False:区別しない
引数「SearchFormat」省略できます。書式を検索条件にするか指定します。
  • True:検索条件にする
  • False:検索条件にしない
引数「ReplaceFormat」省略できます。書式を置換するか指定します。
  • True:置換する
  • False:置換しない
戻り値の型ブール型 (Boolean)

置換するしないに関わらず True が返ります。

このメソッドは Excel の置換ダイアログと連動しています。引数を指定すると置換ダイアログのオプションが変更されます。逆に置換ダイアログでオプションを変更すると、引数の既定値がその値になります。引数を省略すると前回の値が引き継がれるため、すべての引数を指定するのをオススメします。

1

セルを置換する

範囲内のセルを置換

Range の引数にセル名を指定すると、そのセルの範囲を置換できます。

セル「A1」~「A2」を置換するにはRange("A1:A2").Replaceを入力します。


Dim b As Boolean
b = Range("A1:A2").Replace("B", "_") ' B を _ に置換する

変更前

2

変更後

3

すべてのセルを置換

すべてのセルを置換するにはCells.Replaceを入力します。


Dim b As Boolean
b = Cells.Replace("B", "_") ' すべてのセルを置換する

ワイルドカード

引数「What」には、次のワイルドカードを使用できます。

パターン 説明 使用例 一致例
*任意の長さの文字"あ*"あ, あい, あいう
?任意の 1 文字"あ?"あい, あか, あき
~ワイルドカードの文字 * ? を検索する"あ~?~*"あ?*

Dim b As Boolean
b = Range("A1").Replace("A*", "_") ' A から始まる文字列を _ に置換する

数式を置換

何も特別な操作は必要ありません。そのまま数式を置換できます。

SUM 関数」を「AVERAGE 関数」に置換するには次のようにします。


Dim b As Boolean
b = Range("A1").Replace("SUM", "AVERAGE")
' =SUM(・・・) が =AVERAGE(・・・) のようになる

書式を検索条件にする

引数「SearchFormat」に True を指定すると、Application.FindFormat プロパティと同じ書式のセルのみ置換対象にできます。

セル「A1」~「A2」の中で文字色が赤のセルを置換するには次のようにします。


' 文字色が赤を検索条件にする
Application.FindFormat.Clear                       ' 前回の書式をクリア
Application.FindFormat.Font.Color = RGB(255, 0, 0) ' 文字色

Dim b As Boolean
b = Range("A1:A2").Replace("B", "_", SearchFormat:=True) ' B を _ に置換する

変更前

4

変更後

5

書式を置換する

引数「ReplaceFormat」に True を指定すると、Application.ReplaceFormat プロパティで設定されている書式に変更します。

文字色を赤に変更するには次のようにします。


' 文字色が赤を検索条件にする
Application.ReplaceFormat.Clear                       ' 前回の書式をクリア
Application.ReplaceFormat.Font.Color = RGB(255, 0, 0) ' 文字色

Dim b As Boolean
b = Range("A1").Replace("*", "", ReplaceFormat:=True) ' 書式のみを変更する

変更前

6

変更後

7

変更される書式は ReplaceFormat に設定した書式のみです。上記のように文字色のみ設定しているときは、文字色だけが変更され、それ以外のフォントサイズなどはそのままです。

書式が変更される条件として引数「What」の文字が存在するセルが対象になります。そのためワイルドカードの*を使用して、すべてのセルが置換されるようにしています。ただし空のセルの書式は変更されません。

指定したシートのセルを置換する

シートを指定するには Worksheets の引数にシート名またはインデックスを指定します。

Sheet1 を指定するにはWorksheets("Sheet1")またはWorksheets(1)を入力します。

sheet1

Dim b As Boolean
' Sheet1 のセル「A1」を置換
b = Worksheets("Sheet1").Range("A1").Replace("B", "_")
b = Worksheets(1).Range("A1").Replace("B", "_")

' Sheet2 のセル「A1」を置換
b = Worksheets("Sheet2").Range("A1").Replace("B", "_")
b = Worksheets(2).Range("A1").Replace("B", "_")

Sheet1 に Range や Cells を入力すると、自身のシートのセルになります。自身を表すMe.が省略されています。


' どちらも同じコード
Range("A1").Value = "Sheet1"
Me.Range("A1").Value = "Sheet1"

標準モジュールに Range や Cells を入力すると、アクティブなシートのセルになります。アクティブシートを表すActiveSheet.が省略されています。


' どちらも同じコード
Range("A1").Value = "アクティブ"
ActiveSheet.Range("A1").Value = "アクティブ"
  • 目次
    • Replace メソッド
    • セルを置換する
    • 書式を検索条件にする
    • 書式を置換する
    • 指定したシートのセルを置換する