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

Страницы: 1 2 3 4 5 След.
Цикл удаления строк умной таблицы по условию
 
Код
arr_mes1 = Workbooks("ËþäèÄåíüãè2023PRO.xlsm").Worksheets("Äëÿ çàïîëíåíèÿ").ListObjects("Çàïîëíåíèå").DataBodyRange.Columns(20).Value
    ReDim arr_mes2(1 To UBound(arr_mes1))
    For i = 1 To UBound(arr_mes1)
        arr_mes2(i) = arr_mes1(i, 1)
    Next
    stroka = WorksheetFunction.Match(mes, arr_mes2, 0) + 1
    arr_mes3 = Filter(arr_mes2, mes)
    For i = stroka To stroka + UBound(arr_mes3)
        Workbooks("ËþäèÄåíüãè2023PRO.xlsm").Worksheets("Äëÿ çàïîëíåíèÿ").ListObjects("Çàïîëíåíèå").ListRows(i).Delete
    Next i

Вот так сработало)) спасибо)
Цикл удаления строк умной таблицы по условию
 
Хотела еще так попробовать, но почему-то возникает ошибка несоответствия типов в строке arr_mes3 = Filter(arr_mes2, mes, include, 0):
Код
    arr_mes1 = Workbooks("ËþäèÄåíüãè2023PRO.xlsm").Worksheets("Äëÿ çàïîëíåíèÿ").ListObjects("Çàïîëíåíèå").DataBodyRange.Columns(20).Value
    ReDim arr_mes2(1 To UBound(arr_mes1))
    For i = 1 To UBound(arr_mes1)
        arr_mes2(i) = arr_mes1(i, 1)
    Next
    stroka = WorksheetFunction.Match(mes, arr_mes2, 0) + 1
    arr_mes3 = Filter(arr_mes2, mes, include, 0)
    For i = stroka To stroka + UBound(arr_mes3)
        Workbooks("ËþäèÄåíüãè2023PRO.xlsm").Worksheets("Äëÿ çàïîëíåíèÿ").ListObjects("Çàïîëíåíèå").ListRows(i).Delete
    Next i
Изменено: Елена Дроздова - 25.10.2023 12:42:12
Цикл удаления строк умной таблицы по условию
 
Но здесь все строки проверяются на совпадение, а я хотела сократить путь, найдя первую точку входа. Так-то и через for + if можно сделать, я так делала уже, но было долго. Потом пробовала через find первого и последнего попадания, но этот метод мне не понравился.
Цикл удаления строк умной таблицы по условию
 
МатросНаЗебре, спасибо!
Цикл удаления строк умной таблицы по условию
 
Добрый день!
Прошу помочь решить проблему. Необходимо в отсортированной умной таблице удалить строки, содержащие в столбце введенный параметр (пользователь вносит номер месяца, в 20-ом столбце таблицы содержатся номера месяцев, таблица отсортирована по дате).
Попробовала сделать это следующим образом, но, похоже, где-то идет зацикливание, потому что строки сначала удаляются как надо, а потом все зависает:
Код
    arr_mes1 = Workbooks("ЛюдиДеньги2023PRO.xlsm").Worksheets("Для заполнения").ListObjects("Заполнение").DataBodyRange.Columns(20).Value
    On Error Resume Next
    i = WorksheetFunction.Match(mes, arr_mes1, 0)
    
    Do While Workbooks("ЛюдиДеньги2023PRO.xlsm").Worksheets("Для заполнения").ListObjects("Заполнение").DataBodyRange.Cells(i, 20) = mes
        Workbooks("ЛюдиДеньги2023PRO.xlsm").Worksheets("Для заполнения").ListObjects("Заполнение").ListRows(i).Delete
    Loop
Что не так с массивом (vba)?
 
МатросНаЗебре, Jack Famous, спасибо вам большое!
Что не так с массивом (vba)?
 
Sanja, рада бы предложить нормальное название темы, но не могу его сформулировать, т.к. не понимаю, в чем вообще проблема)))
Что не так с массивом (vba)?
 
Jack Famous, проблем в изучении массивов с нуля или в чем?
Почему даже при явном обращении к элементу массива arr_mes(1) возникает та же ошибка? При том, что нижняя граница 1, а верхняя - 3408?
Что не так с массивом (vba)?
 
Код
arr_mes = Workbooks("ËþäèÄåíüãè2023PRO.xlsm").Worksheets("Ó÷åò ðàáî÷åãî âðåìåíè").ListObjects("Ó÷åòÐàáî÷åãîÂðåìåíè").DataBodyRange.Columns(7).Value
stroka1 = LBound(arr_mes)
    stroka2 = UBound(arr_mes)
      
    For i = stroka1 To stroka2
        If arr_mes(i) = mes Then
            k = k + 1
            ReDim arr_tek_mes(1 To k)
            arr_tek_mes(k) = arr_mes
        End If
    Next i

Добрый день!
Помогите, пожалуйста. Записываю в массив значения столбца умной таблицы, затем ищу определенные значения в этом массиве и перезаписываю их в другой массив. Проблема: arr_mes(i) выдает ошибку "Индекс выходит за пределы допустимого диапазона". Как так?
Изменено: Елена Дроздова - 23.10.2023 15:08:08
[ Закрыто] Функция Find неверно ищет первое совпадение
 
Цитата
написал:
кто-нибудь, скажите ей
Почувствовала себя прям школьницей...
Пойду искать альтернативные типы поиска и сравнения... Нелегко быть самоучкой(
[ Закрыто] Функция Find неверно ищет первое совпадение
 
Цитата
написал:
поиск в массиве гораздо удобнее, однозначнее и более гибкий
С этим я согласна. Но у меня задача провести операции с теми строками, которые попадают под определенное условие: если в столбце есть нужное значение, то делаем, если нет - идем дальше. Сама таблица содержит более 16 тысяч строк, поэтому выполнение цикла по всей таблице придется ждать всю ночь. Поэтому я решила отсортировать таблицу по этому столбцу, найти первое и последнее включение нужного значения и сократить цикл до его выполнения между этими включениями. Так, кажется, быстрее)
[ Закрыто] Функция Find неверно ищет первое совпадение
 
Теперь понятно, спасибо большое
[ Закрыто] Функция Find неверно ищет первое совпадение
 
Цитата
написал:
Попробуйте так
Спасибо, помогло. Принцип, правда, не очень понятен, но ладно, приму как данность)
[ Закрыто] Функция Find неверно ищет первое совпадение
 
Добрый день!
Прошу помочь разобраться. Функция Find правильно ищет последнее совпадение, но неправильно ищет первое: нужное значение находится во 2 строке, а макрос упорно выдает 3-ю.
Создание массива vba на основании столбца умной таблицы
 
Ну конечно же... Я сама чищу данные с 15000 строки  :D
Благодарю за помощь!!!
Создание массива vba на основании столбца умной таблицы
 
Цитата
написал:
все переносится
Решение гениальное, я не догадалась так просто скопировать... Но с ограничением в 14999 все равно не прокатило(
Создание массива vba на основании столбца умной таблицы
 
Попробовала без цикла. Работает быстро, но когда в исходнике 16141 строка, в результате получается только 14999. И каким бы способом я ни пыталась решить эту проблему, ничего не выходит. Упорно 14999. А мне нужно, чтобы все данные из исходника были перенесены в результат. Так что массив не помог((
Изменено: Елена Дроздова - 10.10.2023 16:30:31
Создание массива vba на основании столбца умной таблицы
 
Прикладываю пример с попыткой использования массива.
Вроде работает, но на большом объеме данных делает это очень долго.

Можно по-другому? Подскажите, пожалуйста, как?
Изменено: Елена Дроздова - 10.10.2023 16:11:14
Создание массива vba на основании столбца умной таблицы
 
Добрый день!
Подскажите, пожалуйста, как записать в массив значения целого столбца умной таблицы для последующего переноса из массива в другую умную таблицу?
Пыталась сделать без использования массива, но на большом объеме данных теряется очень много значений.
Определить текущую должность сотрудника, Индекс+поискпоз, ВПР, функции массива?
 
Цитата
написал:
просмотр последнюю возьмет, а не максимальную
Хотелось бы этого избежать. пока решила вопрос макросом, но хотелось бы, конечно, формулу использовать...
Определить текущую должность сотрудника, Индекс+поискпоз, ВПР, функции массива?
 
Или хотя бы определить номер строки, в которой все условия выполняются
Определить текущую должность сотрудника, Индекс+поискпоз, ВПР, функции массива?
 
Цитата
написал:
поиск последнего по условию, а если есть дата то по максимальной дате
Вот, я пытаюсь найти такое, но не понимаю, как сделать поиск по разным критериям, то есть одновременно по ФИО и по дате, которую нужно либо сравнить с сегодняшней, либо найти максимальную дату начала
Определить текущую должность сотрудника, Индекс+поискпоз, ВПР, функции массива?
 
Добрый день!
Есть две таблицы: одна - ведомость изменения должностей в штате (лист "Сотрудники", а в другую нужно подтянуть текущую должность сотрудника (лист "Таблицы соответствия").

Помогите, пожалуйста, с формулой.
Заранее благодарю
Изменено: Елена Дроздова - 19.09.2023 15:44:44
Поиск подходящих дат по номеру месяца vba, функция find
 
Цитата
написал:
У Вас в переменной mes дата - 08.01.1900. Вот ее Вы и ищите в таблице.
Вот именно. Мне нужно как-то объяснить макросу, что искать нужно именно номер месяца, но у меня ничего не получается
Поиск подходящих дат по номеру месяца vba, функция find
 
Добрый день!
Учусь работать со словарями.
На листе 1 перечень дат и сотрудников, которые работали в эти даты, а также информация, сколько часов на каком из объектов они проработали.
На листе 2 задается номер месяца и требуется сформировать словарь, содержащий уникальных сотрудников, работавших в этом месяце, и вывести его в столбец "Сотрудник".
Следующая задача - посчитать суммарное количество времени, которое проработал сотрудник в определенный день и вывести его на пересечении фамилии и даты.
Пока что я застряла на том, что не могу через функцию Find найти нужный месяц в перечне дат. Прошу помочь, заранее благодарна.
Могу пойти от обратного и сделать сравнение месяца, полученного из каждой конкретной даты, с тем, который задан на листе 2, написать цикл, но с Find тоже хочу научиться работать
Изменено: Елена Дроздова - 06.09.2023 12:05:24
Подсчет общего количества отработанного времени на разных объектах и определение переработки vba, Поиск строки по двум условиям и запись в массив?
 
Добрый день!
Таблица содержит столбцы "Дата", "Тип дня", "ФИО", "Объект", "Отработанное время", "Переработка". Необходимо с помощью макроса определить, попадает ли строка под определение переработки или нет.
Переработкой является все, что больше нуля, если тип дня = выходной, а также излишне отработанное время в рабочие дни, т.е. если отработанное время >8 (при отработанном времени в рабочий день = 10ч переработка должна равняться 2ч).
Проблема: в одну и ту же дату один и тот же человек может работать на нескольких объектах. Например, 3 часа на объекте А и 6 часов на объекте Б. Сами по себе такие строки не попадают под переработку, но в сумме дают количество часов >8, поэтому в строке, где указан объект Б, переработка должна равняться 3+6-8=1 ч.
Предполагаю, что необходимо осуществить в цикле по всей таблице поиск текущего фио и текущей даты, запись отработанного времени в массив, далее вычисления. Не умею работать с поиском, тем более по нескольким критериям. Можно втупую через цикл в цикле, где каждая строка сравнивается со всеми, но когда таких строк много, будет очень долго.
Помогите, пожалуйста, решить задачу!
Удалить строки из умной таблицы vba
 
RAN, да, так тоже работает и выглядит логичнее. Спасибо!
Удалить строки из умной таблицы vba
 
Если в умной таблице остается одна пустая строка, то команда
Код
tbl.DataBodyRange.Delete 

вызывает ошибку.

Я попробовала добавить обработчик:

Код
    If IsEmpty(tbl.DataBodyRange) Then        tbl.DataBodyRange.Delete    End If

Если в таблице одна пустая строка, то код выполняется, а если нет, то старые данные оказываются вне таблицы, а строка внутри таблицы перезаписывается.

Я, вероятно, чего-то не понимаю, но по моей логике должно быть ровно наоборот)

В итоге, правильно работает (или мне так кажется?) вот этот код, но кто-нибудь может мне объяснить, почему так???  :D

Код
    If Not IsEmpty(tbl.DataBodyRange) Then        tbl.DataBodyRange.Delete    End If

Работа с массивами данных vba, Сортировка, вывод уникальных значений
 
Огромное спасибо за помощь!
Работа с массивами данных vba, Сортировка, вывод уникальных значений
 
МатросНаЗебре, а как мне теперь на лист "Тайминг" вывести в столбик уникальные ФИО, отсортированные по возрастанию, а в строчку - уникальные объекты, тоже отсортированные по возрастанию, в соответствии с выбором того же месяца, что и в табеле?
Страницы: 1 2 3 4 5 След.
Loading...