VBA:如何find同一行中的下一个单元格(不包括隐藏的单元格)

我已经使用Vlookup来返回列I中的值,但只有一半的这个列中的单元格返回一个值(另一半是空白的)。 我希望我的macros在所有空的Vlookup单元格中input一个空格,而不是将Vlookup方程保存在单元格中。 我想filer列中的所有值,然后更改空白单元格=“”

我的最终目标是根据单元格是否有值或空白来在每行上发布注释。 如果任何给定行的单元格I为空白,则该行的K列中的单元格将自动填充“已处理未付费”,如果单元格I中存在值,则单元格K将自动填充“已付”

我的问题是,我不知道如何编写一个避免隐藏的单元格(从filter隐藏),只改变filter后显示的单元格的值。 我的列标题在第4行,我的代码如下所示:

Dim Lastrow As Long Lastrow = Cells(Rows.Count, "C").End(xlUp).Row Range("A4:K" & Lastrow).Select Selection.AutoFilter ActiveSheet.Range("$A$4:$K" & Lastrow).AutoFilter Field:=9, Criteria1:="=" Range("I4").Offset(1, 0) = " " Selection.AutoFill Destination:=Range("Range("I4").Offset(1, 0):I" & Lastrow) 

有几种方法可以解决您的问题。 首先,您可以在列K中放入一个公式来检查列I中的单元格是否为空白:

=IF(I4<>"","Paid","Processed Not Yet Paid")

处理尚未付费

或者如果你真的想要一个macros观的解决scheme,只需要逐个细胞并检查值:

 Sub WhoDidntPay() Dim lastrow As Long, i As Long lastrow = Cells(Rows.Count, "C").End(xlUp).Row For i = 4 To lastrow If ActiveSheet.Range("I" & i).Value <> "" And _ ActiveSheet.Range("G" & i).Value = <> 0 Then ActiveSheet.Range("K" & i).Value = "Processed Not Yet Paid" Else ActiveSheet.Range("K" & i).Value = "Paid" End If Next i End Sub 

同样,我build议在你的VLOOKUP增加一个IFERROR ,这样如果你得到错误,或者如果它们真的返回空白,你可以返回一个一致的值,就像上面的例子一样。