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

时间:2017-10-09 14:32:35

标签: excel vba excel-vba excel-formula

我已经使用Vlookup返回第I列中的值,但是此列中只有一半的单元格返回了一个值(另一半是空白的)。我喜欢我的宏进入一个空间" "在所有空Vlookup单元格中,而不是将Vlookup方程保持在单元格中。我想要归档列中的所有值,然后将空白单元格更改为=" "

我的最终目标是根据单元格I是值还是空白在每行上发布注释。如果任何给定行的单元格I为空白,则该行的列K中的单元格将自动填充"已处理但未付费",如果单元格I中有值,则单元格K将自动填充& #34;付费和#34;

我的问题是,我不知道如何编写避免隐藏单元格(隐藏在过滤器中)的方程式,并且只更改过滤器后显示的单元格的值。我的列标题位于第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)

1 个答案:

答案 0 :(得分:1)

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

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

Processed Not Yet Paid

或者,如果您真的正在寻找宏观解决方案,请逐个单元格查看并检查值:

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

同样,我建议您在IFERROR添加VLOOKUP,以便在收到错误时,或者如果他们真的返回空白时,您可以返回一致的值,可以像上面的例子一样使用""