【関数・プロパティ設定をつかう】
10 行のループで複数の文字列を連続分解
11 列のループで複数の文字列を連続分解
12 指定した行番号と列番号のセル番地を取得
13 特定の文字列を指定文字列に置き換える
14 セル列番号を英字の列名に変換
15 文字列の中で特定の文字の位置を取得
16 セルの書体を変更
特定の文字列を指定文字列に置き換える
パイさん
「Excel VBA/マクロのReplace関数を使うと、対象となる文字列式で特定の文字列を
指定した文字列に置き換えた文字列を取得することができます。
Replace関数の構文は、次のようになります。」
パイさん
「Replace関数では、第1引数:Expressionに対象となる文字列式、第2引数:Findに特定の文字列、
第3引数:Replaceに指定した文字列を入れると、戻り値として、置き換えた文字列を取得することができます。
予め、次のようなExcelシートを用意します。」
(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
パイさん
「その通りです。それでは、そのマクロを実行してみましょう。」
ソンくん
「『同じ処理を繰り返す』で、『処理』を、『問題』に、置き換えた文字列『同じ問題を繰り返す』が、
セル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
パイさん
「その通りです。それでは、そのマクロを実行してみましょう。」
ソンくん
「『同じ処理を繰り返す』で、『同じ』を取り除いた文字列『処理を繰り返す』が、セル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
パイさん
「その通りです。それでは、そのマクロを実行してみましょう。」
ソンくん
「ExcelのB列からK列にかけて、1行目のセルから取得した文字列から、
『する』を取り除いた文字列が、2行目のセルに順に書きこまれました。」
パイさん
「このように、Replace関数を使うと、対象となる文字列式で特定の文字列を
指定した文字列に置き換えた文字列を取得することができます。」