Вы можете достичь этого, используя функцию COUNTA в VBA. С динамическими выходными строками я настоятельно рекомендую помечать эти строки, чтобы код мог их легко найти. В этом случае я сделал это, поставив «Name Count» в ячейке A5 и «School Count» в ячейке A9 (во второй таблице, которую вы опубликовали). Они могут быть в любой строке. Код найдет их до тех пор, пока они находятся в столбце A.
Для дальнейшего использования использование названных диапазонов будет намного более чистым и эффективным способом.
Sub der()
'Declare and set worksheet object
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1") 'Worksheet name here
Dim nameOutRow As Integer, schoolOutRow As Integer
Dim ns As Integer, ne As Integer, ss As Integer, se As Integer
'Find the Output rows
nameOutRow = Application.Match("Name Count", ws.Columns(1), 0)
schoolOutRow = Application.Match("School Count", ws.Columns(1), 0)
'Determine Name count range
ns = Application.Match("Name", ws.Columns(1), 0) 'name start row
ne = nameOutRow - 1 'name end row
'School count range
ss = Application.Match("School", ws.Columns(1), 0) 'school start row
se = schoolOutRow - 1 'school end row
'Names
ws.Range("B" & nameOutRow) = Application.CountA(ws.Range("B" & ns & ":B" & ne))
ws.Range("C" & nameOutRow) = Application.CountA(ws.Range("C" & ns & ":C" & ne))
ws.Range("D" & nameOutRow) = Application.CountA(ws.Range("D" & ns & ":D" & ne))
'Schools
ws.Range("B" & schoolOutRow) = Application.CountA(ws.Range("B" & ss & ":B" & se))
ws.Range("C" & schoolOutRow) = Application.CountA(ws.Range("C" & ss & ":C" & se))
ws.Range("D" & schoolOutRow) = Application.CountA(ws.Range("D" & ss & ":D" & se))
End Sub
Фактически записи в столбцах B, C, D являются динамическими. Следовательно, я не могу жестко закодировать диапазон для B5, C5 и т. Д. @oortCloud Можете ли вы, пожалуйста, помочь мне с этим? – TanviP
@TanviP, см. Правки – oortCloud
Спасибо @oortCloud! Есть только одна проблема. Я получаю ошибку несоответствия типа на 'nameOutRow = Application.Match (« Количество имени », ws.Columns (1), 0)« Не могли бы вы помочь? – TanviP