Определите начало и конец диапазона, а затем переберите все вхождения этого диапазона - PullRequest
0 голосов
/ 30 октября 2019

У меня есть вывод из старой системы, которая перечисляет сотни страниц. Они сгруппированы по датам. Поскольку это старая система, она выводит выходные данные, и я импортирую в Excel все в столбце A.

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

Так что мой источникis: Обратите внимание на дату Вт 10 сентября 08:52:40 2019 - это дата запуска отчета и не требуется.

Дата вызова: 08/01/2019

6: 47 0:01:0435905 34312
7:19 0:04:50 33365 34312
7:16 0:12:58 36050 34312
7:45 0:16:06 33206 34312
8:52 0:17: 48 33649 34312
9:35 0:02:38 33160 34312
9:29 0:10:10 32735 34312
9:43 0:00:12 34311 34312
9:40 0: 04: 16 33008 34312
10:19 0:09:18 33805 34312
10:25 0:06:00 32735 34312

вт 10 сентября 08:52:40 2019 Расположение: страница2

Дата звонка: 08/01/2019 (продолжение)

7: 19 0:04:50 33365 34312
7:16 0:12:58 36050 34312
7:45 0:16:06 33206 34312
8:52 0:17:48 33649 34312
9:35 0:02:38 33160 34312
9:29 0:10:10 32735 34312
9:43 0:00:12 34311 34312
9:40 0:04:16 33008 34312
10:19 0:09:18 33805 34312
10:25 0:06:00 32735 34312

вт 10 сентября 08:52:40 2019 Место: страница 3

Дата звонка: 08/03/2019

7: 21 0:02:40 37332 34312
7:46 0:00:38 32075 34312
7:49 0:08: 02 37606 34312
8:52 0:02:24 33420 34312
8:58 0:01:40 33519 34312
8:59 0:02:20 36039 34312
9:13 0: 00: 42 35956 34312
9:09 0:04:58 32891 34312
9:19 0:00:18 35338 34312
9:24 0:01:44 33546 34312

Вт 10 сентября 08:52:40 2019 Местоположение: Страница 4

Я думаю, что логика установлена ​​две переменные startRow и endRow с startRow = "Call Date:" и endRow = "Location:"

Затем, используя цикл foreach next, просматривайте каждый диапазон между startRow и endRow, и countif содержит ":"

Проблема, с которой я столкнулся, состоит в том, как мне сначала найти начало диапазона и конец диапазона, но этот диапазон может повторяться много раз. Так думал «цикл для каждого следующего» ??

````vba
  Set lastRow = .Cells.Find("Location:", .Cells(1, 1), xlValues, xlPart, , xlPrevious)
  Set firstRow = .Cells.Find("Call Date:", .Cells(1, 1), xlValues, xlPart, , xlPrevious)

For Each dateRange In ActiveSheet.Range("firstRow:lastRow")  //not sure how to set and loop through each occurrence of first & last row
COUNTIF(firstRow:lastRow,":") //count the rows containing ":"
Next dateRange

Я хотел бы, чтобы вывод был (в столбце C):

Дата звонка: 08/01/2019 19 звонков //помните эту дату, и другие могут занимать несколько страниц

Дата звонка: 08/02/2019 10 звонков

Дата звонка: 08/03/2019 6 звонков

и т. д. .

Большое спасибо!

1 Ответ

0 голосов
/ 30 октября 2019

Как я уже говорил, для каждой строки, подсчитывающей все строки между интересующими вас строками, будет мой путь:

Sub counter()
Dim cel As Range
Dim i As Integer
Dim lastr As Integer
Dim calldate As String

i = 0
lastr = Sheet1.Range("A" & Rows.Count).End(xlUp).Row 'determine last row of data

For Each cel In Sheet1.Range("A1:A" & lastr) 'start loop

If InStr(cel.Value, "Call Date") Then 'check if your value is "Call date" indicating start of data
    If calldate = "" Then 'check if this is the first loop
        calldate = cel.Value 'set calldate to the current loop.
            Else 'if not first loop, write the current calldate + counter to the next available blank cell
            Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Value = calldate & " " & i
            i = 0 'reste counter
            calldate = cel.Value 'save next calldate value
    End If
    Else
        If cel <> "" Then 'test if cell is blank, skip if it is
            If InStr(cel, "Location") Then 'test if cell holds "Location, indicating it is not data. Skip if it is
                Else
                i = i + 1 'increase counter if part of data
            End If
        End If
End If
Next cel
Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Value = calldate & " " & I & " calls" 'Write current data at end of loop.
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...