Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Суммирование данных из массива по нескольким критериям, Применение массивов при большом количестве строк
 
Очень-очень нужна помощь неравнодушных в написании макроса для массива данных.
Сама пробовала взяться за массивы, никак они мне не давались. решила пойти обходным путем...и тут тоже не сложилось (первый мой опыт в макросах)
Суть проблемы:
есть 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   
Изменено: Ira1 - 09.04.2014 23:44:50
Страницы: 1
Наверх