Попался мне в руки интересный вариант табеля. Все в нем хорошо (для меня), одно только неладно - уж очень он "туповат", что ли. Оставив только три (повторяющиеся) строки и убрав лишние столбцы, представляю Вашему вниманию данный образец. Попробовав отдельно соорудить нечто подобное (позаимствовав формулу sumbycolor), конечно же, нужного результата я не достиг. Оно и понятно - и в Экселе я не профи, и, полагаю, что где-то в исходном файле запрятались макросы (вообще тёмный лес для меня).
Пойдя другим путем, я доработал исходный файл под себя (количество Ивановых, Петровых и прочих у меня около 400 чел.) Думать файл стал оооочень долго, даже если просто в колонке (любой) поставить просто цифру. Обрабатывается такая операция секунды 3-5.
Помогите, может, есть вариант без макроса обойтись? Может, другая формула (другое решение)? Или проблема "тугодумства" кроется в чем-то другом?
Доброго дня Вам, умнейшие!
Попался мне в руки интересный вариант табеля. Все в нем хорошо (для меня), одно только неладно - уж очень он "туповат", что ли. Оставив только три (повторяющиеся) строки и убрав лишние столбцы, представляю Вашему вниманию данный образец. Попробовав отдельно соорудить нечто подобное (позаимствовав формулу sumbycolor), конечно же, нужного результата я не достиг. Оно и понятно - и в Экселе я не профи, и, полагаю, что где-то в исходном файле запрятались макросы (вообще тёмный лес для меня).
Пойдя другим путем, я доработал исходный файл под себя (количество Ивановых, Петровых и прочих у меня около 400 чел.) Думать файл стал оооочень долго, даже если просто в колонке (любой) поставить просто цифру. Обрабатывается такая операция секунды 3-5.
Помогите, может, есть вариант без макроса обойтись? Может, другая формула (другое решение)? Или проблема "тугодумства" кроется в чем-то другом?ЩтуКув
В тех столбцах, где я ставлю часы сотрудникам (с B по O), цветом я показываю с каким коэфф. будет оплачиваться данный день. Дальше (столбцы Q-U) идет суммирование часов с соответствующей подкраской. Этот Файл - пример. Но если его продолжить (сделать кол-во сотрудников около 400), то файл начинает конкретно подтормаживать. Вот я и спрашиваю, может есть другая формула, которая будет суммировать числа в ячейках с определенным (одинаковым) цветом? Просто, я предполагаю, что именно наличие макроса является первопричиной тормозов файла.
Прошу прощения, если я оказался непонятым.
В тех столбцах, где я ставлю часы сотрудникам (с B по O), цветом я показываю с каким коэфф. будет оплачиваться данный день. Дальше (столбцы Q-U) идет суммирование часов с соответствующей подкраской. Этот Файл - пример. Но если его продолжить (сделать кол-во сотрудников около 400), то файл начинает конкретно подтормаживать. Вот я и спрашиваю, может есть другая формула, которая будет суммировать числа в ячейках с определенным (одинаковым) цветом? Просто, я предполагаю, что именно наличие макроса является первопричиной тормозов файла.ЩтуКув
Сообщение отредактировал ЩтуКув - Среда, 30.11.2016, 17:00
Ну сейчас макрос включен как волатильная функция, они конечно тормозят расчёты, но не уверен, что пары тысяч ячеек достаточно для такого эффекта. В принципе можно переделать макрос чтобы он по кнопке отрабатывал, но может ещё чего присоветуют.
Ну сейчас макрос включен как волатильная функция, они конечно тормозят расчёты, но не уверен, что пары тысяч ячеек достаточно для такого эффекта. В принципе можно переделать макрос чтобы он по кнопке отрабатывал, но может ещё чего присоветуют.Udik
вот вам барабан яд 41001231307558 wm R419131876897 udik1968@gmail.com
Очень тормозят! К сожалению, файл, который можно здесь представить не может быть более 100 кб, и в таком файле, действительно, незаметны подтормаживания.! А мой рабочий табель весом более 500 кб сейчас, а в конце месяца еще станет тяжелее. Оооооочень долгий табель. Udik, будьте добры, поделитесь примером альтернативного макроса, если Вас не затруднит.
Очень тормозят! К сожалению, файл, который можно здесь представить не может быть более 100 кб, и в таком файле, действительно, незаметны подтормаживания.! А мой рабочий табель весом более 500 кб сейчас, а в конце месяца еще станет тяжелее. Оооооочень долгий табель. Udik, будьте добры, поделитесь примером альтернативного макроса, если Вас не затруднит.ЩтуКув
Такой вот вариант, пересчет происходит при изменении в строке только для этой строки. [vba]
Код
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range) Static rng1 As Range Static oDict As Object Dim i As Integer, rowLast% Dim rng2 As Range, unoCell As Range If Target.Count > 1 Then Exit Sub If rng1 Is Nothing Then Set rng1 = UsedRange.Find("Всего отработано часов") Set oDict = CreateObject("Scripting.Dictionary") For i = 1 To 5 oDict(rng1.Offset(0, i).Interior.Color) = rng1.Column + i Next i End If i = 1 Do While rng1.Offset(i, 0).Interior.Color = rng1.Interior.Color i = i + 1 Loop rowLast = rng1.Row + i - 1 If Not Intersect(Target, Range(Cells(rng1.Row + 2, 2), Cells(rowLast, rng1.Column - 1))) Then Exit Sub Set rng2 = Cells(Target.Row, rng1.Column + 1) Set rng2 = rng2.Resize(1, 5) rng2.ClearContents Set rng2 = Range(Cells(Target.Row, 2), Cells(Target.Row, rng1.Column - 1)) For Each unoCell In rng2 If oDict.exists(unoCell.Interior.Color) Then Cells(Target.Row, oDict(unoCell.Interior.Color)) = Cells(Target.Row, oDict(unoCell.Interior.Color)) + unoCell.Value End If Next End Sub
[/vba]
Такой вот вариант, пересчет происходит при изменении в строке только для этой строки. [vba]
Код
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range) Static rng1 As Range Static oDict As Object Dim i As Integer, rowLast% Dim rng2 As Range, unoCell As Range If Target.Count > 1 Then Exit Sub If rng1 Is Nothing Then Set rng1 = UsedRange.Find("Всего отработано часов") Set oDict = CreateObject("Scripting.Dictionary") For i = 1 To 5 oDict(rng1.Offset(0, i).Interior.Color) = rng1.Column + i Next i End If i = 1 Do While rng1.Offset(i, 0).Interior.Color = rng1.Interior.Color i = i + 1 Loop rowLast = rng1.Row + i - 1 If Not Intersect(Target, Range(Cells(rng1.Row + 2, 2), Cells(rowLast, rng1.Column - 1))) Then Exit Sub Set rng2 = Cells(Target.Row, rng1.Column + 1) Set rng2 = rng2.Resize(1, 5) rng2.ClearContents Set rng2 = Range(Cells(Target.Row, 2), Cells(Target.Row, rng1.Column - 1)) For Each unoCell In rng2 If oDict.exists(unoCell.Interior.Color) Then Cells(Target.Row, oDict(unoCell.Interior.Color)) = Cells(Target.Row, oDict(unoCell.Interior.Color)) + unoCell.Value End If Next End Sub
В первом случае файл так и остался думающим (либо я неправильно вставил макрос), а похожий на второй вариант (Маняшкин) я предлагал руководству как альтернативу, но получил отказ - запутаются пользователи. Выход нашел следующим образом - отключил автопересчет в параметрах вычислений. файл тупит (думает) только один раз, когда, после внесения всех данных, жмем на кнопку "пересчет". Не очень удобно, но это меньшее из зол (как мне думается).
Спасибо Udik! Спасибо, Маня!
В первом случае файл так и остался думающим (либо я неправильно вставил макрос), а похожий на второй вариант (Маняшкин) я предлагал руководству как альтернативу, но получил отказ - запутаются пользователи. Выход нашел следующим образом - отключил автопересчет в параметрах вычислений. файл тупит (думает) только один раз, когда, после внесения всех данных, жмем на кнопку "пересчет". Не очень удобно, но это меньшее из зол (как мне думается).ЩтуКув
В первом случае файл так и остался думающим (либо я неправильно вставил макрос),
Так в вашем старом файле осталась старая функция и ее вызовы. Чтобы замена произошла, надо после вставки моей функции в модуль листа, пройтись по всем строкам и изменить что-нибудь в какой-либо из ячеек, либо ещё один макрос написать для эмуляции таких действий == Вот макрос вставил getChange, изменил строку с Intersect
В первом случае файл так и остался думающим (либо я неправильно вставил макрос),
Так в вашем старом файле осталась старая функция и ее вызовы. Чтобы замена произошла, надо после вставки моей функции в модуль листа, пройтись по всем строкам и изменить что-нибудь в какой-либо из ячеек, либо ещё один макрос написать для эмуляции таких действий == Вот макрос вставил getChange, изменил строку с IntersectUdik
Udik. а можно мне понаглеть чуть-чуть и отправить Вам на почту мой трудный файл? А то я уже вообще ничего не понимаю, блин.... Вот с формулами Бороды было гораздо проще, но ВБА...
Udik. а можно мне понаглеть чуть-чуть и отправить Вам на почту мой трудный файл? А то я уже вообще ничего не понимаю, блин.... Вот с формулами Бороды было гораздо проще, но ВБА...ЩтуКув