Циклически изменяйте диапазон ячеек и заполняйте пустые ячейки определенным символом - PullRequest
0 голосов
/ 13 июня 2018

Я изучаю VBA, и мне удалось собрать много кода из разных источников, но мне трудно решить мою текущую проблему.Я прочитал много решений, касающихся работы с диапазонами, но мне не удалось адаптировать ни одно из тех, что я видел, для решения моей проблемы.

Я хотел бы макрос, который при нажатии кнопки Command, идентифицирует последнюю использованную строку в диапазоне ячеек (которая будет увеличиваться в количестве строк с течением времени), затем проверяет каждую строку на наличие пустых ячеек в диапазоне и заполняет их буквой «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 есть дополнительные данные в строках, которые я не хочу включать вдиапазон.Диапазон проверки всегда будет между столбцами H и S.

В настоящее время я получаю сообщение об ошибке «Несоответствие типов» в следующей строке:

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

Пожалуйста, кто-нибудь может мне помочь ссинтаксис в этой последней части?

Большое спасибо заранее.

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Ваш подход полностью верен, но есть одна проблема, которая создает проблему:

Измените строку 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
0 голосов
/ 13 июня 2018

Я думаю, что это может сделать то, что вы ищете

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...