Очень-очень нужна помощь неравнодушных в написании макроса для массива данных.
Сама пробовала взяться за массивы, никак они мне не давались. решила пойти обходным путем...и тут тоже не сложилось (первый мой опыт в макросах)
Суть проблемы:
есть 2 листа
1) Фамилии-город - шаблон для заполнения
2) Данные - сам массив
На листе данные существуют значения с цифрами по столбцам "Всего","Без налога", "Фирм."
Нужно чтобы макрос анализируя 3 критерия "Фамилии" , "Город", "Результат" суммировал отдельно значения "Всего","Без налога", "Фирм." и результат выводил на шаблон "Фамилия город".Приэтом моя головоломка осложняется тем, что листов "Фамилия город должно быть столько, сколько городов (их обычно около 20-25)
Иными словами, при нажатии кнопки появляется множество листов "Фамилии-Город", в которых в ячейке А4 занесен сам город, в столбце А (11:95) - Фамилии+ Итого, а в столбцах G: О значения "Всего","Без налога", "Фирм." с разбивкой на получили, выдали и результат. Раньше файл создавали функциями суммесли и впр, но процесс был длительный, очень по причине того, что массив достигал до 20000 тысяч строк. Ниже результат моих попыток написания кода (пробовала по аналогу с форума
'http://www.planetaexcel.ru/forum.php?thread_id=29337).
Сама пробовала взяться за массивы, никак они мне не давались. решила пойти обходным путем...и тут тоже не сложилось (первый мой опыт в макросах)
Суть проблемы:
есть 2 листа
1) Фамилии-город - шаблон для заполнения
2) Данные - сам массив
На листе данные существуют значения с цифрами по столбцам "Всего","Без налога", "Фирм."
Нужно чтобы макрос анализируя 3 критерия "Фамилии" , "Город", "Результат" суммировал отдельно значения "Всего","Без налога", "Фирм." и результат выводил на шаблон "Фамилия город".Приэтом моя головоломка осложняется тем, что листов "Фамилия город должно быть столько, сколько городов (их обычно около 20-25)
Иными словами, при нажатии кнопки появляется множество листов "Фамилии-Город", в которых в ячейке А4 занесен сам город, в столбце А (11:95) - Фамилии+ Итого, а в столбцах G: О значения "Всего","Без налога", "Фирм." с разбивкой на получили, выдали и результат. Раньше файл создавали функциями суммесли и впр, но процесс был длительный, очень по причине того, что массив достигал до 20000 тысяч строк. Ниже результат моих попыток написания кода (пробовала по аналогу с форума
'http://www.planetaexcel.ru/forum.php?thread_id=29337).
| Код |
|---|
Sub Counter()
Dim Uniq As New Collection, iLastRow As Long, iLastColumn As Long
Dim i As Long, j As Long, Uniq2 As New Collection, iName As String, n As Long ' Arr1()
[I]iLastColumn = Cells(2, Columns.Count).End(xlToLeft).Column[/I]
[I]iLastRow = Cells(Rows.Count, 2).End(xlUp).Row[/I]
[I]Range(Cells(11, 1), Cells(iLastRow + 1, iLastColumn + 1)).ClearContents[/I]
[I]Range(Cells(11, 5), Cells(11, iLastColumn + 1)).ClearContents[/I]
[I] With Sheets("Данные "[/I])
iLastRow = .Cells(Rows.Count, 3).End(xlUp).Row
For i = 5 To iLastRow
On Error Resume Next
Uniq.Add .Cells(i, 1), CStr(.Cells(i, 1))
Next
iLastRow = 1
For i = 1 To Uniq.Count
Cells(iLastRow + 1, 1) = Uniq(i)
iLastRow = iLastRow + 1
Next
iLastRow = .Cells(Rows.Count, 3).End(xlUp).Row
For i = 5 To iLastRow
On Error Resume Next
Uniq2.Add .Cells(i, 3), CStr(.Cells(i, 3))
Next
iLastColumn = 5
For i = 1 To Uniq2.Count
Cells(4, iLastColumn + 1) = Uniq2(i)
iLastColumn = iLastColumn + 1
Next
iLastColumn = Cells(2, Columns.Count).End(xlToLeft).Column
iLastRow = .Cells(Rows.Count, 2).End(xlUp).Row
For j = 4 To iLastColumn
iName = Cells(2, j)
For i = 1 To Uniq.Count
For n = 3 To iLastRow
If .Cells(n, 1) = iName Then
If .Cells(n, 2) = Uniq(i) Then
Cells(i + 2, j) = Cells(i + 2, j) + .Cells(n, 3)
End If
End If
Next
Next
Next
' Next
End With
End Sub |
Изменено: - 09.04.2014 23:44:50