Excel VBA(エクセル マクロ) そのG 検索、置換

データを検索し、存在すれば値を代入。
値を別の値に置換する。
面倒な検索作業を一気に解決。

VLOOKUP関数で値を検索し、その行にある値を取り込むことを行ったが、今度は以下の操作をさせる。

@列の値について、順番に他シートを検索し、値があればセルに値を入力する。
A列の値について、順番に他シートを検索し、値があれはセルの値を別の値に変更(置換)する。

検索といえばFIND関数、MATCH関数、置換といえばReplace関数を使用するが、VLOOKUP関数で代用できるので、そちらでプログラムを組んだ。

@列の値について、順番に他シートを検索し、値があればセルに値を入力する。

Line1 = 2
Do Until Cells(Line1, 4).Value = ""
On Error Resume Next
Cells(Line1, 10).Value = Application.WorksheetFunction.VLookup(Cells(Line1, 4).Value, Worksheets("データ1").Range("D3:I47"), 1, 0)
On Error GoTo 0
If Cells(Line1, 10).Value <> "" Then
Cells(Line1, 10).Value = "対象品"
End If
Line1 = Line1 + 1
Loop


4列目の2行目から値がなくなる行まで、処理を続ける。
Do Until 〜 Loop構文を使用する。

Line1 = 2
Do Until Cells(Line1, 4).Value = ""
Line1 = Line1 + 1
Loop


VLOOKUP関数でCells(Line1, 4).Valueの値がシート:データ1のD3:I47の範囲であるかどうかを検索し、あれば、1行目の値をCells(Line1, 10).Valueに返す。
VLOOKUP関数は値が見つからないとエラーで止まってしまうため、エラーにならないようにOn Error Resume Nextをつける。
VLOOKUP関数が終われば、構文にエラーがあれば止まるよう戻すため、On Error GoTo 0をつける。

On Error Resume Next
Cells(Line1, 10).Value = Application.WorksheetFunction.VLookup(Cells(Line1, 4).Value, Worksheets("データ1").Range("D3:I47"), 1, 0)
On Error GoTo 0


VLOOKUP関数で検索した値Cells(Line1, 10).Valueが存在すれば、Cells(Line1, 10).Valueに対象品と代入する。存在しなければ空白のまま。

If Cells(Line1, 10).Value <> "" Then
Cells(Line1, 10).Value = "対象品"
End If

以上で検索が可能となった。

MATCH関数を使用すればいいのではと思ったが、時間なくテストできなかったため、VLOOKUP関数とした。

基本がDo until構文で複数行にわたって検索をかけたかったため、このような構文と為った。

次は置換を行う予定。

忍者Admaxのテキスト広告で収入UP!

実践!ExcelデータベースTOP