首页 > 解决方案 > 循环遍历可变范围的单元格并用特定字符填充空单元格

问题描述

我正在学习 VBA,并设法从各种来源编译了大量代码,但我发现很难解决我当前的问题。我已经阅读了很多关于使用范围的解决方案,但我无法调整我看到的任何解决方案来解决我的问题。

我想要一个宏,当按下命令按钮时,它将识别一系列单元格中最后使用的行(随着时间的推移,行数会增加),然后检查每一行是否有该范围内的任何空单元格并用如果 A 列的同一行中有数据,则为字母“N”。

我目前有以下代码:

Private Sub CBtnFillAll_Click()
'
' EmptyCharacteristic Macro
' Fills empty cells in the characteristics columns with 'N'
'

Dim Lastrow As Integer
Dim rCell As Range
Dim rRng As Range

Lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
Set rRng = ActiveSheet.Range("$H$3:$S" & Lastrow)

For Each rCell In rRng.Rows
    If rCell.Value = "" And ActiveSheet.Cells(rRng.Row, 1).Value <> "" Then
    rCell.Value = "N"
    End If
Next rCell

End Sub

我正在检查 A 列,因为在我不想包含在该范围内的行中,从 B 列开始还有其他数据。要检查的范围总是在 H 列和 S 列之间。

我目前在以下行中收到“类型不匹配”错误:

If rCell.Value = "" And ActiveSheet.Cells(rRng.Row, 1).Value <> "" Then

请问有人可以帮我解决最后一部分的语法吗?

提前谢谢了。

标签: excelvbarange

解决方案


您的方法是完全正确的,但有一件事会造成问题:

For Each将您的行更改为: For Each rCell in rRng

我会做一些不同的事情,所以这是我的完整代码:

Sub test()
Application.ScreenUpdating = False
Dim Lastrow As Long
Dim rCell As Range
Dim aCell As Range
Dim rRng As Range
Dim Currentrow As Long

Lastrow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
Set rRng = ActiveSheet.Range("H3:S" & Lastrow)

For Each rCell In rRng
    Currentrow = rCell.Row
    Set aCell = ActiveSheet.Range("A" & Currentrow)
    If Not IsEmpty(aCell.Value) And IsEmpty(rCell.Value) Then
    rCell.Value = "N"
    End If
Next
Application.ScreenUpdating = True
End Sub

推荐阅读