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

Страницы: 1
Цикл удаления строк умной таблицы по условию
 
Добрый день!
Прошу помочь решить проблему. Необходимо в отсортированной умной таблице удалить строки, содержащие в столбце введенный параметр (пользователь вносит номер месяца, в 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)?
 
Код
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 правильно ищет последнее совпадение, но неправильно ищет первое: нужное значение находится во 2 строке, а макрос упорно выдает 3-ю.
Создание массива vba на основании столбца умной таблицы
 
Добрый день!
Подскажите, пожалуйста, как записать в массив значения целого столбца умной таблицы для последующего переноса из массива в другую умную таблицу?
Пыталась сделать без использования массива, но на большом объеме данных теряется очень много значений.
Определить текущую должность сотрудника, Индекс+поискпоз, ВПР, функции массива?
 
Добрый день!
Есть две таблицы: одна - ведомость изменения должностей в штате (лист "Сотрудники", а в другую нужно подтянуть текущую должность сотрудника (лист "Таблицы соответствия").

Помогите, пожалуйста, с формулой.
Заранее благодарю
Изменено: Елена Дроздова - 19.09.2023 15:44:44
Поиск подходящих дат по номеру месяца 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
 
Добрый день!
Помогите, пожалуйста, удалить все строки из умной таблицы!
Код
tbl.DataBodyRange.Delete

Вот этот код очищает их, а мне бы удалить совсем или сделать resize в меньшую сторону
Работа с массивами данных vba, Сортировка, вывод уникальных значений
 
Добрый день!
Прошу помочь в решении вопроса: как с помощью vba вывести на лист уникальные значения сформированного ранее массива, отсортированные по возрастанию?
Лист "Для заполнения" содержит реестр, в котором указано, когда кто сколько и где работал. На листе "Табель" необходимо вывести сформированный табель на основании этого реестра.
План такой: по номеру месяца, указанному на листе "Табель", найти соответствующие строки на листе "Для заполнения". Вычленить из даты дни, вывести их по порядку в строку с названиями столбцов. Далее вывести в соответствующие столбцы данные по сотрудникам (фио уникальные, должность и т.д.), затем уже заполнить получившуюся таблицу значениями по количеству отработанного времени.

P.S.: пробовала решить данную задачу с помощью сводной таблицы, но есть затык: в полях значений числовые данные суммируются, а значения типа ОТ (отпуск) или Б (болел)  отражаются как 0, и не получается перенести их в сводную в буквенном виде. Если этот затык можно решить, то можно обойтись без макроса.
Поиск и подстановка статуса закупки материалов в реестр замечаний, Работа с умными таблицами vba
 
В таблице "Реестр претензионного отдела" хранятся замечания от собственников помещений. В столбце J проставлены статусы этих замечаний.
В таблице "Материалы" хранится перечень материалов, которые необходимо закупить для устранения замечаний. В столбце K проставлены статусы закупки этих материалов.
Задача: найти в реестре замечания, имеющие статус "Ожидание ТМЦ", определить их №п/п, затем найти в таблице "Материалы" строки, соответствующие этому замечанию (поиск идентификатора в таблице "Материалы" осуществляется по столбцу M, идентификатор в реестре получается путем сцепления значений из столбцов D и A) и определить статус закупки материалов в столбце K. Затем, если одному замечанию соответствует несколько материалов, выбрать худший из статусов и вернуть его в реестр в столбец P.

В результате работы макроса в столбце P должны появиться следующие значения:
P2 = Передано в снабжение
P3 = Доставлено
P4 = (пусто)
P5 = В оплате

Я начала писать макрос, но поиск не работает или работает неправильно. Помогите, пожалуйста, разобраться.
Если что-то непонятно, спрашивайте, я постараюсь объяснить.
Определить количество строк в умной таблице vba
 
Добрый день!
Пытаюсь посчитать количество строк в умной таблице. Подскажите, пожалуйста, почему строка выдает ошибку 438?
Код
LastRow = Workbooks("Книга1.xlsm").Worksheets("Лист1").ListObject("Таблица1").ListRows.Count
Изменено: Елена Дроздова - 15.06.2022 11:13:39
Подогнать размеры одной умной таблицы под размеры другой умной таблицы
 
Тупой вопрос. Есть две умных таблицы. Размер второй умной таблицы должен соответствовать размерам первой умной таблицы (это нужно для копирования только значений из одной таблицы в другую). Как сделать Resize без присвоения значений? Или это вообще по-другому делается?
Копировать столбец умной таблицы в другую умную таблицу vba
 
Добрый день! 3 вопроса:
1. Необходимо копировать (или присвоить) значения из одной умной таблицы в другую (столбец целиком). Как это сделать?
2. Можно ли копировать умную таблицу целиком в другую умную таблицу, заменив формулы значениями, если вторая умная таблица содержит те же столбцы, что и первая, но между ними есть еще другие столбцы?
3. Можно ли второй вопрос реализовать без помощи макросов, но чтобы связь между двумя таблицами была жесткая и значения из дополнительных столбцов точно не могли никуда поехать при подгрузке данных из первой таблицы?
Разогнать макрос, Требуется подтянуть данные из одной таблицы в другую, таблицы имеют большое число строк (более 10 тысяч), обрабатываются долго
 
Добрый день!
У меня есть основная таблица "Реестр Претензионного отдела", которая ежедневно должна забирать данные из таблицы "Материалы". Необходимо найти по номеру обращения и типу помещения (opr) требующиеся материалы и определить статус их закупки. Общий статус обращения вычисляется по худшему из статусов по материалам. Я написала макрос, но пока не запускала его из-за того, что он точно будет слишком долго считать, поэтому могут быть ошибки)
Помогите, пожалуйста, решить мою задачу максимально быстрым макросом! Код прилагаю.
Код
Sub ПодгрузитьЗаявки()
    lastrow1 = Workbooks("Реестр Претензионного отдела.xlsm").Sheets("РЕЕСТР").ListObject("Реестр").Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
    Workbooks.Open ("C:\Users\Мария\OneDrive\Работа\Материалы.xlsm")
    For i = 2 To lastrow1
        If Workbooks("Реестр Претензионного отдела.xlsm").Sheets("РЕЕСТР").ListObject("Потребность").Cells(i, 9) = "Ожидание ТМЦ" Then
            opr = Workbooks("Реестр Претензионного отдела.xlsm").Sheets("РЕЕСТР").ListObject("Реестр").Cells(i, 4).Value + Workbooks("Реестр Претензионного отдела.xlsm").Sheets("РЕЕСТР").ListObject("Реестр").Cells(i, 1).Value
            stat_m = Workbooks("Материалы.xlsm").Sheets("Потребность").ListObject("Потребность").Range.Find(opr)
            j = stat_m.Row
            status = Workbooks("Материалы.xlsm").Sheets("Потребность").ListObject("Потребность").Cells(j, 11)
            Select Case status
                Case status = "Доставлено"
                    stat = "Доставлено"
                    stat_m = Workbooks("Материалы.xlsm").Sheets("Потребность").ListObject("Потребность").Range.FindNext(stat_m)
                Case status = "Оплачено"
                    stat = "Оплачено"
                    stat_m = Workbooks("Материалы.xlsm").Sheets("Потребность").ListObject("Потребность").Range.FindNext(stat_m)
                Case status = "В оплате"
                    stat = "в оплате"
                    stat_m = Workbooks("Материалы.xlsm").Sheets("Потребность").ListObject("Потребность").Range.FindNext(stat_m)
                Case status = "К оплате"
                    stat = "К оплате"
                    stat_m = Workbooks("Материалы.xlsm").Sheets("Потребность").ListObject("Потребность").Range.FindNext(stat_m)
                Case status = "Заказано"
                    stat = "Заказано"
                    stat_m = Workbooks("Материалы.xlsm").Sheets("Потребность").ListObject("Потребность").Range.FindNext(stat_m)
                Case status = "На обработке в снабжении"
                    stat = "На обработке в снабжении"
                    stat_m = Workbooks("Материалы.xlsm").Sheets("Потребность").ListObject("Потребность").Range.FindNext(stat_m)
                Case status = "Передано в снабжение"
                    stat = "Передано в снабжение"
                    stat_m = Workbooks("Материалы.xlsm").Sheets("Потребность").ListObject("Потребность").Range.FindNext(stat_m)
                Case status = "Заказать"
                    stat = "Заказать"
                    stat_m = Workbooks("Материалы.xlsm").Sheets("Потребность").ListObject("Потребность").Range.FindNext(stat_m)
            End Select
            Workbooks("Реестр Претензионного отдела.xlsm").Sheets("РЕЕСТР").ListObject("Реестр").Cells(i, 15) = stat
        End If
    Next i
End Sub
Изменено: Елена Дроздова - 07.06.2022 14:32:14
Некорректная работа макроса по заполнению и выводу информации на разных листах таблицы
 
Добрый день!
Уже думала, что решила свою задачку, да не тут-то было. Код работает правильно, все делает как надо. Но! Если добавить в "Потребность" новую строку, после чего запустить макрос, он ее как будто не видит - с ней ничего не происходит. Если же начинать цикл не с начальной 2ой строки, а с той, с которой нужно работать, то все срабатывает, как надо. В чем подвох?
Вычисляемый столбец умной таблицы, Задать формулу вычисляемому столбцу с помощью макроса
 
Последний (наверное) вопрос по теме.
Умная таблица заполняется макросом данными с другого листа. В одном из ее столбцов значение ячейки должно вычисляться по формуле.
Как с помощью макроса задать эту формулу?
Либо другой вариант. Задать значение ячейки в столбце по умолчанию.

Проблема в том, что умная таблица может быть пуста, поэтому прописать формулы вручную не получается - они просто сотрутся.
Заполнение умной таблицы макросом, Заполнение умной таблицы по условию с помощью макроса
 
Добрый день!
Хотела все-таки сама справиться с задачей, но силенок мало.
Есть Потребность, исходя из которой формируются Заявки. Логика следующая: просмотреть умную таблицу "Потребность", найти строки, по которым заявка не была сформирована (столбец "Сформировано"="Нет"), на основании данных в столбце "Способ получения" раскидать эту потребность по трем листам заявок: "Заявки БК", если банковская карта, "заявки Петрович", если Петрович, "Заявки снабжение", если снабжение. На листах заявок умные таблицы могут как содержать данные, так и быть пустыми. Необходимо заполнить эти заявки. Если один и тот же материал на один и тот же объект уже находится в статусе "Заказать" (статус в перспективе будет вычисляться формулой), то необходимо перезаписать эту строку, увеличив количество материала и добавив назначение. Если нет, то нужно добавить новую строку в соответствии с Потребностью. После того, как данные из Потребности будут перенесены в Заявки, необходимо изменить значение столбца "Сформировано" в "Потребности" на "Да". После того, как вся Потребность будет проработана, нужно сообщить о том, что заявки сформированы.
Помогите, пожалуйста, разобраться в вопросе и реализовать процесс заполнения Заявки на примере Заявки БК.
Прикладываю не работающий фрагмент кода и сам файл. Заранее благодарю за помощь!!!
Код
                Sheets("Заявки БК").Select
                With ActiveSheet.ListObjects("БК")
                    Set r = ActiveSheet.ListObjects(1).Range.Cells(1).Offset(ActiveSheet.ListObjects(1).CurrentRegion.Rows.Count, 0)
                    If r Is Nothing Then
                        LastRow1 = 1
                    Else
                        LastRow1 = Rows(r)
                    End If
                    
                    For j = 1 To LastRow1
                        If Not .DataBodyRange Is Nothing Then
                            If IsEmpty(.DataBodyRange.Cells(1, 1)) Then
                                .Range.Cells(j, 1).Value = name
                                .Range.Cells(j, 2).Value = ed
                                .Range.Cells(j, 3).Value = kol
                                .Range.Cells(j, 4).Value = ob
                                .Range.Cells(j, 5).Value = kuda
                            Else
                                If .Range.Cells(j, 1).Value = name And .Range.Cells(j, 4).Value = ob And .Range.Cells(j, 6).Value = "Заказать" Then
                                    .Range.Cells(j + 1, 3).Value = CDbl(Cells(j, 3)) + kol
                                    .Range.Cells(j + 1, 5).Value = Cells(j, 5) + "; " + kuda
                                Else
                                    .Range.Cells(j + 1, 1).Value = name
                                    .Range.Cells(j + 1, 2).Value = ed
                                    .Range.Cells(j + 1, 3).Value = kol
                                    .Range.Cells(j + 1, 4).Value = ob
                                    .Range.Cells(j + 1, 5).Value = kuda
                                End If
                            End If
                        Else
                            .InsertRowRange(1, 1) = name
                            .InsertRowRange(1, 2) = ed
                            .InsertRowRange(1, 3) = kol
                            .InsertRowRange(1, 4) = ob
                            .InsertRowRange(1, 5) = kuda
                            Set r = ActiveSheet.ListObjects(1).Range.Cells(1).Offset(ActiveSheet.ListObjects(1).CurrentRegion.Rows.Count, 0)
                        End If
                    Next j
                End With
Заполнение умной таблицы макросом, Внести данные в умную таблицу с помощью макроса
 
Добрый день!
Подскажите, пожалуйста, как сделать так, чтобы макрос заполнял строки не под умной таблицей, а внутри нее?
Исходный код:
               LastRow1 = Cells(Rows.Count, 1).End(xlUp).Row
               For j = 2 To LastRow1
                   If Cells(j, 1) = name And Cells(j, 6) = "Заказать" And Cells(j, 4) = ob Then
                       Cells(j, 3) = CDbl(Cells(j, 3)) + kol
                       Cells(j, 5) = Cells(j, 5) + "; " + kuda
                   Else
                       Cells(LastRow1 + 1, 1) = name
                       Cells(LastRow1 + 1, 2) = ed
                       Cells(LastRow1 + 1, 3) = kol
                       Cells(LastRow1 + 1, 4) = ob
                       Cells(LastRow1 + 1, 5) = kuda
                   End If
Уже выяснили, что для подсчета строк в умной таблице стоит использовать формулу:
               LastRow1 = Worksheets(2).ListObjects(1).ListRows.Count
Остался вопрос, как заполнить содержимое внутри умной таблицы, чтобы макрос не перескакивал через нее.
Изменено: Елена Дроздова - 15.04.2022 12:35:37
Подсчет строк умной таблицы vba, Определить последнюю заполненную строку умной таблицы без учета заголовков
 
Добрый день!
Для подсчета количества строк умной таблицы ранее использовала следующую формулу: LastRow1 = Cells(Rows.Count, 1).End(xlUp).Row - работала безупречно до тех пор, пока передо мной не встала задача посчитать количество строк в таблице, которая может быть пустой. В этом случае эта формула выводит верное значение строк (1), но первая строка является заголовком. Дальнейший код предполагает заполнение умной таблицы, а поскольку строк там 1, мы не попадаем в цикл.
               LastRow1 = Cells(Rows.Count, 1).End(xlUp).Row
               For j = 2 To LastRow1
                   If Cells(j, 1) = name And Cells(j, 6) = "Заказать" And Cells(j, 4) = ob Then
                       Cells(j, 3) = CDbl(Cells(j, 3)) + kol
                       Cells(j, 5) = Cells(j, 5) + "; " + kuda
                   Else
                       Cells(LastRow1 + 1, 1) = name
                       Cells(LastRow1 + 1, 2) = ed
                       Cells(LastRow1 + 1, 3) = kol
                       Cells(LastRow1 + 1, 4) = ob
                       Cells(LastRow1 + 1, 5) = kuda
                   End If
               Next j
Помогите решить проблему, пожалуйста
Изменено: Елена Дроздова - 15.04.2022 11:45:38
Вывести список корпусов с одного листа на объекте, указанном на другом листе
 
Добрый день!
Прошу помочь в решении следующей задачи:
На листе "Библиотека" имеется список объектов, соответствующих им корпусов и помещений. Также список корпусов каждого объекта имеется на листе "Списки", причем наименования объектов там являются заголовками.
На листе "СТАТИСТИКА" В ячейке В1 пользователь выбирает объект, после чего в ячейках D7:T7 должен быть выведен массив из корпусов, соответствующих этому объекту.

Я попробовала использовать формулу массива, но что-то пошло не так. Кажется, проблема в том, что значения должны быть уникальны.
Код
 ИНДЕКС(Таблица3[Корпус];НАИМЕНЬШИЙ(ЕСЛИ(СТАТИСТИКА!$B$1=Таблица3[
    ЖК];СТРОКА(Таблица3[Корпус]);"");СТРОКА()-СТРОКА(Таблица3[#Заголовки]))-СТОЛБЕЦ(СТАТИСТИКА!$C$7))

Помогите, пожалуйста. Заранее спасибо!
Изменено: vikttur - 15.07.2021 15:04:02
По заданному наименованию объекта вывести связанные с ним данные
 
Эта задачка посложнее предыдущей. Помогите, пожалуйста.

Лист1 - исходная таблица, в которой указаны документы, связанные с объектом
Лист2 - таблица, в которой необходимо предоставить выборку

Сложность в том, что для одного объекта может быть указан только один документ, а для другого - несколько. Кроме того, новые столбцы с новыми документами могут быть добавлены, при этом формула не должна ломаться.
Задача заключается в том, чтобы с помощью формулы вывести список всех указанных документов для объекта из выпадающего списка, их регистрационные номера и даты.
Изменено: Елена Дроздова - 14.04.2021 15:16:47
По заданному наименованию организации вывести список всех контактных лиц и их данные
 
Подскажите, пожалуйста, как решить задачу: в таблице А содержатся данные по заказчику (наименование организации, контактное лицо, должность, почта, телефон). В таблицу Б нужно вывести список всех контактных лиц с указанием их должности, почты и телефона, соответствующих заданному наименованию организации (сделать выборку). Индекс+ПоискПоз выводят только одну (первую, удовлетворяющую условию) строчку.
Заранее спасибо.
Страницы: 1
Наверх