DocBeen
А еще можно через "Сводные Таблицы". Которые тоже управляются программно. Но если я делал программно, то отсортировал бы диапазон, а потом бы прошелся в цикле подсчитывая записи. Соответственно промежуточные итоги и сводные таблицы не использовал бы ...
Например так бы:
1) Сначала сортировка вызовом соответствующей фичи из кода (как это писать - можешь увидеть записав макрос средствами ёхеля).
2) А потом вот так бы:
Код:
Set inSh = Worksheets("Лист1") 'определяем имя исходной таблицы
Set outSh = Worksheets("Лист2") 'определяем имя сводной таблицы
r1 = 2 'определяем начальную строку в исходной таблице (2 - т.к. 1-ая строка например занята шапкой)
r2 = 1 'определяем начальную строку в сводной таблице
Do While inSh.Cells(r1, 1) <> "" 'цикл по строкам исходной таблицы, до тех пор пока не закончиться НЕпустые строки в исходной таблице в 1-ой колоке (там где имя)
If inSh.Cells(r1, 1) <> inSh.Cells(r1 - 1, 1) Then 'проверка условия, что имя на предыдущей строке отличается от имени на текущей строке
r2 = r2 + 1 'если оно таки отличается, то добавление строки в сводную таблицу
outSh.Cells(r2, 1) = inSh.Cells(r1, 1) 'а также имени в сводную таблицу
outSh.Cells(r2, 2).ClearContents 'а также очищается 2-ая колонка (на всякий случай)
End If
outSh.Cells(r2, 2) = outSh.Cells(r2, 2) + inSh.Cells(r1, 2) 'суммирование цифровых значений (суммируется текущее значение текущей строки сводной таблицы и значение из исходной таблицы)
r1 = r1 + 1 'переход на новую строку в исходной таблице
Loop
А еще можно через "Сводные Таблицы". Которые тоже управляются программно. Но если я делал программно, то отсортировал бы диапазон, а потом бы прошелся в цикле подсчитывая записи. Соответственно промежуточные итоги и сводные таблицы не использовал бы ...
Например так бы:
1) Сначала сортировка вызовом соответствующей фичи из кода (как это писать - можешь увидеть записав макрос средствами ёхеля).
2) А потом вот так бы:
Код:
Set inSh = Worksheets("Лист1") 'определяем имя исходной таблицы
Set outSh = Worksheets("Лист2") 'определяем имя сводной таблицы
r1 = 2 'определяем начальную строку в исходной таблице (2 - т.к. 1-ая строка например занята шапкой)
r2 = 1 'определяем начальную строку в сводной таблице
Do While inSh.Cells(r1, 1) <> "" 'цикл по строкам исходной таблицы, до тех пор пока не закончиться НЕпустые строки в исходной таблице в 1-ой колоке (там где имя)
If inSh.Cells(r1, 1) <> inSh.Cells(r1 - 1, 1) Then 'проверка условия, что имя на предыдущей строке отличается от имени на текущей строке
r2 = r2 + 1 'если оно таки отличается, то добавление строки в сводную таблицу
outSh.Cells(r2, 1) = inSh.Cells(r1, 1) 'а также имени в сводную таблицу
outSh.Cells(r2, 2).ClearContents 'а также очищается 2-ая колонка (на всякий случай)
End If
outSh.Cells(r2, 2) = outSh.Cells(r2, 2) + inSh.Cells(r1, 2) 'суммирование цифровых значений (суммируется текущее значение текущей строки сводной таблицы и значение из исходной таблицы)
r1 = r1 + 1 'переход на новую строку в исходной таблице
Loop