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

Страницы: 1
Проблема с автофильтром
 
Спасибо всем за участие! Dima S указал решение, которое помогло и всё работает :D

Все приложение кинуть не смог бы - занимает около 5 МБ (допустимо только 100 КБ). Но суть та же сама!
Проблема с автофильтром
 
К сожалению, я не понял как это должно помочь. Нужно включить фильтр, если он выключен, и ничего не делать, если он включен. Но то, что Вы отправили, мне не помогло. Если Вам не сложно, объясните, пожалуйста.
Проблема с автофильтром
 
Доброго времени суток всем!

Проблема следующая: написанное мною приложение в Visual Basic начинает свою работу в Excel с того, что назначает диапазону фильтр, но когда фильтр нужного диапазона назначен - приложение не работает.
Что нужно сделать, чтобы приложение работало, если фильтр уже назначен?
Желаемый результат - чтобы приложение работало независимо от того включен фильтр или нет, но фильтр должен быть обязательно (и записан в приложении)!
Спасибо всем за внимание!
Удаление повторяющихся значений и сумирование результатов
 
Мотя, спасибо большое. Очень круто, и выглядит прекрасно
Зависание макроса на удаление строки по условию
 
спасибо всем, работает:)
Зависание макроса на удаление строки по условию
 
не пойму, а как будет выглядеть этот макрос? вот к примеру применил я фильтр, видно только с 123, а дальше?
Зависание макроса на удаление строки по условию
 
Здравствуйте. Использую макрос на удаление строк по условию. Макрос на малельких таблицах 100/1000 записей работает нормально, но в моей таблице 60000 записей, и надо что бы он удалял именно по всей таблице (то есть такое задание, "по частям" нельзя).
сам макрос:
Код
Sub Óäàëåíèå_ñòðîêè()
Dim li As Long

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For li = Cells.SpecialCells(xlLastCell).Row To 1 Step -1
If Cells(li, 7).Value = "123" Then Rows(li).Delete
Next li
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

End Sub

(если в 7-ом столбце встречается "123", то он удаляет эту строку).
если же запустить этот макрос на полной странице, то сам Эксель зависает. ПРобовал ждать, но 15-30 минут - это уже перебор.
Может кто подскажет, может он зацыкливается, или еще что-то?

файл тут, так как весит 5 мб. (справа от файла,навести на трехугольник, и там будет скачать)
Изменено: wahnpolthensel - 25.09.2013 14:22:25
Удаление повторяющихся значений и сумирование результатов
 
это понятно, но сводные не подойдут  :)  почему? я описал немного выше
Удаление повторяющихся значений и сумирование результатов
 
Мотя, спасибо Вам огромное, но то что он привязан к одному листу и может подсчитывать лишь по одному пользователю, делает его неподходящим для моей задачи, увы.
вообще, на самом деле, я придумал алгоритм, который избавит меня от всех бед и я смогу его применить для нескольких моих задач, но, увы, я не владею ВБА, что бы его осуществить. Я попытаюсь описать его, а может Вы сможете его написать.

Итак вернемся к этому изображению. Задача остается прежней нужно просумировать повторные даты, а лишнее удалить.
0) ставим курсор в ячейку A1
1) запускаем цикл, который закончится, когда достигнет конца таблицы
2) сравниваем ячейку (А1) с той что ниже нее (А2) - не повторяются ли они? если нет, то сравниваем след. ячейку (А2 с А3)
3) таким образом, мы дойдем аж до ячейки А9, и она увидит что А9=А10. Потому мы берем ячейку С10 и сумируем с С9 (сумируется время). А после этого строку 10 удаляем.
4) нам не надо сразу идти на след. ячейку (так как таблица немного сьехала), а нужно снова проверить А9 и А10. они снова равны - значит снова сумируем и удаляем.
5) и так до конца.
в конечном итоге, у нас останутся даты и сумма времени без повторений.

Мне этот макрос был бы очень полезен, потому как после первого выполнения можно было запустить его второй раз, только немного с другим условием. Мы бы сравнивали его по месяцам. то есть в конечном у нас бы осталась сумма часов за каждый месяц.

И конечная цель. Этот макрос можно было бы запустить с тем условием, что бы он сравнивал по пользователям. И таким образом у нас бы остались сумма часов по пользователям.
Потому вариант jakim подходит, вот только задачи у меня 3, а не 1. Это разные виды сводок на каждого из пользователей.
Может кто-то помочь написать тот макрос, что я описал выше? так как на ВБА я просто не представляю, как его реализовать.
Удаление повторяющихся значений и сумирование результатов
 
потому что 1) оригинал лучше не трогать, 2) задачи разные (в первом случае будет подготавливатся сводка для одного пользователя, в другом для всех). 3) методы должны быть универсальными, так количество записей/пользователей/входов/выходов можжет быть разное. Потому и надо сделать по умному, что бы он брал именно всех пользователей :)
п.с. Извиняюсь, моя ошибка. В прикрипленном файле сформированая таблица "All" есть
Удаление повторяющихся значений и сумирование результатов
 
Цитата
Покажите "кусок" реальной таблицы: вряд ли в ней будет только один пользователь.
реальная таблица у вас есть, она в прикрепленном файле, первый лист с названием "All". и да, там все пользователи. Вот только проблема в том, что там все в перемешку и много записей, потому и есть нужда в этой функции, что бы отобрать единственный экземпляр из всех, что встречаются
Изменено: wahnpolthensel - 24.09.2013 15:57:19
Удаление повторяющихся значений и сумирование результатов
 
Цитата
Может просто сводными?
1) обратите внимание, они не правильно считают, сам не знаю почему
2) это нужно будет макросом, так в этой таблице оно считает, а другой будет бругое кол. пользователей/часов и т.д. потому, увы, сводные таблицы тут не подходят

Цитата
Может так?
Всё сделано при помощи сортировки фильтрации и конечно формул.
круто, но есть лишь одно "но". Вы пользователей сами копировали, а если они будут другими? то тогда уже будет неправильно получатся.
Может есть функиция, которая копирует все значения столбца без повторений? тогда бы можно было указать как источник столбец со всеми пользователями, а в ячейку Е2 поставить эту функицю, что бы вывело всех пользователей без повторений. И тогда бы начиная с ячейки Е2 и ниже был бы список всех пользователей. А вот для них бы уже мы и применили вашу функцию "СУММЕСЛИ". Кто нибудь знает такую функцию (диапазон без повторений)???
Удаление повторяющихся значений и сумирование результатов
 
Сразу извиняюсь за название темы, я даже не знаю, как правильно сформулировать название темы.
Я даже не представляю каким образом можно написать этот макрос, потому я просто выложу скрин "как есть" и "как надо":

то есть, если дата повторяется, то часы сумируются, а все лишнее удаляеться

вторая задача еще мудреней. нужно просумировать часы по месяцам

этот макрос должен пробегать по всему столбцу "А", так количество записей и месяцов может быть больше

п.с. Моя таблица, если нужна
Изменено: wahnpolthensel - 24.09.2013 22:00:37
Ошибка правильного макроса
 
записывал данный макрос через "Запись макроса"
Код
Sub Ìàêðîñ8()
    
    Range("A1").Select
    ActiveWorkbook.Worksheets("All").ListObjects("asd").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("All").ListObjects("asd").Sort.SortFields.Add Key:= _
        Range("asd[[#Headers],[âðåìÿ]]"), SortOn:=xlSortOnValues, Order:= _
        xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("All").ListObjects("asd").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("asd[[#Headers],[êîä ïîëüçîâåëÿ]]").Select
    ActiveWorkbook.Worksheets("All").ListObjects("asd").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("All").ListObjects("asd").Sort.SortFields.Add Key:= _
        Range("asd[[#Headers],[êîä ïîëüçîâåëÿ]]"), SortOn:=xlSortOnValues, Order:= _
        xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("All").ListObjects("asd").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

вопрос в том, если команда что бы назвать эту талицу своим именем. Потому как если эта страница удалиться, а потом снова создать, то вместо таблици "asd" будет другая "Таблица***". сответственно хочу, что бы вначале макроса этой таблице (ListObjects("asd")) присваивалось имя "asd"
Изменено: wahnpolthensel - 24.09.2013 03:36:31
Ошибка правильного макроса
 
согласен, так, пожалуй, лучше даже будет.
Ошибка правильного макроса
 
странно, но на большой таблице работает прекрасно, но вот на выдает "run-time error 9: subscript is out of range" и посвечивает "With ActiveSheet.ListObjects(1)"
Ошибка правильного макроса
 
спасибо
Ошибка правильного макроса
 
таблицу приложил. все действия должны проводится на листе "All", функия - "dUdalenieStrokVremeni"
Ошибка правильного макроса
 
заполненных 29, все остальные (1048576) пустые
Ошибка правильного макроса
 
немного изменил код. правда не уверен, что именно туда вставил
вот весь:
Код
Sub dUdalenieStrokVremeni()
    Dim ra As Range, delra As Range, ТекстДляПоиска As String, xxx As Integer
    Application.ScreenUpdating = True    ' отключаем обновление экрана
    ТекстДляПоиска = "выход"    ' удаляем строки с таким текстом
    ' перебираем все строки в используемом диапазоне листа
   For Each ra In ActiveSheet.UsedRange.Rows
        ' если в строке найден искомый текст
       If Not ra.Find(ТекстДляПоиска, , xlValues, xlPart) Is Nothing Then
            ' добавляем строку в диапазон для удаления
           If delra Is Nothing Then Set delra = ra Else Set delra = Union(delra, ra)
        End If
    Next
    ' если подходящие строки найдены - удаляем их
    xxx = delra.Areas.count
    Range("H1").Select
    ActiveCell.FormulaLocal = xxx
   If Not delra Is Nothing Then delra.EntireRow.Delete
End Sub

вот скрин с ошибкой... очень странный

то есть диапазон не привышается.

Цитата
А если после удаления в первом запуске очистить delra?
пробовал перед использованием второй раз полностью закрыть Эксель, открыть и применить макрос - тоже самое.
Ошибка правильного макроса
 
Код
Sub dUdalenieStrokVremeni()
    Dim ra As Range, delra As Range, ТекстДляПоиска As String
    Application.ScreenUpdating = False    ' отключаем обновление экрана
    ТекстДляПоиска = "выход"    ' удаляем строки с таким текстом
    ' перебираем все строки в используемом диапазоне листа
   For Each ra In ActiveSheet.UsedRange.Rows
        ' если в строке найден искомый текст
       If Not ra.Find(ТекстДляПоиска, , xlValues, xlPart) Is Nothing Then
            ' добавляем строку в диапазон для удаления
           If delra Is Nothing Then Set delra = ra Else Set delra = Union(delra, ra)
        End If
    Next
    ' если подходящие строки найдены - удаляем их
   If Not delra Is Nothing Then delra.EntireRow.Delete
End Sub

У меня макрос применяется 2 раза. Первый на маленькой таблице (и данных там меньше) и все обрабатывает удачно. А вот второй (на большой таблице), выдает ошибку "Run time error 1004; метод Delete из класса Range завершен неверно" и подсвечивает эту строку:
Код
If Not delra Is Nothing Then delra.EntireRow.Delete

кто-нибудь может подсказать, как исправить?
Изменено: wahnpolthensel - 23.09.2013 23:36:10
Создание макроса на изменение значений и формата
 
в столбце А имеются записи с фоматом "h:mm / dd.mm.yyyy". После окончания предыдущего макроса минуты и часы перестают быть нужными. соответственно нужно, что бы формат установился "dd.mm.yyyy" (так как эти данные будут потом еще использоватся), а так же значение часов и минут удалилось (потому что оно уже лишнее).
на примере:
а ячейке А2 имеется запись "9:11 / 01.12.2013" с форматом "h:mm / dd.mm.yyyy". нам нужно, что бы удалилось значение "9:11 / ", и осталось лишь "01.12.2013" и установился формат "dd.mm.yyyy". то есть тут надо и значение удалить, и формат изменить.
А макрос должен проверять по этому условию весь столбец А.

п.с. простите за мудреную задачу. надеюсь, я понял обьяснил суть макроса.
Обучение макросам в Excel
 
Цитата
Языки не "учат", а изучают.  :)  
спасибо, учту.
Цитата
Аркадий Дмитриевич Закревский ...Известен как разработчик языка программирования логических задач ЛЯПАС
простите, но я не понимаю к чему это
Обучение макросам в Excel
 
Мотя, с алгоритмизацией знаком и очень даже не плохо. и программирование сейчас помогает в оствоении этого "детища".
Цитата
2. Программированию и КОЗУ научить можно!
немного с вами не солгалушусь, ибо есть такие языки, которые выучить уж очень сложно. Вот там действительно нужен талант:))
Обучение макросам в Excel
 
ой, и в правду, тема понемногу превращается в дискуссию. Кого интересует, я не школьник и не студент, мне 22, а закончил я факультет "Автоматизации и компьютерных систем". Опыт с ООП имею, потому для меня пока сложно понять специфику Бэйсика и систаксис (ну, оно и понятно, ведь я вижу его впервые), а с остольным проблем особых не вижу, тот же с++ на голову сложнее (как по мне).
Kuzmich и KuklP спасибо за ссылки. уже скачал парочку книг, и учусь по ним.
Обучение макросам в Excel
 
Юрий М, знаю, что заранее глупоя идея, но именно потому и попросил ссылок на материалы, что бы самому подучить. конечно, можно учить все подряд, но в моем случае на вариант.
Обучение макросам в Excel
 
увы, нет. первым делом, что надо сделать, так это посчитать сколько времени пробыл человек на работе отняв время ухода от времени прихода, что бы потом можно было посчитать, сколько этот человек наработал за день, а в следствии, к примеру, за месяц. как это сделать функциями, или на том же Бэйзике я уже не знаю...
Сводная таблица помогла бы вытянуть весь лог одного пользователя на след. лист для непосредственной работы именно с мим, а не со всем логом.
Изменено: wahnpolthensel - 20.09.2013 20:34:16
Обучение макросам в Excel
 
Всем привет. Недавно я был приглашен на собеседование и не смог справится с заданием. Договорился с парнем, который его принимал, что прийду к ним через недельку, уже разобравшись с заданием и сделаю его, после чего меня, предположительно, возьмут на работу.
К сожеленью, именно того файла с которым я работал у меня нет, но я сделал очень похожий, который подойдет (он отличается от оригинала, лишь тем что там было около 60 000 строк). По сути, у нас есть лог проходного устройства. В нем есть поля "время", "действие", "№ турникета", "код пользовеля". Мое задание заключалось в том, что бы сделать сводку по пользователям, которые проходили через проходное устройство. Сводки могли быть разными: сколько пользователь проработал за месяц, сколько в среднем он работает в день, какой его "любимый" турникет, кто из пользователей больше всего проработал за месяц и т.д. (каких конкретных заданий не было, просто сделать разные сводки). Сам же файл прилаживаю ниже.
как я понимаю, это делается с помощью Visual Basic и макросов. Так как этот язык довольно обширный, то хотелось бы вас попросить несколько ссылочек, прочитав которые, я бы смог выполнить данное задание. все что угодно: какой-то видео урок, статья, глава в "такой-то книге" и т.д.
п.с. знаю, что логичней всего было бы просто взять какуе-то книгу и просто ее пройти всю, но из-за ограничений во времени, я так сделать не могу.
Всем заренее спасибо.
Страницы: 1
Наверх