【関数・プロパティ設定をつかう】

10 行のループで複数の文字列を連続分解

11 列のループで複数の文字列を連続分解

12 指定した行番号と列番号のセル番地を取得

13 特定の文字列を指定文字列に置き換える

14 セル列番号を英字の列名に変換

15 文字列の中で特定の文字の位置を取得

16 セルの書体を変更

特定の文字列を指定文字列に置き換える

パイさん

「Excel VBA/マクロのReplace関数を使うと、対象となる文字列式で特定の文字列を

 指定した文字列に置き換えた文字列を取得することができます。

 Replace関数の構文は、次のようになります。」

Img7_4_41

パイさん

Replace関数では、第1引数:Expressionに対象となる文字列式、第2引数:Findに特定の文字列、

 第3引数:Replaceに指定した文字列を入れると、戻り値として、置き換えた文字列を取得することができます。

 予め、次のようなExcelシートを用意します。」

Img7_4_42

(1) 特定の文字列を指定文字列に置き換え

パイさん

「Excelの1行目の右端セルの最大列番号『11』を取得した後、Excelの1行目11列目のセル:Cells(1, 11)の

 文字列『同じ処理を繰り返す』で、『処理』を、『問題』に、置き換えた文字列を取得して、

 2行目11列目のセル:Cells(2, 11)に格納してみましょう。

 最大列を変数『最大列』としてから、プログラムコードを考えてみましょう。」

ソンくん

「『最大列』を整数型として変数宣言。

 Dim 最大列 As Integerと記述します。


 先ず、Excelの1行目の文字が入っているセルの最大列を取得します。

 最大列 = Range("IV1").End(xlToLeft).Column


 Replace関数の第1引数:Expressionに対象となる文字列式としてCells(1, 最大列).Value、

 第2引数:Findに特定の文字列として『処理』、第3引数:Replaceに指定した文字列として『問題』を入れてから、

 戻り値として、置き換えた文字列を取得し、Cells(2, 最大列) に格納します。

 Cells(2, 最大列).Value = Replace(Cells(1, 最大列).Value, "処理", "問題")

 これで良いのでしょうか。」

Sub Replace関数1()

 Dim 最大列 As Integer  '最大列

 

 ' 最大列の取得

 最大列 = Range("IV1").End(xlToLeft).Column

 ' Replace関数_『処理』を『問題』に置換

 Cells(2, 最大列).Value _

   = Replace(Cells(1, 最大列).Value, "処理", "問題")

End Sub

パイさん

「その通りです。それでは、そのマクロを実行してみましょう。」

Img7_4_44

ソンくん

「『同じ処理を繰り返す』で、『処理』を、『問題』に、置き換えた文字列『同じ問題を繰り返す』が、

 セルK2に書きこまれました。」


(2) 特定の文字列を取り除く

パイさん

「次に、Excelの1行目の右端セルの最大列番号『11』を取得した後、

 Excelの1行目11列目のセル:Cells(1, 11)の文字列『同じ処理を繰り返す』で、

 『同じ』を取り除いた文字列を取得して、2行目11列目のセル:Cells(2, 11)に格納してみましょう。

 『同じ』を取り除くということは、『同じ』を『』(ブランク:値が存在しないこと)に置き換えるということです。

 『同じ処理を繰り返す』で、『同じ』を、『』に、置き換えた文字列を取得して、

 2行目11列目のセル:Cells(2, 11)に格納してみましょう。

 最大列を変数『最大列』としてから、プログラムコードを考えてみましょう。」

ソンくん

「『最大列』を整数型として変数宣言。

 Dim 最大列 As Integerと記述します。


 先ず、Excelの1行目の文字が入っているセルの最大列を取得します。

 最大列 = Range("IV1").End(xlToLeft).Column


 Replace関数の第1引数:Expressionに対象となる文字列式としてCells(1, 最大列).Value、

 第2引数:Findに特定の文字列として『同じ』、第3引数:Replaceに指定した文字列として『』を入れてから、

 戻り値として、置き換えた文字列を取得し、Cells(2, 最大列) に格納します。

 Cells(2, 最大列).Value = Replace(Cells(1, 最大列).Value, "同じ", "")

 これで良いのでしょうか。」

Sub Replace関数2()

 Dim 最大列 As Integer  '最大列

 

 ' 最大列の取得

 最大列 = Range("IV1").End(xlToLeft).Column

 ' Replace関数_『同じ』を『』に置換

 Cells(2, 最大列).Value _

   = Replace(Cells(1, 最大列).Value, "同じ", "")

End Sub

パイさん

「その通りです。それでは、そのマクロを実行してみましょう。」

Img7_4_46

ソンくん

「『同じ処理を繰り返す』で、『同じ』を取り除いた文字列『処理を繰り返す』が、セルK2に書きこまれました。」


(3) 列のループで特定の文字列を取り除く

パイさん

「それでは、Excelの1行目の文字が入っているセルの最大列を取得した後、最小列から最大列にかけて、1行目の

 セルから取得した文字列から、『する』を取り除いた文字列を取得して、2行目のセルに順に格納してみましょう。

 最小列:『最小列』を『2』列、列を変数『Cm』、最大列を変数『最大列』としてから、プログラムコードを考えて

 みましょう。」

ソンくん

「『最小列』を『2』として定数宣言、『Cm』・『最大列』を整数型として変数宣言。

 Const 最小列 = 2

 Dim Cm As Integer

 Dim 最大列 As Integerと記述します。


 先ず、Excelの1行目の文字が入っているセルの最大列を取得します。

 最大列 = Range("IV1").End(xlToLeft).Column


 それから、Replace関数の第1引数:Expressionに対象となる文字列式としてCells(1, Cm).Value、

 第2引数:Findに特定の文字列として『する』、第3引数:Replaceに指定した文字列として『』を入れてから、

 戻り値として、置き換えた文字列を取得し、Cells(2, Cm) に格納します。

 Cells(2, Cm).Value = Replace(Cells(1, Cm).Value, "する", "")

 このプログラムコードの集まりを【ブロックE】とします。


 それから、Excelの最小列:『最小列』(2列目)から最大列:『最大列』(11列目)にかけて、

 各列の処理【ブロックE】ループ処理で実行します。

 For Cm = 最小列 To 最大列

   【ブロックE】

 Next Cm

 と記述します。」

Sub Replace関数のループ()

 Const 最小列 = 2

 Dim Cm As Integer

 Dim 最大列 As Integer

 

 最大列 = Range("IV1").End(xlToLeft).Column

 For Cm = 最小列 To 最大列

   Cells(2, Cm).Value = Replace(Cells(1, Cm).Value, "する", "")

 Next Cm

End Sub

パイさん

「その通りです。それでは、そのマクロを実行してみましょう。」

Img7_4_48

ソンくん

「ExcelのB列からK列にかけて、1行目のセルから取得した文字列から、

 『する』を取り除いた文字列が、2行目のセルに順に書きこまれました。」


パイさん

「このように、Replace関数を使うと、対象となる文字列式で特定の文字列を

 指定した文字列に置き換えた文字列を取得することができます。」