но ваше изобретение с ThisWorkbook() не даёт мне покоя. неужели работает? {/post}{/quote}
нет не работает. Я думаю общение уже можно перенести в icq, чтоб не раздувать тему. А сюда можно будет потом скинуть результат. Александр, я Вас добавил.
{quote}{login=ikki}{date=26.08.2012 01:54}{thema=}{post}>> Кстати макрос ошибся примерно на 12000 чеков в меньшую сторону. кстати, интересно. теоретически - не должно быть.
но по выложенной вами картинке и переработанному под себя коду, к сожалению, выводов никаких сделать нельзя. это не значит, что я вам не верю, но это значит, что помочь в такой ситуации практически невозможно.
могу лишь предположить, что данные в ваших реальных таблицах более разнообразны. чем в файле-примере; макрос же составлен именно на основе файла-примера.
вот именно для этого вам крайне необходимо самому разобраться "что, как и почему" хотя бы в этом конкретном макросе. имхо.
пс. у меня возникали небольшие сомнения - не будет ли погрешностей в обработке и сравнении в макросе значений времени, представляющих собой, по сути, вещественные числа... но отработавший "на ура" пример эти сомнения развеял. возможно, напрасно.
ппс. а можно я макросы (точнее - рукописный текст) тоже картинками буду выкладывать? вы скажите, не стесняйтесь - вдруг вам так удобнее?{/post}{/quote}
Александр, Ваш макрос работает на ура! Была маленькая ошибочка, которую я поправил. В коде у Вас был and(и), я поправил на or(или)
{quote}{login=ikki}{date=26.08.2012 01:07}{thema=Re: Re: Re: }{post}{quote}{login=}{date=26.08.2012 12:43}{thema=Re: Re: }{post}Попробуете?{/post}{/quote} а чего там пробовать? макрос простенький. вот если б вы "попробовали" - вот это да! :)
Sub yyy() Dim ws As Worksheet, cDt As Range, cCh As Range, i&, j&
Set ws = ThisWorkbook.Worksheets(shFromName)
Set cDt = ws.Rows(2).Find(what:="Дата", lookat:=xlWhole) If cDt Is Nothing Then MsgBox "столбец ""дата"" не найлен", "упс!", 48: Exit Sub Set cCh = ws.Rows(2).Find(what:="Чек", lookat:=xlWhole) If cCh Is Nothing Then MsgBox "столбец ""чек"" не найлен", "упс!", 48: Exit Sub
Я с Вами полностью согласен, пробовать нужно самому. Но к моему сожалению у меня нет такой базы подготовки как у Вас. Кстати макрос ошибся примерно на 12000 чеков в меньшую сторону.
И я попробовал ))) не получилось
Private Declare Function GetTickCount Lib "kernel32" () As Long
Const fromBook = "FF_1кл.xls" Const toBook = "фф.xls" Const shFromName = "FF_1кл" ' имя листа с исходными данными Const shToName = "FF_1кл" ' имя листа, на который будет выводиться результат Const cellToAddr = "J3" ' адрес ячейки на листе shToName, с которой будет выводиться результат
' ВНИМАНИЕ!!! Макрос правильно работает при сортировке исходных данных по столбцам "Дата" и "Чек", ' именно в таком порядке, по возрастанию!!!
' данные должны быть организованы так, как в примере - "Дата" в столбце A, ' "Чек" - в столбце C, первая строка с данными - 3, строки таблицы расположены подряд, ' без пустых строк ' в случае изменения адресов столбцов и/или первой строки необходимо менять адреса в коде
Sub xxx() Dim wsFr As Worksheet, wsTo As Worksheet, t& Dim arrFr, arrTo, i&, j&, dTime#, lCheck&
t = GetTickCount Set wsFr = ThisWorkbook(fromBook).Worksheets(shFromName) Set wsTo = ThisWorkbook(toBook).Worksheets(shToName)
arrFr = wsFr.Range(wsFr.[a3], wsFr.[a3].End(xlDown)).Resize(, 3).Value ReDim arrTo(1 To UBound(arrFr), 1 To 2)
dTime = arrFr(1, 1): lCheck = arrFr(1, 3) j = 1: arrTo(j, 1) = dTime: arrTo(j, 2) = 1 For i = 2 To UBound(arrFr) If arrFr(i, 1) = dTime Then If arrFr(i, 3) > lCheck Then lCheck = arrFr(i, 3): arrTo(j, 2) = arrTo(j, 2) + 1 End If Else dTime = arrFr(i, 1): lCheck = arrFr(i, 3) j = j + 1: arrTo(j, 1) = dTime: arrTo(j, 2) = 1 End If Next
"e}{login=ikki}{date=26.08.2012 08:16}{thema=}{post}тот же файл, со сводной таблицей (с "простым" допстолбцом){/post}{/quote}"
Этот вариант тоже работать не хочет, но идея с доп. столбцом хорошая! У меня есть идея, у Вас мега мозг.
хотелось бы видеть макрос, который делает дополнительный столбец в конце таблицы и туда вставляет формулы с подсчётом.
Как я понимаю действия макроса должны быть такими: 1) поиск последнего столбца таблицы с данными 2) создание столбца в конце таблицы "Кол-во чеков" 3) поиск столбца "чек" 4) извлечение данных в последний столбец "Кол-во чеков" с учётом расчёта
{quote}{login=ikki}{date=25.08.2012 10:20}{thema=Re: Re: }{post}{quote}{login=Serge 007}{date=25.08.2012 10:12}{thema=Re: }{post}Не буду мешать :-){/post}{/quote} мешать можно, жена разрешила :))) мне самому интересно - нсть ли решение без допстолбца или более-менее простыми формулами?{/post}{/quote}
Для меня решение этой задачи встало на первое место, жена уже сковородку приготовила. Эксель интересная штуковина, за 3 месяца научился делать таблицы о которых даже и не мечтал. Хотел найти книгу, да к сожалению ни где нет. Эффективная работа. Программирование в Office Excel 2003 К.Фрай
{quote}{login=Serge 007}{date=25.08.2012 10:12}{thema=Re: }{post}{quote}{login=ikki}{date=25.08.2012 10:00}{thema=}{post} если вы согласны на платное решение...{/post}{/quote} Не буду мешать :-){/post}{/quote}
Платная основа не лучший вариант для меня. Но всё зависит от суммы. Если есть бесплатное решение я только за!
{quote}{login=acheslav}{date=25.08.2012 10:11}{thema=Re: }{post}{quote}{login=ikki}{date=25.08.2012 10:00}{thema=}{post}есть вопрос. данные в исходной таблице всегда отсортированы по возрастанию даты/времени и номера чека? если да - то у меня есть решение для сводной, но с помощью доп.столбца в исх.таблице с ПРОСТОЙ (работающей быстро) формулой. если нет - решение тоже есть, тоже с доп.столбцом, но со СЛОЖНОЙ (и для 60000+ строк - тормозной) формулой. решения сводной без доп.столбца - не знаю.
тот же вопрос актуален и для других способов (формулами/макросом). решение формулами делать не хочу, скорее всего - для такого объема оно будет тормозным (особенно в части формирования списка уникальных значений времени). решение макросом (для озвученной в первом посте задачи) могу сделать, но не сегодня (пришла жена, ругается :)
если вы согласны на платное решение макросом с доп.функционалом - со "следующими" таблицами и т.п. - контакты в подписи.
какой вариант вам нужен / ближе?{/post}{/quote}
отсортировать можно по датам, это не проблема, так как этот отчёт формирую сам из программы.{/post}{/quote} На личный ящик могу отправить полные таблицы, для лучшего понимания.
{quote}{login=ikki}{date=25.08.2012 10:00}{thema=}{post}есть вопрос. данные в исходной таблице всегда отсортированы по возрастанию даты/времени и номера чека? если да - то у меня есть решение для сводной, но с помощью доп.столбца в исх.таблице с ПРОСТОЙ (работающей быстро) формулой. если нет - решение тоже есть, тоже с доп.столбцом, но со СЛОЖНОЙ (и для 60000+ строк - тормозной) формулой. решения сводной без доп.столбца - не знаю.
тот же вопрос актуален и для других способов (формулами/макросом). решение формулами делать не хочу, скорее всего - для такого объема оно будет тормозным (особенно в части формирования списка уникальных значений времени). решение макросом (для озвученной в первом посте задачи) могу сделать, но не сегодня (пришла жена, ругается :)
если вы согласны на платное решение макросом с доп.функционалом - со "следующими" таблицами и т.п. - контакты в подписи.
какой вариант вам нужен / ближе?{/post}{/quote}
отсортировать можно по датам, это не проблема, так как этот отчёт формирую сам из программы.
{quote}{login=acheslav}{date=25.08.2012 09:40}{thema=Re: }{post}{quote}{login=ikki}{date=25.08.2012 09:18}{thema=}{post}решение именно в форме сводной таблицы - обязательно? формулами или макросами подойдёт?{/post}{/quote}
Я думаю да. Хотя в сводной более удобно, так как отчёт может содержать в себе до 60000 строк. + ко всему со сводной таблицы данные вытягиваются в следующую.{/post}{/quote}
прикреплённый скриншот на этом же листе располагается сводная таблица из которой ведётся подсчёт чеков в ячейку С3 в диапазоне дат ячеек А3 и В3
{quote}{login=ikki}{date=25.08.2012 09:18}{thema=}{post}решение именно в форме сводной таблицы - обязательно? формулами или макросами подойдёт?{/post}{/quote}
Я думаю да. Хотя в сводной более удобно, так как отчёт может содержать в себе до 60000 строк. + ко всему со сводной таблицы данные вытягиваются в следующую.
{quote}{login=acheslav}{date=25.08.2012 09:14}{thema=Re: }{post}{quote}{login=ikki}{date=25.08.2012 09:09}{thema=}{post}видимо, потому что это две записи для двух товаров чека с одним номером (1441191) то же и для 0:21 и 0:22
а вот логика подсчета для 0:17 - загадка. или ошибка автора.{/post}{/quote}
Да ошибка, я с этой задачей уже долго бьюсь. Решил и Вас помучить )){/post}{/quote}
{quote}{login=ikki}{date=25.08.2012 09:09}{thema=}{post}видимо, потому что это две записи для двух товаров чека с одним номером (1441191) то же и для 0:21 и 0:22
а вот логика подсчета для 0:17 - загадка. или ошибка автора.{/post}{/quote}
Да ошибка, я с этой задачей уже долго бьюсь. Решил и Вас помучить ))