マクロでVLookupが出来ません。
マクロでVLookupが出来ません。
A列からE列までデータがあるシート1のA,B,C列の値が全て一致する
シート2の行削除をしたいです。
2000行中500行残るはずのダミーで実験してますが全行削除されてしまいます。
Do Until Cells(Line, 6).Value
→6の部分を1
VLookup(Cells(Line, 6)
→6の部分を1にすれば
500行残ります。ですがこれでは検索値がA列のみの値です。
またそれぞれ1→2、1→3、1→4にしても同じく全行消えこんがらがってます。
シート1のA列のみ検索しているような動きです。どこを修正すればいいのでしょうか?
Sub 行削除()
'シート1→8月シート2→9月
Sheets("8月").Select
Range("F2").Select
ActiveCell.FormulaR1C1 = "=RC[-5]&RC[-4]&RC[-3]"
Selection.AutoFill Destination:=Range("F2:F10000")
Sheets("9月").Select
Range("F2").Select
ActiveCell.FormulaR1C1 = "=RC[-5]&RC[-4]&RC[-3]"
Selection.AutoFill Destination:=Range("F2:F10000")
'検索する対象値があるシート選択
Sheets("9月").Select
'そのシートの検索開始の行数を選択2行目。
Line = 2
'そのシートの検索値の列指定6=F列。セルF2の値が検索したい値。
'その値がなくなったら検索を終了させる.Value = ""を追加。
Do Until Cells(Line, 6).Value = ""
'エラーとなっても次に進む
On Error Resume Next
'検索結果を記入する列を指定。Line7=G列(※1)
'検索する値があるシートとその列を指定
'VLookup(Cells(Line, 6)の部分。6=F列
'検索されるシートと検索範囲を指定
'Worksheets("9月").Range("A2:F10000")→セルA2からセルF10000まで
'検索されたらその行のどの列の値を結果とするのか指定 1=A列
'検索方法指定0=FALSE完全一致。
Cells(Line, 7).Value = Application.WorksheetFunction.VLookup(Cells(Line, 6)_
.Value, Worksheets("8月").Range("A2:F10000"), 1, 0)
'VLOOKUP関数が終了又はエラーが発生したら止まる
On Error GoTo 0
'検索されなかったときの処理
'上記(※1)の部分Line7=G列に値がない
If Cells(Line, 7).Value = "" Then
'Line7=M列に無と表示
Cells(Line, 7).Value = "無"
End If
'2行目から開始なので次の行の値を検索値とする
Line = Line + 1
'検索する値がなくなるまで繰返す
Loop
'1行目が削除されるのを防止セルG1に無とセット
Sheets("9月").Select
Range("G1").Select
ActiveCell.FormulaR1C1 = "無"
'データの最終行の行番号を保持する変数
Dim RwMax As Long
'現在処理中の行番号を保持する変数
Dim Rw As Long
'対象となるシートを選択。
Worksheets("9月").Select
'データの最終行の行番号を取得。
'Count, 7=G列 においてデータが入っている一番下のセルの行番号
RwMax = Cells(Rows.Count, 7).End(xlUp).Row
'最終行から1行目まで繰返し処理。
'行の削除の為下から上へと処理。
For Rw = RwMax To 1 Step -1
'値が無ならそのまま
If Cells(Rw, 7).Value = "無" Then
Cells(Rw, 7).Value = "無"
'無でなかったら行削除
Else
Rows(Rw).Delete
End If
Next Rw
'シート2のF,G列を列削除
Sheets("9月").Select
Columns("F:G").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlToLeft
End Sub
お礼
とても分かりやすい回答をどうもありがとうございました。 vlookup でやることに固執しすぎていました。 勉強になりました。