Страницы: 1
RSS
Подстановка данных из одной таблицы в другую, путем сравнения по трем критериям., Поиск данных в двух таблицах по трем условиям
 
Всем доброго времени суток! Необходима помощь квалифицированных специалистов в области Excel, столкнулся с такой проблемой: есть две таблицы. В одну таблицу сведены данные следующего вида: фамилия водителя; номер машины; время начала погрузки и время конца погрузки, т.е. промежуток времени, когда водитель мог заправить машину. Во второй таблице данные: Фамилия водителя; время заправки и количество заправленного топлива. Необходимо к первой таблице по промежутку времени и фамилии водителя привязать количество заправленных литров. Особенность таблиц заключается в том, что заправка машины производится несколько раз в неделю одним и тем же водителем, водитель может ездить на разных машинах и заправлять разные машины, из-за чего возникает необходимость осуществить привязку заправленного топлива по трем параметрам: по промежутку времени заправки и фамилии водителя. Данную задачу мне удалось решить путем написания формулы ВПР и двух МАКРОСОВ. Проблема возникла в том, что самостоятельно не могу оптимизировать МАКРОС 2. Оптимизация заключается в том, что приходится писать много действий по строкам, так как в  таблице нр 1, мне необходимо, чтобы данные по заправке после сравнения сохранялись.
 
Андрей Морозов,  читал читал ничего не понял можно просто в файле показать вот это сходные данные вот это желаемый результат.
Получается она так (сравниваем это с тем и если так то это если иначе то вот так)
и какой смысл формулу вставлять макросом?
Изменено: Mershik - 28.06.2020 17:39:54
Не бойтесь совершенства. Вам его не достичь.
 
Формулу вставлял макросом, что бы значения после сравнения остались, а если подставить только формулу то находит только одно значение, мне нужна полная картина, что бы потом создать сводную таблицу.
 
Андрей Морозов, класс) все понятнее стало) удачи Вам)
Не бойтесь совершенства. Вам его не достичь.
 
Желаемый РЕЗУЛЬТАТ
Изменено: Андрей Морозов - 28.06.2020 18:19:16
 
Андрей Морозов, модератор будет Вас ругать, пример, результат и ваши попытки показывать нужно в файле ...лучше отредактируйте пред.сообщение.
Не бойтесь совершенства. Вам его не достичь.
 
Андрей Морозов, плохое название темы. Предложите новое, из которого будет понятна проблема/задача - модераторы поменяют.
И код следует оформлять соответствующим тегом: ищите такую кнопку (см. скрин) и исправьте своё сообщение.
 
Mershik,
Цитата
Юрий М написал:
плохое название темы.
Тема: Сколько было заправлено литров бензина по заданному водителю и в указанный промежуток времени.
в H2 и протянуть, но все же пока не понял зачем макрос...и почему в вашем последнем примере одни и те же данные в таблице 2, но в 1 какие то результаты...
Код
=ЕСЛИОШИБКА(НАИМЕНЬШИЙ(ЕСЛИ(($J$2:$J$14=A2)*(($L$2:$L$14<=C2)*($L$2:$L$14>=B2));Лист2!$K$2:$K$14);СЧЁТЕСЛИМН($A$1:A2;Лист2!$A2;$B$1:B2;"<="&C2;$C$1:C2;">="&B2));"")
Не бойтесь совершенства. Вам его не достичь.
 
НОВОЕ  НАЗВАНИЕ  ТЕМЫ: Сравнение данных из двух таблиц. Подстановка данных из одной таблицы в другую, путем сравнения по трем критериям. Оптимизация формул и макросов, наиболее рациональным путем.
Изменено: Андрей Морозов - 28.06.2020 18:30:59
 
Как по мне, эта тема — для платного раздела, т.к. тут целое недоТЗ
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Название поменял. Присоединяюсь к Mershik - зачем макросом вставлять формулы? Вставляйте в ячейки сразу значения, которые вычисляйте самим макросом.
 
Mershik, к сожалению ваша формула не работает, потому что идет сравнение построчно и когда дело доходит до разных фамилий в строках на этом все заканчивается.
Поэтому я и писал макрос , что бы каждая строка из второй таблицы сравнивалась со строками первой таблицы и данные строки удовлетворяющие условию сохранялись.  

Цитата
Jack Famous написал: Как по мне, эта тема — для платного раздела, т.к. тут целое недоТЗ
Да  задача решена, зачем мне платно, я попросил помощи об оптимизации второго макроса, как его можно сделать короче, а так все работает.
 
Доброе время суток
Версия Power Query
Изменено: Андрей VG - 28.06.2020 18:58:27
 
Макросом особых трудностей не вижу, если данные будут в таблицах корректные, а не как сейчас с этим Раусом... хотя и с такими сработает:
1. Ф.И.О. Литры Время взять в массив, чтоб там можно было обнулять не повредив источник.
2. Шаг цикла по таблице1, в нём цикл по массиву, проверяем есть ли литры, затем фио, затем время - если ОК, то суммируем в переменной, обнуляем литры в массиве.
3. Записываем из переменной в таблицу1, переменную обнуляем.
4. Шаг цикла по таблице1, и т.д.
Изменено: Hugo - 28.06.2020 19:04:18
 
Вот образец расчета: нажимаем Ctrl+ф и третий Макрос все считает, но как второй макрос покороче записать, ну и третий упростьть циклом.
Если выдает ошибку то поочередно сначала  Ctrl+я затем Ctrl+й, и так каждую строчку. Не пойму почему , но третий макрос вылетает.

Цитата
Андрей VG написал: Версия Power Query
В Power Query не смог ко времени привязаться, не нашел как по трем параметрам сравнить
 
Цитата
Андрей Морозов написал:
не нашел как по трем параметрам сравнить
Посмотрите, вдруг подойдёт :)
 
Код
Option Explicit

'1. Ф.И.О. Литры Время взять в массив, чтоб там можно было обнулять не повредив источник.
'2. Шаг цикла по таблице1, в нём цикл по массиву, проверяем есть ли литры, затем фио, затем время - если ОК, то суммируем в переменной, обнуляем литры в массиве.
'3. Записываем из переменной в таблицу1, переменную обнуляем.
'4. Шаг цикла по таблице1, и т.д.

Sub tt()
    Dim a, y&, i&, ii&, x#

    a = Range("Таблица5712").Value

    For i = 2 To Range("Таблица4").Rows.Count
        For ii = 2 To UBound(a)
            If a(ii, 2) > 0 Then
                If a(ii, 1) = Cells(i, 1) Then
                    If a(ii, 3) >= Cells(i, 2) Then
                        If a(ii, 3) <= Cells(i, 3) Then
                            x = x + a(ii, 2): a(ii, 2) = 0
                        End If
                    End If
                End If
            End If
        Next
        Cells(i, 7) = x: x = 0
    Next
End Sub

Изменено: Hugo - 28.06.2020 19:59:10
 
Цитата
Андрей VG написал:
Посмотрите, вдруг подойдёт
ОГРОМНОЕ Спасибо !!!, Андрей Ваше решение мне подходит, намного все упростилось !
 
Я смотрю там водители по несколько дней в рейсе, и что заправка только один раз?
А если 2, то вроде как PQ не считает, проверьте.
Кстати, я там выше забыл ФИО проверить, сейчас подправлю... :)
Изменено: Hugo - 28.06.2020 19:53:19
 
Цитата
Hugo написал:
и что заправка только один раз?
Логично, Игорь. Спасибо за корректировку. Подправил на возможность нескольких заправок водителем в заданный интервал времени.
 
Я свой код выше тоже поправил.
 
Цитата
Hugo написал: Я смотрю там водители по несколько дней в рейсе...
Здравствуйте Hugo, да бывает такая ситуация, но очень редко. Ваша формула работает, огромное спасибо!!!!

Цитата
Андрей VG написал: Подправил на возможность нескольких заправок водителем в заданный интервал времени.
Ну теперь вообще все супер!!! Спасибо большое!!!!
Страницы: 1
Наверх