VBA – 试图validation两列,并在一个值中缺less值时resize

我有需要find如果让我们说COL A有一个从COL B缺less的值,我想find它是否缺less,然后删除和上移行,结构看起来像这样

ID | INFO1 | INFO2 | INFO3 ------------ ID2 | INFO1 | INFO2 | INFO3 50 | XXXXX | XXXXX | XXXXX ------------ 50 | XXXXX | XXXXX | XXXXX 51 | XXXXX | XXXXX | XXXXX ------------ 51 | XXXXX | XXXXX | XXXXX 52 | XXXXX | XXXXX | XXXXX ------------ 52 | XXXXX | XXXXX | XXXXX 53 | XXXXX | XXXXX | XXXXX ------------ 53 | XXXXX | XXXXX | XXXXX 54 | XXXXX | XXXXX | XXXXX ------------ 55 | XXXXX | XXXXX | XXXXX 55 | XXXXX | XXXXX | XXXXX ------------ 56 | XXXXX | XXXXX | XXXXX 

并开始我的问题,到目前为止我已经pipe理这个:

 Sub Teste() Dim rngA As Range Set rngA = Range("F2") Set rngB = Range("H2") While rngA.Value <> "" Columns("H:H").Select Set Cell = Selection.Find(What:=rngA.Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False) If Cell Is Nothing Then rngA.Value = "" Set rngA = rngA.Offset(1) Else Set rngA = rngA.Offset(1) End If Wend While rngB.Value <> "" Columns("F:F").Select Set Cell = Selection.Find(What:=rngB.Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False) If Cell Is Nothing Then rngB.Value = "" Set rngB = rngB.Offset(1) Else Set rngB = rngB.Offset(1) End If Wend End Sub 

这设法findID2上缺less什么值,并将其replace为空值,但是我想删除缺less的ID | INFO1 | INFO2 | INFO3删除他们,并将行,并为我的生活,我无法find如何做到这一点。 (代码不反映这个例子)

有人有一个想法如何做到这一点?

你的例子并不完全匹配代码 – 看起来你想删除ID列和右边的三列(所以ID列的列是分开的),但在你的代码ID列是F和H.我的代码如下,我假设你想要删除FG和HI。

 Dim searchColumn As Range Dim rngA As Range Dim i As Integer For i = 1 To 2 If i = 1 Then Set rngA = Range("f2") Set searchColumn = Range("h:h") Else Set rngA = Range("h2") Set searchColumn = Range("f:f") End If While rngA.Value <> "" searchColumn.Select Set Cell = Selection.Find(What:=rngA.Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False) If Cell Is Nothing Then Set rngA = rngA.Offset(1) Range(rngA.Offset(-1), rngA.Offset(-1, 1)).Delete xlUp Else Set rngA = rngA.Offset(1) End If Wend Next 

如果您需要删除其他列,请使用.Delete更改该行 – 该行中的1表示要删除的ID列右侧的列数。