VBA:如何找到同一行中的下一个单元格(不包括隐藏单元格)
Posted
技术标签:
【中文标题】VBA:如何找到同一行中的下一个单元格(不包括隐藏单元格)【英文标题】:VBA: How to find the next cell in the same row (excluding hidden cells) 【发布时间】:2017-10-09 14:32:35 【问题描述】:我使用 Vlookup 返回第一列中的值,但是该列中只有一半的单元格返回了值(另一半为空白)。我希望我的宏在所有空的 Vlookup 单元格中输入一个空格“”,而不是将 Vlookup 方程保留在单元格中。我想归档列中的所有值,然后将空白单元格更改为 =“”
我的最终目标是根据单元格 I 是否具有值或空白在每一行上张贴注释。如果任何给定行的单元格 I 为空白,则该行 K 列中的单元格将自动填写“已处理尚未支付”,如果单元格 I 中有值,则单元格 K 将自动填写“已支付”
我的问题是我不知道如何编写一个方程来避免隐藏单元格(从过滤器中隐藏)并且只更改过滤器后显示的单元格的值。我的列标题在第 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)
【问题讨论】:
您为什么不将原始的VLOOKUP
公式包装在IFERROR
中以获得您想要的空间?类似=IFERROR(VLOOKUP(A1,B:C,2,FALSE),"")
目前还不太清楚你做什么或为什么这样做,或者你的最终目标是什么。您能否重新写下您的问题以更清楚?
Iferror 函数不适用于我根据单元格是空白还是有值自动填充单元格的最终目标。我已经更新了我的问题以包括我的最终目标。请让我知道是否有更好的方法来解决这个问题。谢谢!
【参考方案1】:
有几种方法可以解决您的问题。首先,您可以在 K 列中输入一个公式来检查 I 列中的单元格是否为空白:
=IF(I4<>"","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
再次,我建议在您的VLOOKUP
s 中添加一个IFERROR
,这样如果您遇到错误,或者如果它们真的返回空白,您可以返回一个一致的值,可以使用""
就像在上面的例子。
【讨论】:
非常感谢!你的代码完美地解决了我的问题 有没有一种方法可以在 If 语句的第一部分添加另一个条件,即 I 中的值是“”并且 G 中的值是 0,然后将“Paid”放入K 列? 感谢您的耐心等待,因为我是 VBA 的初学者,这会返回一个错误。我在上一条评论中写错了目标。如果 I 列中存在一个值且 G 列中的值为 0(这与 Else 段有关),我希望在 K 列中返回“Paid”。再次感谢您的帮助! @oryan5000 不用担心。我再次编辑了代码。只要 I 列不为空 (""
),并且 G 列中有 0,K 列就会显示“已付费”
由于某种原因,第一列中没有创建空白。从中提取信息的表有一个与我的参考匹配的数字,只是请求返回的列有对某些人来说什么都没有。有没有办法根据这些信息更改 IfError 语句?以上是关于VBA:如何找到同一行中的下一个单元格(不包括隐藏单元格)的主要内容,如果未能解决你的问题,请参考以下文章