Как я могу повторить код через все данные? - PullRequest
0 голосов
/ 21 января 2019

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

Если я продолжу с ActiveCell.Offset(-1,-4) после кода, это ошибка, и я не знаю, как повторить код во всех строках.

Любая помощь будет принята с благодарностью.

Sub SelectRowsWithNoBlanks()
    Range("A2").Select

    If ActiveCell.Offset(0, 0).Value <> "" And ActiveCell.Offset(0, 1) <> "" And ActiveCell(0, 1) <> "" And ActiveCell(0, 1) <> "" Then
        Range(ActiveCell, Cells(ActiveCell.Row, ActiveCell.Column + 4)).Select
    End If
End Sub

1 Ответ

0 голосов
/ 21 января 2019

@ SiddharthRout Поскольку у меня пока нет доступа к данным, я не могу сказать. Но я думал, что расширение кода для большего количества столбцов позже не будет проблемой. Таким образом, в коде, который я написал сейчас, я проверял столбцы A-D, но я думал, что могу легко добавить «проверку» для большего количества столбцов, если это необходимо - Анна фон Блон 43 секунды назад

В этом случае, вот пример кода.

Logic

  1. При упоминании @ Pᴇʜ избегать использования .Select. Работа с объектами.
  2. Найдите последнюю строку и переберите строки. Чтобы найти последнее, что вы, возможно, захотите увидеть Это
  3. Один из способов (который я использую) состоит в подсчете количества ячеек, заполненных с помощью Application.WorksheetFunction.CountA. Таким образом, если это столбцы от A до D, тогда должно быть 4 ячейки, чтобы считать «строку» заполненной. Точно так же для Cols от A до E, должно быть заполнено 5 ячеек, чтобы считать «строку» заполненной и так далее.

Код

Я прокомментировал код. Так что, если у вас есть проблемы с пониманием этого, дайте мне знать.

Option Explicit

Sub SelectRowsWithNoBlanks()
    Dim ws As Worksheet
    Dim lRow As Long, i As Long
    Dim myRange As Range, rng As Range

    '~~> Change this to the relevant sheet
    Set ws = Sheet1

    With ws
        '~~> Find the last row in Col A
        lRow = .Range("A" & .Rows.Count).End(xlUp).Row

        '~~> Loop through the rows
        For i = 2 To lRow
            '~~> Change this as applicable
            Set rng = .Range("A" & i & ":D" & i)

            '~~> Check if the range is completely filled
            If Application.WorksheetFunction.CountA(rng) = rng.Columns.Count Then
                '~~> Store the range in a range object
                If myRange Is Nothing Then
                    Set myRange = rng
                Else
                    Set myRange = Union(myRange, rng)
                End If
            End If
        Next i
    End With

    'If Not myRange Is Nothing Then Debug.Print myRange.Address

    '~~> Check if any filled rows were found
    If Not myRange Is Nothing Then
        With myRange
            '
            '~~> Do what you want with the range
            '
        End With
    Else
        MsgBox "No filled rows were found"
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...