Приветствую всех форумчан. В таблице с данными необходимо оперативно получать данные в отфильтрованном диапазоне. В MsgBox выводятся необходимые данные, а вот подсчитать количество инспектирований у меня не получается. Прошу помогите дописать код. Условия подсчета в файле примере. Спасибо.
Приветствую всех форумчан. В таблице с данными необходимо оперативно получать данные в отфильтрованном диапазоне. В MsgBox выводятся необходимые данные, а вот подсчитать количество инспектирований у меня не получается. Прошу помогите дописать код. Условия подсчета в файле примере. Спасибо.Shylo
? В макросое можно делать на коллекции или словаре. Ну а если 4 тепловоза тогда что? Собирать новую тройку? P.S. Посмотрел код - так там уже словари, добавьте ещё один с ключём C|F. А может быть что в один день по одному тепловозу две записи? Или на тепловозы вообще смотреть не нужно, а учитываем только сколько строк у фирмы в день?
Ну вот добавил один словарь, про нарушителя регламента появляется сообщение. Но как это учитывать никто пока не знает ((
[vba]
Код
Sub uniq_report() Dim r1 As Range Dim r2 As Range Dim r3 As Range Dim t$
Set sd1 = CreateObject("Scripting.Dictionary") Set sd2 = CreateObject("Scripting.Dictionary") Set sd3 = CreateObject("Scripting.Dictionary") Set sd4 = CreateObject("Scripting.Dictionary")
For Each r1 In Range("C3", Cells(Rows.Count, "C").End(xlUp)).SpecialCells(xlCellTypeVisible) sd1.Item(r1.Value) = "" t = r1.Value & "|" & Format(r1.Offset(, 3).Value, "dd.mm.yyyy") sd4.Item(t) = sd4.Item(t) + 1 If sd4.Item(t) > 3 Then MsgBox "Фирма " & t & " нарушитель!", vbCritical Next For Each r2 In Range("E3", Cells(Rows.Count, "E").End(xlUp)).SpecialCells(xlCellTypeVisible) sd2.Item(r2.Value) = "" Next For Each r3 In Range("F3", Cells(Rows.Count, "F").End(xlUp)).SpecialCells(xlCellTypeVisible) sd3.Item(r3.Value) = "" Next
? В макросое можно делать на коллекции или словаре. Ну а если 4 тепловоза тогда что? Собирать новую тройку? P.S. Посмотрел код - так там уже словари, добавьте ещё один с ключём C|F. А может быть что в один день по одному тепловозу две записи? Или на тепловозы вообще смотреть не нужно, а учитываем только сколько строк у фирмы в день?
Ну вот добавил один словарь, про нарушителя регламента появляется сообщение. Но как это учитывать никто пока не знает ((
[vba]
Код
Sub uniq_report() Dim r1 As Range Dim r2 As Range Dim r3 As Range Dim t$
Set sd1 = CreateObject("Scripting.Dictionary") Set sd2 = CreateObject("Scripting.Dictionary") Set sd3 = CreateObject("Scripting.Dictionary") Set sd4 = CreateObject("Scripting.Dictionary")
For Each r1 In Range("C3", Cells(Rows.Count, "C").End(xlUp)).SpecialCells(xlCellTypeVisible) sd1.Item(r1.Value) = "" t = r1.Value & "|" & Format(r1.Offset(, 3).Value, "dd.mm.yyyy") sd4.Item(t) = sd4.Item(t) + 1 If sd4.Item(t) > 3 Then MsgBox "Фирма " & t & " нарушитель!", vbCritical Next For Each r2 In Range("E3", Cells(Rows.Count, "E").End(xlUp)).SpecialCells(xlCellTypeVisible) sd2.Item(r2.Value) = "" Next For Each r3 In Range("F3", Cells(Rows.Count, "F").End(xlUp)).SpecialCells(xlCellTypeVisible) sd3.Item(r3.Value) = "" Next
Hugo, добрый день. В одну дату на одной фирме четыре тепловоза исключено, (условия договора - не более трех). В примере попытался максимально показать возможные варианты и в последней колонке таблицы это то, как должно получится.
А может быть что в один день по одному тепловозу две записи?
В один день по одному номеру тепловоза (на одной фирме) две записи быть не может. Логика такая, в одну дату на одной фирме инспектор может посмотреть один или два или три тепловоза - это одно инспектирование, т.е. выезд инспектора, количество выездов и надо посчитать. "Нарушителя" быть не может - инспектор не позволит. Ваш код подсчитал количество выездов 10, а их в примере 8.
Hugo, добрый день. В одну дату на одной фирме четыре тепловоза исключено, (условия договора - не более трех). В примере попытался максимально показать возможные варианты и в последней колонке таблицы это то, как должно получится.
А может быть что в один день по одному тепловозу две записи?
В один день по одному номеру тепловоза (на одной фирме) две записи быть не может. Логика такая, в одну дату на одной фирме инспектор может посмотреть один или два или три тепловоза - это одно инспектирование, т.е. выезд инспектора, количество выездов и надо посчитать. "Нарушителя" быть не может - инспектор не позволит. Ваш код подсчитал количество выездов 10, а их в примере 8.Shylo
Shylo, ну тогда уже всё готово, предупреждение не должно показываться, но если вдруг такой косяк будет где 4 записи - то сообщение обо этом не помешает.
Shylo, ну тогда уже всё готово, предупреждение не должно показываться, но если вдруг такой косяк будет где 4 записи - то сообщение обо этом не помешает.Hugo
Hugo, Так выезды подсчитывает неправильно, считает 10, а их 8. Посмотрите пожалуйста табличку в файле, я там все обозначил и цветом по выезду и нарастающим количеством в последнем столбце.
Hugo, Так выезды подсчитывает неправильно, считает 10, а их 8. Посмотрите пожалуйста табличку в файле, я там все обозначил и цветом по выезду и нарастающим количеством в последнем столбце.Shylo
Hugo, Ну конечно же. Я скопировал Ваш код в фал примера и в MsgBox количество инспектирований 10. Сейчас разобрался, у меня в столбце "С" под таблицей еще был текст с пояснением который и шел в "лишний подсчет". Прошу прощения, за свою невнимательность. Все работает. В который раз огромное спасибо за помощь.
Hugo, Ну конечно же. Я скопировал Ваш код в фал примера и в MsgBox количество инспектирований 10. Сейчас разобрался, у меня в столбце "С" под таблицей еще был текст с пояснением который и шел в "лишний подсчет". Прошу прощения, за свою невнимательность. Все работает. В который раз огромное спасибо за помощь. Shylo