Как в excel копировать данные при условии если

Здравствуйте, уважаемые форумчане.
Не прошло и полгода, и я опять прошу Вашей помощи.
Отписываюсь в этой теме, т.к. сложности плавно вытекли из неё, суть вопроса осталась та же, так как предложенное AlexM решение проблемы теперь не помогает. Проблема была такая:

«Есть файл (во вложении), в котором существует огромный список адресов (каждая строка это отдельный адрес с кучей нужной информации по нему).
Каждая строка (т.е. каждый адрес) имеет 2 состояния (столбец «H») «Закрыт» и «В работе».
Задача у меня такая: скопировать на другой лист, который «ОТК», все строки, имеющие статус «В работе».»

Теперь же появилось третье состояние этого столбца (в примере P) — «На выплату» (дополнительно меня нагрузили теперь бухгалтерскими вопросами) и данная формула не помогает:

Код

=ИНДЕКС(Адреса!$A$1:$A$175;НАИМЕНЬШИЙ(ЕСЛИ(Адреса!$H$5:$H$175<>"Закрыт";СТРОКА($A$5:$A$175));СТРОКА(A1)))

, т.к. в листе ОТК теперь выводятся и объекты в работе и на выплату.

Попытка заменить «<> «Закрыт» на «= «В работе» приводит у тому, что пустые клетки выдают ошибку «!#ЧИСЛО».
Собственно 1 вопрос в том, как грамотно поменять формулу, чтобы сохранить функционал.

Есть 2 вопрос, уже бухгалтерский: в том же примере есть окно «Бухгалтерия», в котором я пытался автоматизировать подсчет зарплаты. Т.е. мне надо, чтобы все объекты со статусом «На выплату» автоматически забивались в ведомость, соответственно если одна фамилия встречается более 1 раза, зарплата суммировалась.

Буду благодарен, если кто поможет решить задачу или подскажет, как её победить.
Заранее спасибо.

Всем добра.

Задача:

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

Мысли:

Когда у меня первый раз спросили про такое, я ответил- фигушки, без макроса никак, по крайней мере для неопределенного количества найденных строк.

 Спустя время мне задали этот вопрос повторно и тут меня осенило — это не невозможно.

Итак в чем заключается мысль?, а мысль в доп столбце, в котором хранится номер позиции вхождения в некотором диапазоне, где начало диапазона определяется предыдущим.

на деле это выглядит так:
Искать будем значение из ячейки $B$5 (в этой ячейке динамический выпадающий список) в другом листе:

=ПОИСКПОЗ($B$5;ЛИСТ2!B:B;0)

ПоискПоз — ищет вхождения в диапазоне
Результат формулы = 8, т.е. восьмая строчка

Проверяем, и вправду так.

Последующие ячейки при расчете будут учитывать предыдущую:

=ПОИСКПОЗ($B$5;ДВССЫЛ(«Карт.сч.!R»&$C16+1&»C2:R[1000]C2»;ЛОЖЬ);0)+C16)

Во втором аргументе формулы ПоискПоз ( ДВССЫЛ(«Карт.сч.!R»&$C16+1&»C2:R[1000]C2»;ЛОЖЬ); ) формируется диапазон $B$0+предыдущее положение+1 т.е. R9C2:R1000C2
Т.о. мы исключаем уже найденную строку из массива для поиска.

В итоге вот такой формулой

ДВССЫЛ(«Карт.сч.!R»&C16&»C5»;ЛОЖЬ)

Мы получаем значение из пятой колонки строки номер 8, и так далее.

Это можно записать в одну ячейку, но в моем случае получается очень громоздкая конструкция:

=ЕСЛИОШИБКА(ЕСЛИ(ЕПУСТО(ДВССЫЛ(«Карт.сч.!R»&ЕСЛИОШИБКА(ПОИСКПОЗ(ДВССЫЛ(«$B»&СТРОКА()-B17-10;ИСТИНА);ДВССЫЛ(«Карт.сч.!R»&$C16+1&»C2:R[1000]C2″;ЛОЖЬ);0)+C16;»-«)&»C5″;ЛОЖЬ));»АВАНС «;»»)&ТЕКСТ(ДВССЫЛ(«Карт.сч.!R»&ЕСЛИОШИБКА(ПОИСКПОЗ(ДВССЫЛ(«$B»&СТРОКА()-B17-10;ИСТИНА);ДВССЫЛ(«Карт.сч.!R»&$C16+1&»C2:R[1000]C2″;ЛОЖЬ);0)+C16;»-«)&»C3″;ЛОЖЬ);»дд.ММ.гггг»);»»)

Для двойных/тройных условий в поиске предлагаю использовать доп колонку, в таблице поиска, с конкатенацией колонок.

Как скопировать значение одной ячейки в другую при условии

tench72

Дата: Среда, 05.12.2012, 01:15 |
Сообщение № 1

Группа: Пользователи

Ранг: Прохожий

Сообщений: 6


Репутация:

0

±

Замечаний:
0% ±


Здравствуйте уважаемые форумчане! У меня возникла проблема с созданием таблицы учета данных эл.счетчиков, ни как не могу сообразить как сделать копирование из одной ячейки в другую ячейку, при выполнении условия что в какой то другой ячейке (что то вроде кнопки) возникает ноль или единица, при этом если в «кнопочной» ячейке вписать значение «1», то копирование происходит, если «0», то ячейка остается не измененной, потому как в ней содержится тоже какое то нужное значение. Я все нарисовал в рисунке который прикрепил к сообщению. Я сначала подумал что все просто, функция ЕСЛИ(), условие: ячейка(кнопка)=1, то копировать из ячейки допустим А1 в ячейку В1, это все понятно, а вот когда условие не выполняется как в функции ЕСЛИ(), организовать операцию «ни чего не делать», то есть чтобы значение в ячейке В1 не изменялось, при значении ячейки кнопки =0, когда значение ячейки А1 может изменится или меняется???? Вот где собака зарыта:)
Буду очень признателен вам, а то уже всю голову поломал sad

К сообщению приложен файл:

1040326.jpg
(58.8 Kb)

Сообщение отредактировал tench72Среда, 05.12.2012, 01:15

 

Ответить

AlexM

Дата: Среда, 05.12.2012, 08:27 |
Сообщение № 2

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4257


Репутация:

1046

±

Замечаний:
0% ±


Excel 2003

Картинка это хорошо, но файл все равно нужен. Тем более он у вас есть.
Думаю задачу можно решить макросом. Что может упростить работу с таблицей учета.
Например так.
Ячейки с 0 и 1 (кнопки) не нужны.
При вводе новых показаний на Лист1 В3 на Лист2 значение текущего показания копируется в ячейку предыдущего показания, а на место текущего копируется значение с Лист1 В3.
При использовании макроса алгоритм может быть практически любой.

К сообщению приложен файл:

tench72.xls
(24.5 Kb)



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.

Сообщение отредактировал AlexMСреда, 05.12.2012, 10:42

 

Ответить

tench72

Дата: Среда, 05.12.2012, 12:40 |
Сообщение № 3

Группа: Пользователи

Ранг: Прохожий

Сообщений: 6


Репутация:

0

±

Замечаний:
0% ±


AlexM, Спасибо за ответ! Но есть одно Но я не профи в EXEL :(, и макросы писать не умею и как их писать, для каждой ячейки, или написав для одной потом копировать в остальные? А запускать макросы как, ручками, как в фотошопе? Вот в фотошопе я знаю как делать макросы и очень хорошо, а вот в EXEL, к сожалению нет.
А таблица учета на самом деле большая ну счетчиков много не менее 60!
Файла как такового нет, я его не сделал, только в пробном варианте для одного счетчика, как на картинке.
А что нельзя ли решить проблему с помощью формулы? Когда я использую формулу ЕСЛИ(), как сделать чтобы при выполнении условия ячейка копировалась, а при не выполнении условия, ни каких действий с ячейкой не производилось. Ну типа оператора NOP (нет операции) в ассемблере, нет ли таких функций или действий в EXEL? Если я в формуле вставляю ссылку на саму ячейку, то EXEL мне сообщает о циклической ссылке что не есть гуд sad

 

Ответить

Serge_007

Дата: Среда, 05.12.2012, 12:46 |
Сообщение № 4

Группа: Админы

Ранг: Местный житель

Сообщений: 15894


Репутация:

2623

±

Замечаний:
±


Excel 2016

Quote (tench72)

как сделать чтобы при выполнении условия ячейка копировалась

Никак

Quote (tench72)

нет ли таких функций или действий в EXEL?

Нет


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

AlexM

Дата: Среда, 05.12.2012, 12:57 |
Сообщение № 5

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4257


Репутация:

1046

±

Замечаний:
0% ±


Excel 2003

Для работы макроса надо разрешить их исполнение в настройках безопасности Excel.
Макрос, который в приложенном файле предыдущего сообщения запускается сам по событию изменения значения в ячейке.
Запуск происходит если изменения в столбце В на Лист1. Так что добавляйте счетчики сколько хотите.
Алгоритм такой. Вы меняете значение в любой ячейке столбца В на лист1. Макрос запускается. В цикле ищется счетчик на Лист2 и данные копируются, переносятся и рассчитываются для данного счетчика. Если счетчик новый и на лист2 все ячейки пустые, то значение с Лист1 копируется сразу в две ячейки в столбце В и С
Код макроса в Спойлере

В файле код можно посмотреть нажав Alt+F11



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.

 

Ответить

tench72

Дата: Среда, 05.12.2012, 13:17 |
Сообщение № 6

Группа: Пользователи

Ранг: Прохожий

Сообщений: 6


Репутация:

0

±

Замечаний:
0% ±


AlexM, спасибо!!!!!!!!! буду разбираться!
Мне канеш ответ Serge_007 понравился:) молодчага!
Как в армии НИКАК НЕТ!

 

Ответить

Serge_007

Дата: Среда, 05.12.2012, 13:23 |
Сообщение № 7

Группа: Админы

Ранг: Местный житель

Сообщений: 15894


Репутация:

2623

±

Замечаний:
±


Excel 2016

Вы спрашивали про Excel. В Excel эти действия выполнить невозможно
AlexM, предложил решение на VBA
Про VBA я ничего не писал smile

ЗЫ Отключите макросы — и решения не будет в принципе
ЗЫЗЫ Предложенное решение не будет работать в Excel starter и ОО


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

tench72

Дата: Среда, 05.12.2012, 13:45 |
Сообщение № 8

Группа: Пользователи

Ранг: Прохожий

Сообщений: 6


Репутация:

0

±

Замечаний:
0% ±


AlexM извините за незнание, но при выполнении макроса выскакивает сообщение:
Ошибка компиляции Не удается найти проект или библиотеку (Can’t find project or library)
Где ее взять и как подключить к макросу?
Спасибо!

 

Ответить

AlexM

Дата: Среда, 05.12.2012, 15:05 |
Сообщение № 9

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4257


Репутация:

1046

±

Замечаний:
0% ±


Excel 2003

Странно, это в моем файле так получается?
Я крайне редко подключаю дополнительные библиотеки. Подключены лишь те что по умолчанию. У меня Excel 2003. Подключены: Visual Basic For Applications, Microsoft Excel 11.0 Object Library, OLE Automation, Microsoft Office 11.0 Object Library.
Какие библиотеки подключены можно так. В редакторе VBA меню Tools — References.

Прочтите СТАТЬЮ на эту тему.



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.

Сообщение отредактировал AlexMСреда, 05.12.2012, 15:12

 

Ответить

tench72

Дата: Среда, 05.12.2012, 15:14 |
Сообщение № 10

Группа: Пользователи

Ранг: Прохожий

Сообщений: 6


Репутация:

0

±

Замечаний:
0% ±


AlexM, все прояснилось, если я запускаю exel на виндовс ХР, то все работает, а если на виндовс 7 х64, то пишет вот такую ошибку!

 

Ответить

tench72

Дата: Среда, 05.12.2012, 15:20 |
Сообщение № 11

Группа: Пользователи

Ранг: Прохожий

Сообщений: 6


Репутация:

0

±

Замечаний:
0% ±


Большое человеческое спасибо Вам AlexM!!!!!!!!!!!!!!!!
Слава богу что еще остались люди, которые могут просто помочь!!!!!!!!!
Да да именно на халяву!!!!!!! Потому как помощь за не халяву это уже не помощь:)
а просто бизнес и ни чего личного:)))))
Будем изучать exel глубже, всем здоровья и удачи и еще раз спасибо!

 

Ответить

Andrej092

Дата: Четверг, 18.07.2013, 13:51 |
Сообщение № 12

Группа: Пользователи

Ранг: Новичок

Сообщений: 19

Здравствуйте, собрал такой макрос. Проверяет время каждые 10 сек и если время до 12,00 то он стирает значение из ячейки «А1»
Есть несколько вопросов.
1) Как сделать чтоб он проверял изменения в ячейке Б1?Если значение в ячейке B1 изменилось то значение из ячейки А1 удаляются.
If Range(«B1»).value <> ‘Не знаю что писать дальше sad Then
2) Как сделать сравнение двух ячеек? Если в «А1» вписывается число, то тогда «B1» становиться пустой и наоборот если заполняется «B1» то «А1» становится пустой
3) Можно ли для пункта Nr2 прописать макрос без времени, а чтоб это делалось сразу автоматически а не через 10 сек ( Можно конечно изменить время, поставить не 10 сек а 1 сек, но хотелось бы без него )

Sub myMacro()
Dim sh As Worksheet
Application.OnTime Now() + TimeSerial(0, 0, 10), «myMacro»
Set sh = ActiveWorkbook.Sheets(1)
If Time < 0.5 Then
Debug.Print Time
ActiveSheet.Range(«A1»).ClearContents
End If
End Sub


:)

 

Ответить

Serge_007

Дата: Четверг, 18.07.2013, 13:58 |
Сообщение № 13

Группа: Админы

Ранг: Местный житель

Сообщений: 15894


Репутация:

2623

±

Замечаний:
±


Excel 2016

Все ответы есть в правилах форума. Прочитайте их внимательно. И оформляйте коды тегами
Эта тема закрыта


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

Содержание

  1. Excel копирование строки при условии
  2. суббота, 29 сентября 2018 г.
  3. Excel Копирование ячеек с условием без макросов
  4. Excel копирование строки при условии
  5. Excel копирование строки при условии

Excel копирование строки при условии

суббота, 29 сентября 2018 г.

Excel Копирование ячеек с условием без макросов

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

Когда у меня первый раз спросили про такое, я ответил- фигушки, без макроса никак, по крайней мере для неопределенного количества найденных строк.

Спустя время мне задали этот вопрос повторно и тут меня осенило — это не невозможно.

Итак в чем заключается мысль?, а мысль в доп столбце, в котором хранится номер позиции вхождения в некотором диапазоне, где начало диапазона определяется предыдущим.

на деле это выглядит так:
Искать будем значение из ячейки $B$5 (в этой ячейке динамический выпадающий список) в другом листе:

Во втором аргументе формулы ПоискПоз ( ДВССЫЛ(«Карт.сч.!R»&$C16+1&»C2:R[1000]C2»;ЛОЖЬ); ) формируется диапазон $B$0+предыдущее положение+1 т.е. R9C2:R1000C2
Т.о. мы исключаем уже найденную строку из массива для поиска.

В итоге вот такой формулой

Мы получаем значение из пятой колонки строки номер 8, и так далее.

Это можно записать в одну ячейку, но в моем случае получается очень громоздкая конструкция:

Для двойных/тройных условий в поиске предлагаю использовать доп колонку, в таблице поиска, с конкатенацией колонок.

Источник

Excel копирование строки при условии

— Обычно, чтобы понять и помочь — достаточно таблицы на 10-20 строк.
— Но при этом старайтесь сохранить структуру, расположение таблиц, имена листов — аналогично оригиналу.
— Если файл содержит конфиденциальную информацию — просто замените Ваши данные на нейтральные.

— Максимальный размер файла ограничен размером в 100 Кб.

— Обычно, чтобы понять и помочь — достаточно таблицы на 10-20 строк.
— Но при этом старайтесь сохранить структуру, расположение таблиц, имена листов — аналогично оригиналу.
— Если файл содержит конфиденциальную информацию — просто замените Ваши данные на нейтральные.

— Максимальный размер файла ограничен размером в 100 Кб.


Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.

Ответить

— Обычно, чтобы понять и помочь — достаточно таблицы на 10-20 строк.
— Но при этом старайтесь сохранить структуру, расположение таблиц, имена листов — аналогично оригиналу.
— Если файл содержит конфиденциальную информацию — просто замените Ваши данные на нейтральные.

— Максимальный размер файла ограничен размером в 100 Кб.

Источник

Excel копирование строки при условии

Здравствуйте, уважаемые специалисты))
Вот такая вот появилась задачка:
Есть файл, в котором есть 4 листа: 3 листа — таблицы откуда должны Копироваться данные при определенном условии, 4-й лист (для копирования) — куда должны копироваться эти данные.
Условие:
В таблицах есть столбец LEXWARE: если в этом столбце значения принимают 555555 или 444444, то строку нужно автоматически копировать в таблицу «Для Копирования» (по порядку — без пустых строк).

НО, наверно самое важное, хотел бы узнать, как сделать, чтобы при добавлении нового листа — такой же таблицы с данными и столбцом LEXWARE, данные также бы копировались в таблицу «Для Копирования».

Задачу, наверно лучше решить с помощью макросов. Но если возможно, с помощью формул — не откажусь и от такого варианта решения)

Здравствуйте, уважаемые специалисты))
Вот такая вот появилась задачка:
Есть файл, в котором есть 4 листа: 3 листа — таблицы откуда должны Копироваться данные при определенном условии, 4-й лист (для копирования) — куда должны копироваться эти данные.
Условие:
В таблицах есть столбец LEXWARE: если в этом столбце значения принимают 555555 или 444444, то строку нужно автоматически копировать в таблицу «Для Копирования» (по порядку — без пустых строк).

НО, наверно самое важное, хотел бы узнать, как сделать, чтобы при добавлении нового листа — такой же таблицы с данными и столбцом LEXWARE, данные также бы копировались в таблицу «Для Копирования».

Задачу, наверно лучше решить с помощью макросов. Но если возможно, с помощью формул — не откажусь и от такого варианта решения) biomirror

Сообщение Здравствуйте, уважаемые специалисты))
Вот такая вот появилась задачка:
Есть файл, в котором есть 4 листа: 3 листа — таблицы откуда должны Копироваться данные при определенном условии, 4-й лист (для копирования) — куда должны копироваться эти данные.
Условие:
В таблицах есть столбец LEXWARE: если в этом столбце значения принимают 555555 или 444444, то строку нужно автоматически копировать в таблицу «Для Копирования» (по порядку — без пустых строк).

НО, наверно самое важное, хотел бы узнать, как сделать, чтобы при добавлении нового листа — такой же таблицы с данными и столбцом LEXWARE, данные также бы копировались в таблицу «Для Копирования».

Задачу, наверно лучше решить с помощью макросов. Но если возможно, с помощью формул — не откажусь и от такого варианта решения) Автор — biomirror
Дата добавления — 04.03.2016 в 14:29

KuklP Дата: Пятница, 04.03.2016, 15:57 | Сообщение № 2
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

Ответить

biomirror Дата: Пятница, 04.03.2016, 16:10 | Сообщение № 3
KuklP Дата: Пятница, 04.03.2016, 16:11 | Сообщение № 4

Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

biomirror Дата: Пятница, 04.03.2016, 16:41 | Сообщение № 5
KuklP Дата: Пятница, 04.03.2016, 16:47 | Сообщение № 6
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

Ответить

biomirror Дата: Пятница, 04.03.2016, 16:58 | Сообщение № 7

1. Эммм. странно. Почему куда ни попадя. Нельзя сделать так, чтобы было все тоже самое, что сейчас, — только без вызова макроса или нажатия на кнопку?
2. Пробовал:
а)в Файле есть скрытый лист, при его «открытии» и внесении в него значения «555555» — данные из строки не копируются.
б) создал новый лист, ввел значение 555555 вышла ошибка: RunTime error ‘1004’ Метод AutoFilter из класса Range завершен некорректно

Сильно извиняюсь, хотел бы еще узнать, что значит каждая строчка в коде, а то вот ошибка вышла, а я даже не знаю, как ее исправить))

1. Эммм. странно. Почему куда ни попадя. Нельзя сделать так, чтобы было все тоже самое, что сейчас, — только без вызова макроса или нажатия на кнопку?
2. Пробовал:
а)в Файле есть скрытый лист, при его «открытии» и внесении в него значения «555555» — данные из строки не копируются.
б) создал новый лист, ввел значение 555555 вышла ошибка: RunTime error ‘1004’ Метод AutoFilter из класса Range завершен некорректно

Сильно извиняюсь, хотел бы еще узнать, что значит каждая строчка в коде, а то вот ошибка вышла, а я даже не знаю, как ее исправить)) biomirror

Сообщение 1. Эммм. странно. Почему куда ни попадя. Нельзя сделать так, чтобы было все тоже самое, что сейчас, — только без вызова макроса или нажатия на кнопку?
2. Пробовал:
а)в Файле есть скрытый лист, при его «открытии» и внесении в него значения «555555» — данные из строки не копируются.
б) создал новый лист, ввел значение 555555 вышла ошибка: RunTime error ‘1004’ Метод AutoFilter из класса Range завершен некорректно

Сильно извиняюсь, хотел бы еще узнать, что значит каждая строчка в коде, а то вот ошибка вышла, а я даже не знаю, как ее исправить)) Автор — biomirror
Дата добавления — 04.03.2016 в 16:58

KuklP Дата: Пятница, 04.03.2016, 17:48 | Сообщение № 8
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

Ответить

biomirror Дата: Пятница, 04.03.2016, 18:17 | Сообщение № 9

Я только спросил. Зачем сразу так ругаться. Если бы я знал ответ на вопрос или имел представление, как это работает, я б наверно на форуме бы не стал спрашивать.

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

Просто обозначил, что есть проблема, с которой самостоятельно не могу справиться. Зачем к словам-то цепляться.

Но, спасибо, за то, что уже сделали

Я только спросил. Зачем сразу так ругаться. Если бы я знал ответ на вопрос или имел представление, как это работает, я б наверно на форуме бы не стал спрашивать.

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

Просто обозначил, что есть проблема, с которой самостоятельно не могу справиться. Зачем к словам-то цепляться.

Но, спасибо, за то, что уже сделали biomirror

Я только спросил. Зачем сразу так ругаться. Если бы я знал ответ на вопрос или имел представление, как это работает, я б наверно на форуме бы не стал спрашивать.

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

Просто обозначил, что есть проблема, с которой самостоятельно не могу справиться. Зачем к словам-то цепляться.

Но, спасибо, за то, что уже сделали Автор — biomirror
Дата добавления — 04.03.2016 в 18:17

KuklP Дата: Пятница, 04.03.2016, 18:32 | Сообщение № 10

Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

biomirror Дата: Пятница, 04.03.2016, 18:53 | Сообщение № 11

Во, во во, все, понял 😀
Единственное, в скрытом листе, есть столбец LEXWARE. Почему тогда с этого листа строки не копируются, когда он становится открытым?

Во, во во, все, понял 😀
Единственное, в скрытом листе, есть столбец LEXWARE. Почему тогда с этого листа строки не копируются, когда он становится открытым?

Во, во во, все, понял 😀
Единственное, в скрытом листе, есть столбец LEXWARE. Почему тогда с этого листа строки не копируются, когда он становится открытым?

KuklP Дата: Пятница, 04.03.2016, 19:12 | Сообщение № 12
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

Ответить

KuklP Дата: Пятница, 04.03.2016, 19:18 | Сообщение № 13
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

Ответить

KuklP Дата: Пятница, 04.03.2016, 19:34 | Сообщение № 14
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

Ответить

biomirror Дата: Пятница, 04.03.2016, 19:51 | Сообщение № 15

Видимо слова «такой же таблицы с данными» были лишними.

Я вбивал в столбец LEXWARE 55555 и другие данные в другие столбцы. Но строка, в которую я вбивал 55555 не скопировалась в «общую» таблицу.

Наверно, правильнее задание будет сформулировать так:
Если в ячейке листа встречается 555555 или 444444, то строку в которой есть это значение, необходимо перенести в таблицу «Для Копирования».
Как это реализовать?

Видимо слова «такой же таблицы с данными» были лишними.

Я вбивал в столбец LEXWARE 55555 и другие данные в другие столбцы. Но строка, в которую я вбивал 55555 не скопировалась в «общую» таблицу.

Наверно, правильнее задание будет сформулировать так:
Если в ячейке листа встречается 555555 или 444444, то строку в которой есть это значение, необходимо перенести в таблицу «Для Копирования».
Как это реализовать? biomirror

Видимо слова «такой же таблицы с данными» были лишними.

Я вбивал в столбец LEXWARE 55555 и другие данные в другие столбцы. Но строка, в которую я вбивал 55555 не скопировалась в «общую» таблицу.

Наверно, правильнее задание будет сформулировать так:
Если в ячейке листа встречается 555555 или 444444, то строку в которой есть это значение, необходимо перенести в таблицу «Для Копирования».
Как это реализовать? Автор — biomirror
Дата добавления — 04.03.2016 в 19:51

KuklP Дата: Пятница, 04.03.2016, 21:20 | Сообщение № 16
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

Ответить

biomirror Дата: Пятница, 04.03.2016, 22:53 | Сообщение № 17

Ааа. а где файл)) Попробовал макрос из #14 — почему-то не копирует у меня со скрытого листа.

Ааа. а где файл)) Попробовал макрос из #14 — почему-то не копирует у меня со скрытого листа.

Ааа. а где файл)) Попробовал макрос из #14 — почему-то не копирует у меня со скрытого листа.

KuklP Дата: Пятница, 04.03.2016, 23:03 | Сообщение № 18
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

Ответить

biomirror Дата: Суббота, 05.03.2016, 09:50 | Сообщение № 19

Да, да, да вот так.
Понял, что вы имели ввиду, когда сказали, что получается полнейшая ахинея — количество столбцов таблицы скрытого листа, откуда копируются данные, не совпадает с количеством столбцов таблицы, куда копируются данные.
Хотел исправить ситуацию вставкой двух пустых столбцов и их последующим скрытием (думал, что скрипт просто переносит данные из столбца А одного листа в столбец А другого), но скрипт перестал работать. Как сделать, чтобы при вставке двух столбцов (после столбца D)и их последующем скрытии, скрипт работал?

Пробовал добавить лист, со структурой как в листе «Для копирования». Создал, внес в столбец LEXWARE в произвольную строчку 555555. Данные почему-то не копировались. Потом внес в другую строчку — стали копироваться. Ничего не мог понять. Потом только заметил, что в исходной таблице строки должны вносится по порядку, иначе копирования происходить не будет. Можно ли сделать так, чтобы строки копировались, если даже они занесены не по порядку?

Да, да, да вот так.
Понял, что вы имели ввиду, когда сказали, что получается полнейшая ахинея — количество столбцов таблицы скрытого листа, откуда копируются данные, не совпадает с количеством столбцов таблицы, куда копируются данные.
Хотел исправить ситуацию вставкой двух пустых столбцов и их последующим скрытием (думал, что скрипт просто переносит данные из столбца А одного листа в столбец А другого), но скрипт перестал работать. Как сделать, чтобы при вставке двух столбцов (после столбца D)и их последующем скрытии, скрипт работал?

Пробовал добавить лист, со структурой как в листе «Для копирования». Создал, внес в столбец LEXWARE в произвольную строчку 555555. Данные почему-то не копировались. Потом внес в другую строчку — стали копироваться. Ничего не мог понять. Потом только заметил, что в исходной таблице строки должны вносится по порядку, иначе копирования происходить не будет. Можно ли сделать так, чтобы строки копировались, если даже они занесены не по порядку? biomirror

Сообщение Да, да, да вот так.
Понял, что вы имели ввиду, когда сказали, что получается полнейшая ахинея — количество столбцов таблицы скрытого листа, откуда копируются данные, не совпадает с количеством столбцов таблицы, куда копируются данные.
Хотел исправить ситуацию вставкой двух пустых столбцов и их последующим скрытием (думал, что скрипт просто переносит данные из столбца А одного листа в столбец А другого), но скрипт перестал работать. Как сделать, чтобы при вставке двух столбцов (после столбца D)и их последующем скрытии, скрипт работал?

Пробовал добавить лист, со структурой как в листе «Для копирования». Создал, внес в столбец LEXWARE в произвольную строчку 555555. Данные почему-то не копировались. Потом внес в другую строчку — стали копироваться. Ничего не мог понять. Потом только заметил, что в исходной таблице строки должны вносится по порядку, иначе копирования происходить не будет. Можно ли сделать так, чтобы строки копировались, если даже они занесены не по порядку? Автор — biomirror
Дата добавления — 05.03.2016 в 09:50

Источник

Adblock
detector

Самый быстрый ВПР

Если в ваших таблицах всего лишь несколько десятков строк, то, скорее всего, эта статья не будет для вас актуальной. На таких небольших объемах данных любой способ будет работать достаточно шустро, чтобы вы этого не замечали. Если же число строк в ваших списках измеряется тысячами, да и самих таблиц не одна-две, то время мучительного ожидания на пересчете формул в Excel может доходить до нескольких минут.

В этом случае, правильный выбор функции, применяемой для связывания таблиц, играет решающую роль — разница в производительности между ними, как мы увидим далее, может составлять более 20 раз!

Когда я писал свою первую книжку пять лет назад, то уже делал сравнительный скоростной тест различных способов поиска и подстановки данных функциями ВПР, ИНДЕКС+ПОИСКПОЗ, СУММЕСЛИ и др. С тех пор сменилось три версии Office, появились надстройки Power Query и Power Pivot, кардинально изменившие весь процесс работы с данными. А в прошлом году ещё и обновился вычислительный движок Excel, получив поддержку динамических массивов и новые функции ПРОСМОТРХ, ФИЛЬТР и т.п.

Так что пришла пора снова взяться за секундомер и выяснить — кто же самый быстрый. Ну и, заодно, проверить — какие способы поиска и подстановки данных в Excel вы знаете 🙂

Подопытный кролик

Тест будем проводить на следующем примере:

Исходный пример

Это книга Excel с одним листом, где расположены две таблицы: отгрузки (500 000 строк) и прайс-лист (600 строк). Наша задача — подставить цены из прайс-листа в таблицу отгрузок. Для каждого способа будем вводить формулу в ячейку С2 и копировать вниз на весь столбец, замеряя время, которое потребуется Excel, чтобы просчитать весь столбец из полумиллиона ячеек. Полученные значения, безусловно, зависят от множества факторов (поколение процессора, объем оперативной памяти, текущая загрузка системы, версия Office и т.д.), но нам важны не конкретные цифры, а, скорее, их сравнение друг с другом. Важно понимать прожорливость каждого способа и их ограничения.

Способ 1. ВПР

Сначала — классика 🙂 Легендарная функция вертикального просмотра — ВПР (VLOOKUP) , которая приходит в голову первой в подобных ситуациях:

ВПР

  • B2 — искомое значение, т.е. название товара, который мы хотим найти в прайс-листе
  • $G$2:$H$600 — закреплённая знаками доллара (чтобы не сползала при копировании формулы вниз) абсолютная ссылка на прайс
  • 2 — номер столбца в прайс-листе, откуда мы хотим взять цену
  • 0 или ЛОЖЬ — переключение в режим поиска точного соответствия, когда любое некорректное название товара (например, ФОНЕРА) в столбце B в таблице отгрузок приведёт к появлению ошибки #Н/Д как результата работы функции.

Время вычисления = 4,3 сек.

Способ 2. ВПР с выделением столбцов целиком

Многие пользователи, применяя ВПР, во втором аргументе этой функции, где нужно задать поисковую таблицу (прайс), выделяют не ограниченный диапазон ( $G$2:$H$600 ), а сразу столбцы G:H целиком. Это проще, быстрее, позволяет не думать про F4 и то, что завтра прайс-лист может быть на несколько строк больше. Формула в этом случае выглядит тоже компактнее:

ВПР с выделением столбцов целиком

В старых версиях Excel такое выделение не сильно влияло на скорость вычислений, но сейчас (неожиданно для меня, признаюсь) результат получился в разы хуже предыдущего.

Время вычисления = 14,5 сек.

Способ 3. ИНДЕКС и ПОИСКПОЗ

Следующей после ВПР ступенью эволюции для многих пользователей Microsoft Excel обычно является переход на использование связки функций ИНДЕКС (INDEX) и ПОИСКПОЗ (MATCH) . Выглядит эта формула так:

ИНДЕКС и ПОИСКПОЗ

Функция ИНДЕКС извлекает из заданного в первом аргументе диапазона (столбца $H$2:$H$600 с ценами в прайс-листе) содержимое ячейки с заданным номером. А номер этот, в свою очередь, определяется функцией ПОИСКПОЗ, у которой три аргумента:

  • Что нужно найти — название товара из B2
  • Где мы это ищем — столбец с названиями товаров в прайсе ( $G$2:$G$600 )
  • Режим поиска: 0 — точный, 1 или -1 — приблизительный с округлением в меньшую или большую сторону, соответственно.

Формула выходит чуть сложнее, но, при этом имеет несколько ощутимых преимуществ перед классической ВПР, а именно:

  • Не нужно отсчитывать номер столбца (как в третьем аргументе ВПР).
  • Можно извлекать данные, которые находятся левее столбца, где просходит поиск.

По скорости, однако же, этот способ проигрывает ВПР почти в два раза:

Время вычисления = 7,8 сек.

Если же, вдобавок, полениться и выделять не ограниченные диапазоны, а столбцы целиком:

ИНДЕКС и ПОИСКПОЗ с выделением столбцов целиком

. то результат получается совсем печальный:

Время вычисления = 28,5 сек.

28 секунд, Карл! В 6 раз медленнее ВПР!

Способ 4. СУММЕСЛИ

Если нужно найти не текстовые, а именно числовые данные (как в нашем случае — цену), то вместо ВПР вполне можно использовать функцию СУММЕСЛИ (SUMIF) . Изначально она задумывалась как инструмент для выборочного суммирования данных по условию (найди и сложи мне все продажи кабелей, например), но можно заставить её искать нужный нам товар и в прайс-листе. Если грузы в нём не повторяются, то суммировать будет не с чем и эта функция просто выведет искомое значение:

СУММЕСЛИ

  • Первый аргумент СУММЕСЛИ — это диапазон проверяемых ячеек, т.е. названия товаров в прайсе ( $G$2:$G$600 ).
  • Второй аргумент ( B2 ) — что мы ищем.
  • Третий аргумент — диапазон ячеек с ценами $H$2:$H$600 , числа из которых мы хотим просуммировать, если в соседних ячейках проверяемого диапазона есть искомое значение.

Очевидным минусом такого подхода является то, что он работает только с числами. Также этот способ не удобен, если прайс-лист находится в отдельном файле — придется всё время держать его открытым, т.к. функция СУММЕСЛИ не умеет брать данные из закрытых книг, в отличие от ВПР, для которой это не проблема.

В плюсы же можно записать удобство при поиске сразу по нескольким столбцам — для этого идеально подходит более продвинутая версия этой функции — СУММЕСЛИМН (SUMIFS) . Скорость вычислений же, при этом, весьма посредственная:

Время вычисления = 12,8 сек.

При выделении столбцов целиком, т.е. использовании формулы вида =СУММЕСЛИ( G:G ; B2 ; H:H ) всё ещё хуже:

Время вычисления = 41,7 сек.

Это самый плохой результат в нашем тесте.

Способ 5. СУММПРОИЗВ

Этот подход сейчас встречается не часто, но всё ещё достаточно регулярно. Обычно так любят извращаться пользователи старой школы, ещё хорошо помнящие те времена, когда в Excel было всего 255 столбцов и 56 цветов 🙂

Суть этого метода заключается в использовании функции СУММПРОИЗВ (SUMPRODUCT) , изначально предназначенной для поэлементного перемножения нескольких диапазонов с последующим суммированием полученных произведений. В нашем случае, вместо одного из массивов будет выступать условие, а вторым будут цены:

СУММПРОИЗВ

Выражение ($G$2:$G$600=B2) , по сути, проверяет каждое название груза в прайс-листе на предмет соответствия искомому значению (ФАНЕРА ПР). Результатом каждого сравнения будет логическое значение ИСТИНА (TRUE ) или ЛОЖЬ (FALSE) , что в Excel интерпретируется как 1 и 0, соответственно. Последующее умножение этих нулей и единиц на цены оставит в живых цену только того товара, который нам, в данном случае, и нужен.

Эта формула является, по сути, формулой массива, но не требует нажатия обычного для них сочетания клавиш Ctrl + Shift + Enter , т.к. функция СУММПРОИЗВ поддерживает массивы уже сама по себе. Возможно, по этой же причине (формулы массива всегда медленнее, чем обычные) такой скорость пересчёта такой формулы — не очень:

Время вычисления = 11,8 сек.

  • Совместимость с любыми, самыми древними версиями Excel.
  • Возможность задавать сложные условия (и несколько)
  • Способность этой формулы работать с данными из закрытых файлов, если добавить перед ней двойное бинарное отрицание (два подряд знака «минус»). СУММЕСЛИМН таким похвастаться не может.

Способ 6. ПРОСМОТР

Ещё один относительно экзотический способ поиска и подстановки данных, наравне с ВПР — это использование функции ПРОСМОТР (LOOKUP) . Только не перепутайте её с новой, буквально, на днях появившейся функцией ПРОСМОТРХ (XLOOKUP) — про неё мы поговорим дальше особо. Функция ПРОСМОТР существовала в Excel начиная с самых ранних версий и тоже вполне может решить нашу задачу:

ПРОСМОТР

  • B2 — название груза, которое мы ищем
  • $G$2:$G$600 — одномерный диапазон-вектор (столбец или строка), где мы ищем совпадение
  • $H$2:$H$600 — такого же размера диапазон, откуда нужно вернуть найденный результат (цену)

На первый взгляд всё выглядит очень удобно и логично, но всю картину портят два неочевидных момента:

  • Эта функция требует обязательной сортировки прайс-листа по возрастанию (алфавиту) и без этого не работает.
  • Если в таблице отгрузок искомое значение будет написано с опечаткой (например, АГ Е ДОЛ вместо АГИДОЛ), то функция ПРОСМОТР выдаст не ошибку #Н/Д, а цену для ближайшего предыдущего товара:

При работе с неидеальными данными в реальном мире это гарантированно создаст проблемы, как вы понимаете.

Скорость же вычислений у функции ПРОСМОТР (LOOKUP) весьма приличная:

Время вычисления = 7,6 сек.

Способ 7. Новая функция ПРОСМОТРХ

Эта функция пришла с одним из недавних обновлений пока только пользователям Office 365 и пока отсутствует во всех остальных версиях (Excel 2010, 2013, 2016, 2019). По сравнению с классической ВПР у этой функции есть масса преимуществ (упрощенный синтаксис, возможность искать не только сверху-вниз, возможность сразу задать значение вместо #Н/Д и т.д.) Формула для решения нашей задачи будет выглядеть в этом случае так:

ПРОСМОТРХ

Если не брать в расчёт необязательные 4,5,6 аргументы, то синтаксис этой функции полностью совпадает с её предшественником — функцией ПРОСМОТР (LOOKUP) . Скорость вычислений при тестировании на наши 500000 строк тоже оказалась аналогичной:

Время вычисления = 7,6 сек.

Почти в два раза медленнее, чем у ВПР, вместо которой Microsoft предлагает теперь использовать ПРОСМОТРХ. Жаль.

И, опять же, если полениться и выделить диапазоны в прайс-листе целыми столбцами:

ПРОСМОТРХ и выделение столбцов целиком

. то скорость падает до совершенно неприличных уже значений:

Время вычисления = 28,3 сек.

А если на динамических массивах?

Прошлогоднее (осень 2019) обновление вычислительного движка Microsoft Excel добавило ему поддержку динамических массивов (Dynamic Arrays), о которых я уже писал. Это принципиально новый подход к работе с данными, который можно использовать почти с любыми классическими функциями Excel. На примере ВПР это будет выглядеть так:

ВПР на динамических массивах

Разница с классическим вариантом в том, что первым аргументом ВПР здесь выступает не одно искомое значение (а формулу потом нужно копировать вниз на остальные строки), а сразу весь массив из полумиллиона грузов B2:B500000, цены для которых мы хотим найти. Формула при этом сама распространяется вниз, занимая требуемое количество ячеек.

Скорость пересчета в таком варианте меня, откровенно говоря, ошеломила — пауза между нажатием на Enter после ввода формулы и получением результатов почти отсутствовала.

Время вычисления = 1 сек.

Что интересно, и новая ПРОСМОТРХ, и старая ПРОСМОТР, и связка ИНДЕКС+ПОИСКПОЗ в таком режиме тоже были очень быстрыми — время вычислений не больше 1 секунды! Фантастика.

А вот олдскульные подходы на основе СУММПРОИЗВ и СУММЕСЛИ(МН) с динамическими массивами работать отказались 🙁

Что с умными таблицами?

Обрадовавшись фантастическим результатам, полученным на динамических массивах, я решил вдогон попробовать протестировать разницу в скорости при работе с обычными и «умными» таблицами. Я имею ввиду те самые «красивые таблицы», в которые вы можете преобразовать ваш диапазон с помощью команды Форматировать как таблицу на вкладке Главная (Home — Format as Table) или с помощью сочетания клавиш Ctrl + T .

Если предварительно превратить наши отгрузки и прайс в «умные» (по умолчанию они получат имена Таблица1 и Таблица2, соответственно), то формула с той же ВПР будет выглядеть как:

ВПР на умных таблицах

  • [@Груз] — ссылка на ячейку B2, означающая, в данном случае, что нужно взять значение из той же строки из столбца Груз текущей умной таблицы.
  • Таблица2 — ссылка на прайс-лист

Жирным плюсом такого подхода будет возможность легко добавлять данные в наши таблицы в будущем. При дописывании новых строк в отгрузки или к прайс-листу, наши «умные» таблицы будут растягиваться автоматически.

Скорость же, как выяснилось, тоже вырастает очень значительно и примерно равна скорости работы на динамических массивах:

Время вычисления = 1 сек.

У меня есть подозрение, что дело тут не в самих «умных» таблицах, а всё в том же обновлении вычислительного движка, т.к. на старых версиях Excel такого прироста в скорости на умных таблицах я не помню.

Бонус. Запрос Power Query

Замерять, так замерять! Давайте, для полноты картины, сравним наши перечисленные способы еще и с запросом Power Query, который тоже может решить нашу задачу. Кто-то скажет, что некорректно сравнивать пересчёт формул с механизмом обновления запроса, но мне, откровенно говоря, просто самому было интересно — кто быстрее?

  1. Превращаем обе наши таблицы в «умные» с помощью команды Форматировать как таблицу на вкладке Главная (Home — Format as Table) или с помощью сочетания клавиш Ctrl + T .
  2. По очереди загружаем таблицы в Power Query с помощью команды Данные — Из таблицы / диапазона (Data — From Table/Range) .
  3. После загрузки в Power Query возвращаемся обратно в Excel, оставляя загруженные данные как подключение. Для этого в окне Power Query выбираем Главная — Закрыть и загрузить — Закрыть и загрузить в. — Только создать подключение (Home — Close&Load — Close&Load to. — Only create connection) .
  4. После того, как обе исходные таблицы будут загружены как подключения, создадим ещё один, третий запрос, который будет объединять их между собой, подставляя цены из прайса в отгрузки. Для этого на вкладке Данные выберем Получить данные / Создать запрос — Объединить запросы — Объединить (Get Data / New Query — Merge queries — Merge) :

Объединяем запросы

Настройки объединения

Разворачиваем вложенные таблицы после объединения

В отличие от формул, запросы Power Query не обновляются автоматически «на лету», а требуют щелчка правой кнопкой мыши по таблице (или запросу в правой панели) и выбору команды Обновить (Refresh) . Также можно воспользоваться командой Обновить все (Refresh All) на вкладке Данные (Data) .

Время обновления = 8,2 сек.

Итоговая таблица и выводы

Если вы честно дочитали до этого места, то какие-то выводы, наверное, уже сделали самостоятельно. Если же пропустили все детали и сразу перешли к итогам, то вот вам общая результирующая таблица по скорости всех методов:

Итоговая таблица результатов

Само-собой, у каждого из нас свои предпочтения, задачи и тараканы, но для себя я сформулировал выводы после этого тестирования так:

ВПР с несколькими условиями: 5 примеров.

Очень часто наши требования к поиску данных не ограничиваются одним условием. К примеру, нам нужна выручка по магазину за определенный месяц, количество конкретного товара, проданного определенному покупателю и т.д. Обычными средствами функции ВПР эту задачу решить сложно и даже не всегда возможно. Ведь там предусмотрено использование только одного критерия поиска.

Мы предложим вам несколько вариантов решения проблемы поиска по нескольким условиям.

ВПР по нескольким условиям с использованием дополнительного столбца.

Задачу, рассмотренную в предыдущем примере, можно решить и другим способом – без использования формулы массива. Ведь работа с массивами многим представляется сложной и недоступной для понимания. Дополнительный столбец для поиска по нескольким условиям будет в определенном отношении более простым вариантом.

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

Сразу по трем столбцам функция ВПР искать не может. Поэтому нам нужно объединить их в один. И, поскольку поиск производится всегда в крайнем левом (первом) столбце, то нужно добавить его в нашу таблицу тоже слева.

Вставляем перед таблицей с данными дополнительный столбец A. Затем при помощи оператора & объединяем в нем содержимое B,C и D. Записываем в А7

и копируем в находящиеся ниже ячейки.

Формула поиска в D4 будет выглядеть:

В диапазон поиска включаем и наш дополнительный столбец. Критерий поиска – также объединение 3 значений. И извлекаем результат из 5 колонки.

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

Вид станет приятнее, а на результаты это никак не повлияет.

ВПР по двум условиям при помощи формулы массива.

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

Для этого в верхней части нашего листа запишем критерии поиска: дата и магазин. В ячейке B3 будем выводить сумму выручки.

Формула в B3 выглядит следующим образом:

Обратите внимание на фигурные скобки, которые означают, что это формула массива. То есть наша функция ВПР работает не с отдельными значениями, а разу с массивами данных.

Разберем процесс подробно.

Мы ищем дату, записанную в ячейке B1. Но вот только разыскивать мы ее будем не в нашем исходном диапазоне данных, а в немного видоизмененном. Для этого используем условие

То есть, в том случае, если наименование магазина совпадает с критерием в ячейке B2, мы оставляем исходные значения из нашего диапазона. А если нет – заменяем их на пробелы. И так по каждой строке.

В результате получим вот такой виртуальный массив данных на основе нашей исходной таблицы:

Как видите, строки, в которых ранее был «Магазин 1», заменены на пустые. И теперь искать нужную дату мы будем только среди информации по «Магазин 2». И извлекать значения выручки из третьей колонки.

С такой работой функция ВПР вполне справится.

Такой ход стал возможен путем применения формулы массива. Поэтому обратите особое внимание: круглые скобки в формуле писать руками не нужно! В ячейке B3 вы записываете формулу

И затем нажимаете комбинацию клавиш CTRL+Shift+Enter. При этом Excel поймет, что вы хотите ввести формулу массива и сам подставит скобки.

Таким образом, функция ВПР поиск по двум столбцам производит в 2 этапа: сначала мы очищаем диапазон данных от строк, не соответствующих одному из условий, при помощи функции ЕСЛИ и формулы массива. А затем уже в этой откорректированной информации производим обычный поиск по одному только второму критерию при помощи ВПР.

Чтобы упростить работу в будущем и застраховать себя от возможных ошибок при добавлении новой информации о продажах, мы рекомендуем использовать «умную» таблицу. Она автоматически подстроит свой размер с учетом добавленных строк, и никакие ссылки в формулах не нужно будет менять.

Вот как это будет выглядеть.

ВПР по нескольким критериям с применением массивов — способ 2.

Выше мы уже рассматривали, как при помощи формулы массива можно организовать поиск ВПР с несколькими условиями. Предлагаем еще один способ.

Условия возьмем те же, что и в предыдущем примере.

Формулу в С4 введем такую:

Естественно, не забываем нажать CTRL+Shift+Enter.

Теперь давайте пошагово разберем, как это работает.

Наше задача здесь – также создать дополнительный столбец для работы функции ВПР. Только теперь мы создаем его не на листе рабочей книги Excel, а виртуально.

Как и в предыдущем примере, мы ищем текст из объединенных в одно целое условий поиска.

Далее определяем данные, среди которых будем искать.

Конструкция вида A7:A20&B7:B20&C7:C20;D7:D20 создает 2 элемента. Первый – это объединение колонок A, B и C из исходных данных. Если помните, то же самое мы делали в нашем дополнительном столбце. Второй D7:D20 – это значения, одно из которых нужно в итоге выбрать.

Функция ВЫБОР позволяет из этих элементов создать массив. как раз и означает, что нужно взять сначала первый элемент, затем второй, и объединить их в виртуальную таблицу – массив.

В первой колонке этой виртуальной таблицы мы будем искать, а из второй – извлекать результат.

Таким образом, для работы функции ВПР с несколькими условиями мы вновь используем дополнительный столбец. Только создаем его не реально, а виртуально.

Двойной ВПР при помощи ИНДЕКС + ПОИСКПОЗ

Далее речь у нас пойдет уже не о функции ВПР, но задачу мы будем решать ту же самую. В качестве критерия поиска нам опять нужно использовать несколько условий.

Формула в С4 теперь выглядит так:

И не забываем при вводе нажать CTRL+Shift+Enter! Это формула массива.

Теперь давайте разбираться, как это работает.

Функция ИНДЕКС в нашем случае позволяет извлечь элемент из списка по его порядковому номеру. Список – это диапазон D7:D20, где записаны суммы выручки. А вот порядковый номер, который нужно извлечь, мы определяем при помощи ПОИСКПОЗ.

Синтаксис здесь следующий:

ПОИСКПОЗ(что_ищем; где_ищем; тип_поиска)

Тип поиска ставим 0, то есть точное совпадение. В нашем случае мы будем искать 1. Далее мы определим массив, в котором будем работать.

Выражение (A7:A20=C1)*(B7:B20=C2)*(C7:C20=C3) позволит создать виртуальную таблицу примерно такого вида:

Как видите, первоначально мы последовательно сравниваем каждое значение с нашим критерием отбора. В столбце А у нас записаны месяцы – сравниваем их с месяцем-критерием из ячейки C1. В случае совпадения получаем ИСТИНА, иначе – ЛОЖЬ. Аналогично последовательно проверяем год и название магазина. А затем просто перемножаем значения. Поскольку логические переменные для Excel – это либо 0, либо 1, то произведение их может быть равно 1 только в том случае, если мы имеем по каждой колонке ИСТИНА (то есть,1). Во всех остальных случаях получаем 0.

Убеждаемся, что цифра 1 встречается только единожды.

При помощи ПОИСКПОЗ определяем, на какой позиции она находится. На какой позиции находится 1, на той же позиции находится в массиве и искомая сумма выручки. В нашем случае это 10-я.

Далее при помощи ИНДЕКС извлекаем 10-ю по счету выручку.

Таким образом мы выбрали значение по нескольким условиям без использования функции ВПР.

Достойная замена – функция СУММПРОИЗВ.

У нас есть данные о продажах нескольких менеджеров в различных регионах. Нужно сделать выборку по дате, менеджеру и региону.

Работает как формула массива, хотя по факту таковой не является. В этом заключается замечательное свойство функции СУММПРОИЗВ, о которой мы еще много будем говорить в других статьях.

Последовательно по каждой строке диапазона от 2-й до 27-й она проверяет совпадение каждого соответствующего значения с критерием поиска. Эти результаты перемножаются между собой и в итоге еще умножаются на сумму выручки. Если среди трех условий будет хотя бы одно несовпадение, то итогом будет 0. В случае совпадения сумма выручки трижды умножится на 1.

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

В качестве бонуса можно продолжить этот пример и рассчитать общую сумму продаж менеджера в определенном регионе.

Для этого из формулы просто уберем сравнение по дате.

Кстати, возможен и другой вариант расчета с этой же функцией:

Итак, мы рассмотрели примеры использования функции ВПР с двумя и с несколькими условиями. А также обнаружили, что этой ценной функции есть замечательная альтернатива.

Примеры использования функции ВПР:

Как объединить две или несколько таблиц в Excel — В этом руководстве вы найдете некоторые приемы объединения таблиц Excel путем сопоставления данных в одном или нескольких столбцах. Как часто при анализе в Excel вся необходимая информация собирается на одном…

ВПР с несколькими таблицами

2 способа извлечь данные из разных таблиц при помощи ВПР. — Задача: Данные, которые нужно найти и извлечь при помощи функции ВПР, находятся в нескольких таблицах. Эти таблицы имеют одинаковую структуру (то есть, одни и те же столбцы, расположенные в одном…
/> Вычисление номера столбца для извлечения данных в ВПР — Задача: Наиболее простым способом научиться указывать тот столбец, из которого функция ВПР будет извлекать данные. При этом мы не будем изменять саму формулу, поскольку это может привести в случайным ошибкам.…
4 способа, как сделать левый ВПР в Excel. — Функция ВПР – одна из самых популярных, когда нужно найти и извлечь из таблицы какие-либо данные. Но при этом она имеет один существенный недостаток. Поиск она производит в крайнем левом…
Формула ВПР в Excel для сравнения двух таблиц — 4 способа — Сравнение таблиц – это задача, которую в Excel приходится довольно часто решать. Например, у нас есть старый прайс-лист и его новая версия. Нужно просмотреть, цены на какие товары изменились и…
Почему не работает ВПР в Excel? — Функция ВПР – это очень мощный инструмент поиска. Но если он по каким-то причинам завершился неудачно, то вы получите сообщение об ошибке #Н/Д (#N/A в английском варианте). Давайте постараемся вместе…
Функция ВПР в Excel: пошаговая инструкция с 5 примерами — ВПР — это функция Excel для поиска и извлечения данных из определенного столбца в таблице. Она поддерживает приблизительное и точное сопоставление, а также подстановочные знаки (* и ?). Значения поиска…
Формула ВПР в Excel — 22 факта, которые нужно знать. — В процессе работы в Excel часто возникает задача извлечения нужных данных из рабочих таблиц. Для этой цели в Excel предусмотрена формула ВПР (VLOOKUP в английском варианте). И хотя ВПР относительно…

Суть запроса на выборку – выбрать из исходной таблицы строки, удовлетворяющие определенным критериям (подобно применению стандартного Фильтра ). Произведем отбор значений из исходной таблицы с помощью формул массива . В отличие от применения Фильтра ( CTRL+SHIFT+L или Данные/ Сортировка и фильтр/ Фильтр ) отобранные строки будут помещены в отдельную таблицу.

В этой статье рассмотрим наиболее часто встречающиеся запросы, например: отбор строк таблицы, у которых значение из числового столбца попадает в заданный диапазон (интервал); отбор строк, у которых дата принаждежит определенному периоду; задачи с 2-мя текстовыми критериями и другие. Начнем с простых запросов.

1. Один числовой критерий (Выбрать те Товары, у которых цена выше минимальной)

Пусть имеется Исходная таблица с перечнем Товаров и Ценами (см. файл примера, лист Один критерий — число ).

Необходимо отобразить в отдельной таблице только те записи (строки) из Исходной таблицы, у которых цена выше 25.

Решить эту и последующие задачи можно легко с помощью стандартного фильтра . Для этого выделите заголовки Исходной таблицы и нажмите CTRL+SHIFT+L . Через выпадающий список у заголовка Цены выберите Числовые фильтры. , затем задайте необходимые условия фильтрации и нажмите ОК.

Будут отображены записи удовлетворяющие условиям отбора.

Другим подходом является использование формул массива . В отличие от фильтра отобранные строки будут помещены в отдельную таблицу — своеобразный Отчет , который, например, можно отформатировать в стиль отличный от Исходной таблицы или производить другие ее модификации.

Критерий (минимальную цену) разместим в ячейке Е6 , таблицу для отфильтрованных данных — в диапазоне D10:E19 .

Теперь выделим диапазон D11:D19 (столбец Товар) и в Строке формул введем формулу массива :

Вместо ENTER нажмите сочетание клавиш CTRL+SHIFT+ENTER .

Те же манипуляции произведем с диапазоном E11:E19 куда и введем аналогичную формулу массива :

В результате получим новую таблицу, которая будет содержать только товары, у которых цены попадают в интервал, указанный в ячейках Е5 и Е6 .

Чтобы показать динамизм полученного Отчета (Запроса на выборку) введем в Е6 значение 65. В новую таблицу будет добавлена еще одна запись из Исходной таблицы, удовлетворяющая новому критерию.

Если в Исходную таблицу добавить новый товар с Ценой в диапазоне от 25 до 65, то в новую таблицу будет добавлена новая запись.

В файле примера также содержатся формулы массива с обработкой ошибок, когда в столбце Цена содержится значение ошибки, например #ДЕЛ/0! (см. лист Обработка ошибок ).

Следующие задачи решаются аналогичным образом, поэтому не будем их рассматривать так детально.

3. Один критерий Дата (Выбрать те Товары, у которых Дата поставки совпадает заданной)

Пусть имеется Исходная таблица с перечнем Товаров и Датами поставки (см. файл примера, лист Один критерий — Дата ).

Для отбора строк используются формулы массива, аналогичные Задаче1 (вместо критерия =$B$12:$B$20)*(СТРОКА($B$12:$B$20)-СТРОКА($B$11));$J$12-СТРОКА(A12)+СТРОКА($B$11)+1))

Примечание : После ввода формулы вместо клавиши ENTER (ВВОД) нужно нажать сочетание клавиш CTRL+SHIFT+ENTER. Это сочетание клавиш используется для ввода формул массива.

Скопируйте формулу массива вниз на нужное количество ячеек. Формула вернет только те значения Товаров, которые были поставлены в диапазоне указанных дат. В остальных ячейках будут содержаться ошибки #ЧИСЛО! Ошибки в файле примера (Лист 4.Диапазон Дат) скрыты с помощью Условного форматирования .

Аналогичную формулу нужно ввести и для дат в столбец E.

В ячейке J12 вычислено количество строк исходной таблицы, удовлетворяющих критериям:

Решение2 : Для отбора строк можно использовать формулы массива, аналогичные Задаче2 (т.е. формулы массива, возвращающие несколько значений ):

Для ввода первой формулы выделите диапазон ячеек G12:G20 . После ввода формулы вместо клавиши ENTER (ВВОД) нужно нажать сочетание клавиш CTRL+SHIFT+ENTER.

Решение3 : Если столбец Дат СОРТИРОВАН, то можно не использовать формулы массива.

Сначала необходимо вычислить первую и последнюю позиции строк, которые удовлетворяют критериям. Затем вывести строки с помощью функции СМЕЩ() .

Этот пример еще раз наглядно демонстрирует насколько предварительная сортировка данных облегчает написание формул.

5. Один критерий Дата (Выбрать те Товары, у которых Дата поставки не раньше/ не позже заданной)

Пусть имеется Исходная таблица с перечнем Товаров и Датами поставки (см. файл примера, лист Один критерий — Дата (не позже) ).

Для отбора строк, дата которых не раньше (включая саму дату), используется формула массива:

= ИНДЕКС(A12:A20;НАИМЕНЬШИЙ(ЕСЛИ($E$7 C15;И($B$7>=B15;$B$7 =$B$13:$B$21)*($B$13:$B$21>0);СТРОКА($B$13:$B$21);»»);СТРОКА($B$13:$B$21)-СТРОКА($B$12)) -СТРОКА($B$12))

Условие $E$7=$A$13:$A$21 гарантирует, что будут отобраны товары только определенного типа. Условие $E$8>=$B$13:$B$21 гарантирует, что будут отобраны даты не позже заданной (включая). Условие $B$13:$B$21>0 необходимо, если в диапазоне дат имеются пустые ячейки. Знак * (умножение) используется для задания Условия И (все 3 критерия должны выполняться для строки одновременно).

Примечание . Случай, когда список несортирован, рассмотрен в статье Поиск ДАТЫ (ЧИСЛА) ближайшей к заданной, с условием в MS EXCEL. Несортированный список .

7. Один Текстовый критерий (Выбрать Товары определенного вида)

Пусть имеется Исходная таблица с перечнем Товаров и Ценами (см. файл примера, лист Один критерий — Текст ).

Задача решается аналогично Задачам 1 и 3. Более подробное решение см. в статье Поиск ТЕКСТовых значений в MS EXCEL с выводом их в отдельный список. Часть1. Обычный поиск .

8. Два Текстовых критерия (Выбрать Товары определенного вида, поставленные в заданный месяц)

Пусть имеется Исходная таблица с перечнем Товаров и Ценами (см. файл примера, лист 2 критерия — текст (И) ).

Для отбора строк используется формула массива:

Выражение ($F$6=$A$11:$A$19)*($F$7=$B$11:$B$19) задает оба условия (Товар и Месяц).

Выражение СТРОКА(ДВССЫЛ(«A1:A»&ЧСТРОК($A$11:$A$19))) формирует массив последовательных чисел , т.е. номера строк в таблице.

9. Два Текстовых критерия (Выбрать Товары определенных видов)

Пусть имеется Исходная таблица с перечнем Товаров и Ценами (см. файл примера, лист 2 критерия — текст (ИЛИ) ).

В отличие от Задачи 7 отберем строки с товарами 2-х видов ( Условие ИЛИ ).

Для отбора строк используется формула массива:

= ИНДЕКС(A$11:A$19; НАИБОЛЬШИЙ((($E$6=$A$11:$A$19)+($E$7=$A$11:$A$19))*(СТРОКА($A$11:$A$19)-СТРОКА($A$10)); СЧЁТЕСЛИ($A$11:$A$19;$E$6)+СЧЁТЕСЛИ($A$11:$A$19;$E$7)-ЧСТРОК($A$11:A11)+1))

Условие ($E$6=$A$11:$A$19)+($E$7=$A$11:$A$19) гарантирует, что будут отобраны товары только заданных видов из желтых ячеек (Товар2 и Товар3). Знак + (сложение) используется для задания Условие ИЛИ (должен быть выполнен хотя бы 1 критерий).

Вышеуказанное выражение вернет массив . Умножив его на выражение СТРОКА($A$11:$A$19)-СТРОКА($A$10) , т.е. на массив последовательных чисел , получим массив позиций (номеров строк таблицы), удовлетворяющих критериям. В нашем случае это будет массив .

С помощью функции НАИБОЛЬШИЙ() выведем 3 значения из позиции 5 (строка 15 листа), 6 (16) и 7 (17), т.е. значения Товар2, Товар2 и Товар3. Для этого используем выражение СЧЁТЕСЛИ($A$11:$A$19;$E$6)+СЧЁТЕСЛИ($A$11:$A$19;$E$7)-ЧСТРОК($A$11:A11)+1 , которое последовательно (начиная со строки 11) будет возвращать числа 3; 2; 1; 0; -1; -2; . Формула НАИБОЛЬШИЙ(. ;3) вернет число 5, НАИБОЛЬШИЙ(. ;2) вернет число 6, НАИБОЛЬШИЙ(. ;1) вернет число 7, а НАИБОЛЬШИЙ(. ;0) и далее вернет ошибку, которую мы скроем условным форматированием .

И наконец, с помощью функции ИНДЕКС() последовательно выведем наши значения из соответствующих позиций: = ИНДЕКС(A$11:A$19;5) вернет Товар2, = ИНДЕКС(A$11:A$19;6) вернет Товар2, = ИНДЕКС(A$11:A$19;7) вернет Товар3.

10. Отбор значений с учетом повторов

В разделе Отбор на основании повторяемости собраны статьи о запросах с группировкой данных. Из повторяющихся данных сначала отбираются уникальные значения, а соответствующие им значения в других столбцах — группируются (складываются, усредняются и пр.).

Наиболее популярные статьи из этого раздела:

В качестве примера приведем решения следующей задачи: Выбрать Товары, цена которых лежит в определенном диапазоне и повторяется заданное количество раз или более.

В качестве исходной возьмем таблицу партий товаров.

Предположим, что нас интересует сколько и каких партий товаров поставлялось по цене от 1000р. до 2000р. (критерий 1). Причем, партий с одинаковой ценой должно быть минимум 3 (критерий 2).

Решением является формула массива:

Эта формула возвращает номера строк, которые удовлетворяют обоим критериям.

Формула =СУММПРОИЗВ(($C$14:$C$27>=$B$7)*($C$14:$C$27 =$B$10)) подсчитывает количество строк, которые удовлетворяют критериям.

В файле примера на листе «10.Критерий — колич-во повторов» настроено Условное форматирование , которое позволяет визуально определить строки удовлетворяющие критериям, а также скрыть ячейки, в которых формула массива возвращает ошибку #ЧИСЛО!

11. Используем значение критерия (Любой) или (Все)

В фильтре Сводных таблиц MS EXCEL используется значение (Все), чтобы вывести все значения столбца. Другими словами, в выпадающем списке значений критерия содержится особое значение, которое отменяет сам критерий (см. статью Отчеты в MS EXCEL , Отчет №3).

В файле примера на листе «11. Критерий Любой или (Все)» реализован данный вариант критерия.

Формула в этом случае должна содержать функцию ЕСЛИ() . Если выбрано значение (Все), то используется формула для вывода значений без учета данного критерия. Если выбрано любое другое значение, то критерий работает обычным образом.

Остальная часть формулы аналогична рассмотренным выше.

12. Актуальная цена

Пусть для товара ежедневно заполняется таблица цен (цена может меняться, но не каждый день). Нужно найти актуальнуй цену, т.е. цену на последнюю дату. Если товар всего один, то можно отсортировать по дате и в последней строке будет нужная актуальная цена. Если товаров много, то нужно сначала выбрать Автофильтром нужный товар, затем опять отсортировать по цене.

Чтобы иметь перечень товаров с актуальными ценами придется использовать формулы:

2) определяем последнюю (максимальную) дату для каждого товара с помощью формулы массива =МАКС((Таблица1[товар]=E8)*Таблица1[дата])

3) наконец, выводим актуальную цену =СУММЕСЛИМН(Таблица1[цена];Таблица1[товар];E8;Таблица1[дата];F8)

Для товара не должно быть повторов дат, иначе цены будут суммироваться (если повторяется последняя дата).

Понравилась статья? Поделить с друзьями:
  • Как в excel копировать без скрытых ячеек
  • Как в excel корень пятой степени
  • Как в excel копирование формул в ячейки
  • Как в excel копировать ячейку на другой лист
  • Как в excel копейки перевести в рубли