Здравствуйте! Есть 2 листа. На первом листе находится список документов, во втором столбце листа находятся коды запуска ракет категории этих документов - определенные цифровые значения, которые повторяются в зависимости от категории документа.
На втором листе находится список категорий этих документов. Код категории находится также во втором столбце.
Список довольно большой (89 категорий) и свыше 2х тысяч документов.
Подскажите макрос, который бы на втором листе вывел количество ячеек с этим кодом с первого листа напротив каждого из кодов.
Файл пример прилагаю.
Здравствуйте! Есть 2 листа. На первом листе находится список документов, во втором столбце листа находятся коды запуска ракет категории этих документов - определенные цифровые значения, которые повторяются в зависимости от категории документа.
На втором листе находится список категорий этих документов. Код категории находится также во втором столбце.
Список довольно большой (89 категорий) и свыше 2х тысяч документов.
Подскажите макрос, который бы на втором листе вывел количество ячеек с этим кодом с первого листа напротив каждого из кодов.
Как вариант можно функцией, но постоянная зависимость от соседнего листа не так надежно. На сколько я понимаю, если я отделю второй лист на отдельный файл, то вместо данных получу ошибку? И да, вы правы, "количество" правильнее.
Как вариант можно функцией, но постоянная зависимость от соседнего листа не так надежно. На сколько я понимаю, если я отделю второй лист на отдельный файл, то вместо данных получу ошибку? И да, вы правы, "количество" правильнее.Dorimar
Sub Perenos() Dim kods As Range, i&, y& Set kods = [B1].CurrentRegion.Offset(1) ReDim t(1 To kods.Rows.Count, 1 To 2) With CreateObject("Scripting.Dictionary") For i = 1 To kods.Rows.Count .Item(kods(i, 1)) = i If kods(i + 1, 1) <> kods(i, 1) Then y = y + 1 t(y, 1) = kods(i, 1) t(y, 2) = WorksheetFunction.CountIf(kods, kods(i, 1)) End If Next Sheets(2).[B2].Resize(y, 2) = t End With End Sub
[/vba]
[vba]
Код
Sub Perenos() Dim kods As Range, i&, y& Set kods = [B1].CurrentRegion.Offset(1) ReDim t(1 To kods.Rows.Count, 1 To 2) With CreateObject("Scripting.Dictionary") For i = 1 To kods.Rows.Count .Item(kods(i, 1)) = i If kods(i + 1, 1) <> kods(i, 1) Then y = y + 1 t(y, 1) = kods(i, 1) t(y, 2) = WorksheetFunction.CountIf(kods, kods(i, 1)) End If Next Sheets(2).[B2].Resize(y, 2) = t End With End Sub
Раз пошла такая пьянка, реж последний огурец! [vba]
Код
Sub Мяу() Dim ar, i& With Sheets(1).[B1].CurrentRegion ar = .Offset(1).Resize(.Rows.Count - 1).Value End With With CreateObject("Scripting.Dictionary") For i = 1 To UBound(ar) .Item(ar(i, 1)) = .Item(ar(i, 1)) + 1 Next Sheets(2).[B2].Resize(.Count) = Application.Transpose(.keys) Sheets(2).[B2].Offset(, 1).Resize(.Count) = Application.Transpose(.items) End With End Sub
[/vba]
Раз пошла такая пьянка, реж последний огурец! [vba]
Код
Sub Мяу() Dim ar, i& With Sheets(1).[B1].CurrentRegion ar = .Offset(1).Resize(.Rows.Count - 1).Value End With With CreateObject("Scripting.Dictionary") For i = 1 To UBound(ar) .Item(ar(i, 1)) = .Item(ar(i, 1)) + 1 Next Sheets(2).[B2].Resize(.Count) = Application.Transpose(.keys) Sheets(2).[B2].Offset(, 1).Resize(.Count) = Application.Transpose(.items) End With End Sub