Фамилия и дата могут повторяться, но время будет разным. Так вот задача такая: Оставить фамилию за одну дату, где самое минимальное время.
Например:
Иванов Иван Иванович 01.04.2013 8:30 Иванов Иван Иванович 01.04.2013 9:02 Иванов Иван Иванович 02.04.2013 8:15 Петров Петр Петрович 01.04.2013 8:20 Петров Петр Петрович 01.04.2013 9:25 Петров Петр Петрович 02.04.2013 8:30 Петров Петр Петрович 02.04.2013 9:22
Результат выполнения макроса, должен отобразить вот так:
Иванов Иван Иванович 01.04.2013 8:30 Иванов Иван Иванович 02.04.2013 8:15 Петров Петр Петрович 01.04.2013 8:20 Петров Петр Петрович 02.04.2013 8:30
Помогите пожалуйста, с решением данной задачи. Спасибо!
Доброго дня. Имеется таблица в Excel:
ФИО | Дата | Время
Фамилия и дата могут повторяться, но время будет разным. Так вот задача такая: Оставить фамилию за одну дату, где самое минимальное время.
Например:
Иванов Иван Иванович 01.04.2013 8:30 Иванов Иван Иванович 01.04.2013 9:02 Иванов Иван Иванович 02.04.2013 8:15 Петров Петр Петрович 01.04.2013 8:20 Петров Петр Петрович 01.04.2013 9:25 Петров Петр Петрович 02.04.2013 8:30 Петров Петр Петрович 02.04.2013 9:22
Результат выполнения макроса, должен отобразить вот так:
Иванов Иван Иванович 01.04.2013 8:30 Иванов Иван Иванович 02.04.2013 8:15 Петров Петр Петрович 01.04.2013 8:20 Петров Петр Петрович 02.04.2013 8:30
Помогите пожалуйста, с решением данной задачи. Спасибо!Евгений_88
Если время для повторяющейся даты идет в порядке возрастания, как Вы написали, то с задачей вполне справится инструмент УДАЛИТЬ ДУБЛИКАТЫ.
Файл приложил. Данные внес для примера. Так-то данных будет очень много, подобного рода. Если я просто удалю дубликаты, то не будет сработано правило, что мне нужны только те записи, где минимальное время по каждой ФИО.
Цитата (Pelena)
Если время для повторяющейся даты идет в порядке возрастания, как Вы написали, то с задачей вполне справится инструмент УДАЛИТЬ ДУБЛИКАТЫ.
Файл приложил. Данные внес для примера. Так-то данных будет очень много, подобного рода. Если я просто удалю дубликаты, то не будет сработано правило, что мне нужны только те записи, где минимальное время по каждой ФИО.Евгений_88
для нормальных значений: формула массива в D2 =C2=МИН(ЕСЛИ(($A$2:$A$8=A2)*($B$2:$B$8=B2);$C$2:$C$8;9E+99)) протянуть вниз, отфильтровать по значению ЛОЖЬ, попавшее в фильтр удалить.
По этой формуле получается одно значение с "ИСТИНА": Иванов Иван Иванович 02.04.2013 8:15:00
А из данного примера, должно получиться 4 строки. Вот второй вариант, от пользователя "Palena" - подходит и работает правильно. Но вот вопрос следующий тогда. Мне вообще необходимо обрабатывать данные по кнопке, на которой был бы макрос. С отфильтрованными данными потом буду производить ещё некие операции. Вот хотелось бы узнать, как этот фильтр прописать в коде? Где открыть его обозначение? Чтобы подставить в макрос?
Цитата (ikki)
для нормальных значений: формула массива в D2 =C2=МИН(ЕСЛИ(($A$2:$A$8=A2)*($B$2:$B$8=B2);$C$2:$C$8;9E+99)) протянуть вниз, отфильтровать по значению ЛОЖЬ, попавшее в фильтр удалить.
По этой формуле получается одно значение с "ИСТИНА": Иванов Иван Иванович 02.04.2013 8:15:00
А из данного примера, должно получиться 4 строки. Вот второй вариант, от пользователя "Palena" - подходит и работает правильно. Но вот вопрос следующий тогда. Мне вообще необходимо обрабатывать данные по кнопке, на которой был бы макрос. С отфильтрованными данными потом буду производить ещё некие операции. Вот хотелось бы узнать, как этот фильтр прописать в коде? Где открыть его обозначение? Чтобы подставить в макрос?Евгений_88
если вы не знаете, что это такое (как, к примеру, не различаете xls и xlsx) - надо было спросить. формула рабочая.
Да всё я знаю. Опыт программирования 5 лет на Delphi. На Delphi бы уже давным давно решил бы эту задачу. Но, необходимо в Excel. Не хочется влезать в VBA. Намного быстрее сделать с помощью макроса. Если есть фильтр на сводную таблицу, соответственно он (кодинг), где-то прописан. Вот я и хотел узнать где, чтобы потом "слепить" то всё в макрос.
Цитата (ikki)
если вы не знаете, что это такое (как, к примеру, не различаете xls и xlsx) - надо было спросить. формула рабочая.
Да всё я знаю. Опыт программирования 5 лет на Delphi. На Delphi бы уже давным давно решил бы эту задачу. Но, необходимо в Excel. Не хочется влезать в VBA. Намного быстрее сделать с помощью макроса. Если есть фильтр на сводную таблицу, соответственно он (кодинг), где-то прописан. Вот я и хотел узнать где, чтобы потом "слепить" то всё в макрос.Евгений_88
Не хочется влезать в VBA. Намного быстрее сделать с помощью макроса.
- вот тут не понял
В Delphi есть словарь? В этой задаче я бы (если делал макросом) собирал бы в словарь фио-дата, каждой в item массив с номером нужной строки и временем. Время анализируем, по результату оставляем/обновляем номер строки. Т.к. время как уже сказано безалаберное - его по ходу дела приводим к нужному виду. После этого цикл по словарю и копируем отобранные строки. Или сразу и делаем эти "некие операции".
Цитата (Евгений_88)
Не хочется влезать в VBA. Намного быстрее сделать с помощью макроса.
- вот тут не понял
В Delphi есть словарь? В этой задаче я бы (если делал макросом) собирал бы в словарь фио-дата, каждой в item массив с номером нужной строки и временем. Время анализируем, по результату оставляем/обновляем номер строки. Т.к. время как уже сказано безалаберное - его по ходу дела приводим к нужному виду. После этого цикл по словарю и копируем отобранные строки. Или сразу и делаем эти "некие операции".Hugo
и последнее моё замечание в этой теме... все эти фильтры/сводные - это УЖЕ результат обработки исходных данных. исходные данные чрезвычайно просты. алгоритм, для человека с опытом программирования - тоже. объектная модель приложения незнакома? так она практически и не нужна - кроме того, как считать диапазон ячеек в массив и выгрузить результат на лист. нет файла справки? гугл отключили?
Евгений_88, одно из двух - Вы либо обманываете, либо врёте. конечно, чисто теоретически есть вариант, что Вы чудовищно ленивы и очень любите получать всё в готовом виде, но, раз уж
Цитата (Евгений_88)
всё я знаю. Опыт программирования 5 лет на Delphi. На Delphi бы уже давным давно решил бы эту задачу.
то такой вариант не проходит.
но в любом случае неинтересно.
и последнее моё замечание в этой теме... все эти фильтры/сводные - это УЖЕ результат обработки исходных данных. исходные данные чрезвычайно просты. алгоритм, для человека с опытом программирования - тоже. объектная модель приложения незнакома? так она практически и не нужна - кроме того, как считать диапазон ячеек в массив и выгрузить результат на лист. нет файла справки? гугл отключили?
Евгений_88, одно из двух - Вы либо обманываете, либо врёте. конечно, чисто теоретически есть вариант, что Вы чудовищно ленивы и очень любите получать всё в готовом виде, но, раз уж
Цитата (Евгений_88)
всё я знаю. Опыт программирования 5 лет на Delphi. На Delphi бы уже давным давно решил бы эту задачу.
В Delphi есть словарь? В этой задаче я бы (если делал макросом) собирал бы в словарь фио-дата, каждой в item массив с номером нужной строки и временем. Время анализируем, по результату оставляем/обновляем номер строки. Т.к. время как уже сказано безалаберное - его по ходу дела приводим к нужному виду. После этого цикл по словарю и копируем отобранные строки. Или сразу и делаем эти "некие операции".
Вот-вот. Сложное мышление. Есть таблица, есть три поля. Тут достаточно: select, from, where и циклом пробежаться по полю. Всё намного проще. Вот о чем я говорю. Есть результат свободной таблицы, так же, как и есть результат выполнения некой процедуры по нажатию на кнопку. НО, я могу увидеть КОД процедуры. Вот меня и интересует, по какому алгоритму, получился результат. Или для этого необходимо посещать курсы и гуглить? Легче тогда будет парсингом перелопатить значения и вывести результат, чем такой геморой.
Цитата (Hugo)
В Delphi есть словарь? В этой задаче я бы (если делал макросом) собирал бы в словарь фио-дата, каждой в item массив с номером нужной строки и временем. Время анализируем, по результату оставляем/обновляем номер строки. Т.к. время как уже сказано безалаберное - его по ходу дела приводим к нужному виду. После этого цикл по словарю и копируем отобранные строки. Или сразу и делаем эти "некие операции".
Вот-вот. Сложное мышление. Есть таблица, есть три поля. Тут достаточно: select, from, where и циклом пробежаться по полю. Всё намного проще. Вот о чем я говорю. Есть результат свободной таблицы, так же, как и есть результат выполнения некой процедуры по нажатию на кнопку. НО, я могу увидеть КОД процедуры. Вот меня и интересует, по какому алгоритму, получился результат. Или для этого необходимо посещать курсы и гуглить? Легче тогда будет парсингом перелопатить значения и вывести результат, чем такой геморой.Евгений_88
но если оч.хочется поиметь геморрой со сводной таблицей - то кто ж запретит?
Так геморроя как раз и не хочется! Если бы ты код скинул бы и сказал, каким образом он будет корректно работать, с использованием массива, то я, разумеется, применил бы твой метод, потому что он гораздо эффективней и проще выглядит. Но пока мне остается довольствоваться только корректными данными, которые выводит сводная таблица. Мне потом их надо будет как раз макросом привести в нужный вид и забрать в Delphi.
Цитата (ikki)
но если оч.хочется поиметь геморрой со сводной таблицей - то кто ж запретит?
Так геморроя как раз и не хочется! Если бы ты код скинул бы и сказал, каким образом он будет корректно работать, с использованием массива, то я, разумеется, применил бы твой метод, потому что он гораздо эффективней и проще выглядит. Но пока мне остается довольствоваться только корректными данными, которые выводит сводная таблица. Мне потом их надо будет как раз макросом привести в нужный вид и забрать в Delphi.Евгений_88
Ну положим сводная на исходных данных не работает. Т.е. конечно работает, но неправильно. Думаю и SQL наврёт. По поводу эффективности - массив/словарь быстрее. С чем согласен - SQL проще выглядит
Ну положим сводная на исходных данных не работает. Т.е. конечно работает, но неправильно. Думаю и SQL наврёт. По поводу эффективности - массив/словарь быстрее. С чем согласен - SQL проще выглядит Hugo
Спасибо большое. Не думал, что тут можно и с помощью SQL решить задачу в Excel. Становится куда понятней и проще, но не быстрее в работе с большими объемами, тут согласен.
Спасибо большое. Не думал, что тут можно и с помощью SQL решить задачу в Excel. Становится куда понятней и проще, но не быстрее в работе с большими объемами, тут согласен.Евгений_88