Изменение диапазона, как если бы вы были переменной - PullRequest
1 голос
/ 01 июля 2019

Допустим, я хотел использовать функцию CountA (RangeFrom: RangeTo), чтобы посмотреть, есть ли какие-либо данные в моем диапазоне ячеек.Можно ли превратить RangeFrom и RangeTo в переменные?Я хочу пойти вниз по листу, отметив поле 20x20, а затем зацикливаясь на следующем поле 20x20 под ним, с ячейками, заполненными текстом между полями.однако я не знаю, как поместить переменные в функцию CountA или даже если это возможно, чтобы я мог пропустить строку, заполненную ячейками, которые полны текста.Если есть способ сделать это, возможно, я неправильно сформулировал его, в результате чего я не нашел никакой информации о нем.Любая помощь будет принята с благодарностью.

В данный момент я перебираю весь свой код, используя строки и столбцы, и просто проверяю каждую ячейку отдельно, я хотел знать, возможно ли использовать CountA с переменной.

Dim RowCounter As Integer
Dim ColumnTraversing As Integer
Dim PopulatedCounter As Integer 
Dim OverallCounter As Integer
RowCounter = 1
PopulatedCounter = 0

While (OverallCounter < 5) 
    ColumnTraversing = 1
    With ThisWorkbook.Worksheets("Test") 
       While (ColumnTraversing <= 6)'column looper

           While (RowCounter <= 40) 'Row Looper
 '
               If (.Cells(RowCounter, ColumnTraversing).Text <> "") Then
                   i = i + 1
               End If
               RowCounter = RowCounter + 1
           Wend

           ColumnTraversing = ColumnTraversing + 1
           RowCounter = 1
        Wend
        If (i > 0) Then 
            PopulatedCounter = PopulatedCounter + 1
        End If
    End With
    OverallCounter = OverallCounter + 1
    i=0
    RowCounter = RowCounter + 2

Wend 

Это перебирает блок 6x40, затем перемещается вниз и выполняет еще одну проверку, заполняется ли он, по сути, делая то же, что и функция CountA, но с несколькими переменными.

1 Ответ

1 голос
/ 02 июля 2019

Исходя из ваших комментариев выше, я предполагаю, что вы хотите перебрать поля, состоящие из 40 строк * 6 столбцов и разделенные одной строкой, содержащей текст.Мы можем зациклить так:

Sub Macro1()
Dim iRow As Integer, PCounter As Integer, numBoxes as Integer
iRow = 1: PCounter = 0: numBoxes = 0 'numBoxes counts the number of Boxes down the sheet

While (numBoxes <= 5) 'Change this to the number of boxes you have
    With ThisWorkbook.Worksheets("Test")
        PCounter = PCounter + WorksheetFunction.CountA(.Range("A" & iRow & ":F" & iRow + 39))
        iRow = iRow + 41 ' 41 = 40 rows of boxes + 1 row of text between bixes
    End With
    numBoxes = numBoxes + 1
Wend

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...