循环可变范围的单元格并填充具有特定字符的空单元格

时间:2018-06-13 10:40:06

标签: excel vba range

我正在学习VBA,并且已经设法从一系列来源编译了大量代码,但我发现很难解决我当前的问题。我已经阅读了很多关于使用范围的解决方案,但是我无法适应我见过的任何解决方案。

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

我目前有以下代码:

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列中有从行B开始的其他数据,我不想包含在该范围内。要检查的范围始终在列H和S之间。

我目前正在进行类型不匹配&#39;以下行中的错误:

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

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

非常感谢提前。

2 个答案:

答案 0 :(得分:1)

您的方法完全正确,但有一件事会产生问题:

将您的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

答案 1 :(得分:0)

我认为这可能会做你想要的事情

Sub CBtnFillAll_Click()
' EmptyCharacteristic Macro
' Fills empty cells in the characteristics columns with 'N'
'
    Dim rCell   As Range, _
        rRng    As Range

    For Each rRng In ActiveSheet.UsedRange.Columns("A:A").Cells
        If IsEmpty(rRng) Then GoTo NextRow
        For Each rCell In rRng.Offset(0, 7).Resize(1, 12)
            If IsEmpty(rCell) Then rCell.Value = "N"
        Next rCell
NextRow:
    Next rRng

End Sub

如果您想省略工作表的前两行,则可以更改

For Each rRng In ActiveSheet.UsedRange.Columns("A:A").Cells

For Each rRng In ActiveSheet.[A3].Resize(ActiveSheet.UsedRange.Rows.Count-2)