Перенос данных в excel с условием если

 

mlm1

Пользователь

Сообщений: 117
Регистрация: 01.01.1970

Интересует следующее  

  Нужно выполнить перенос данных из строк из одного листа на второй по условиям  

  есть строки с данными  
в первом столбце ставим цифру 1 (или другой знак)  
соответственно данная строка должна быть перемещена на второй лист или цифры убираем то и строка убирается со второго листа  
объем до ста строк

 

Hugo

Пользователь

Сообщений: 23254
Регистрация: 22.12.2012

Вы меня конечно извините, но как Вы собираетесь «или цифры убираем» из строки, которой уже нет?  
Компьютер думать не умеет — если ему сказали «ПЕРЕНЕСИ», то ведь он и перенесёт :)

 

mlm1

Пользователь

Сообщений: 117
Регистрация: 01.01.1970

{quote}{login=Hugo}{date=02.12.2011 10:49}{thema=}{post}Вы меня конечно извините, но как Вы собираетесь «или цифры убираем» из строки, которой уже нет?  
Компьютер думать не умеет — если ему сказали «ПЕРЕНЕСИ», то ведь он и перенесёт :){/post}{/quote}  
убираем только из первого столбца  
т.е должно выполниться условие на втором листе  
если в столбце A1:A10 присуствует знак (цифра) то данная строка переносится на второй лист и соответственно если ничего нет то строка не переносится

 

Hugo

Пользователь

Сообщений: 23254
Регистрация: 22.12.2012

Давайте внесём ясность — по русски «перенести» значит что-то взять в одном месте и отнести в другое.  
Судя по общему описанию — Вам не нужно переносить, а нужно копировать.  
Пока нет ясности — нет кода.

 

mlm1

Пользователь

Сообщений: 117
Регистрация: 01.01.1970

{quote}{login=Hugo}{date=02.12.2011 11:18}{thema=}{post}Давайте внесём ясность — по русски «перенести» значит что-то взять в одном месте и отнести в другое.  
Судя по общему описанию — Вам не нужно переносить, а нужно копировать.  
Пока нет ясности — нет кода.{/post}{/quote}  

  Да, не правильно выразился — скопировать требуется

 

Hugo

Пользователь

Сообщений: 23254
Регистрация: 22.12.2012

Такой вариант — всё в модуле второго листа.  
Копируются только данные — без форматов!  
Но пока не перешли на второй лист — данные не обновятся!  
Хотя это можно исправить — выполнять этот код не по событию перехода на второй лист, а по событию изменения на первом в столбце A.  
Всё зависит от неизвестной нам задачи в целом — так как сейчас будет работать быстрее.

 

mlm1

Пользователь

Сообщений: 117
Регистрация: 01.01.1970

{quote}{login=Hugo}{date=02.12.2011 11:39}{thema=}{post}Такой вариант — всё в модуле второго листа.  
Копируются только данные — без форматов!  
Но пока не перешли на второй лист — данные не обновятся!  
Хотя это можно исправить — выполнять этот код не по событию перехода на второй лист, а по событию изменения на первом в столбце A.  
Всё зависит от неизвестной нам задачи в целом — так как сейчас будет работать быстрее.{/post}{/quote}  
Спасибо.Вроде подходит. Как скопировать макрос в др файл, книгу

 

Hugo

Пользователь

Сообщений: 23254
Регистрация: 22.12.2012

Правый клик на ярлыке листа — исходный код — копируете — правый клик на ярлыке листа — исходный код — вставляете

 

mlm1

Пользователь

Сообщений: 117
Регистрация: 01.01.1970

{quote}{login=mlm1}{date=02.12.2011 12:19}{thema=Re: }{post}{quote}{login=Hugo}{date=02.12.2011 11:39}{thema=}{post}Такой вариант — всё в модуле второго листа.  
Копируются только данные — без форматов!  
Но пока не перешли на второй лист — данные не обновятся!  
Хотя это можно исправить — выполнять этот код не по событию перехода на второй лист, а по событию изменения на первом в столбце A.  
Всё зависит от неизвестной нам задачи в целом — так как сейчас будет работать быстрее.{/post}{/quote}  
Спасибо.Вроде подходит. Как скопировать макрос в др файл, книгу{/post}{/quote}  

  Когда убираешь на первом листе цифру то остается некоторые записи на второй странице — как устранить данную проблему

 

Hugo

Пользователь

Сообщений: 23254
Регистрация: 22.12.2012

Это из-за    
a = Sheets(1).UsedRange.Value  
Если первый столбец пустой, то UsedRange начинается со второго столбца…  

  Нужно иначе диапазон определять.  
Можно прописать явно например так:  
a = Sheets(1).[a1:C1000].Value
но лучше для примера сделать так:  

    Private Sub Worksheet_Activate()  
   Dim a(), i&, ii&, x&  
   UsedRange.Clear  
   With Sheets(1)  
   a = .Range(.[C1], .Range(«A» & .Rows.Count).End(IIf(Len(.Range(«A» & .Rows.Count)), xlDown, xlUp))).Value
   End With  
   ReDim b(1 To UBound(a, 1), 1 To UBound(a, 2))  
   For i = 1 To UBound(a)  
       If Len(a(i, 1)) Then  
           ii = ii + 1  
           For x = 2 To UBound(a, 2): b(ii, x) = a(i, x): Next  
       End If  
   Next  
If ii > 0 Then [A1].Resize(ii, UBound(b, 2)) = b
End Sub

 

mlm1

Пользователь

Сообщений: 117
Регистрация: 01.01.1970

{quote}{login=Hugo}{date=02.12.2011 12:53}{thema=}{post}Это из-за    
a = Sheets(1).UsedRange.Value  
Если первый столбец пустой, то UsedRange начинается со второго столбца…  

  Нужно иначе диапазон определять.  
Можно прописать явно например так:  
a = Sheets(1).[a1:C1000].Value
но лучше для примера сделать так:  

    Private Sub Worksheet_Activate()  
   Dim a(), i&, ii&, x&  
   UsedRange.Clear  
   With Sheets(1)  
   a = .Range(.[C1], .Range(«A» & .Rows.Count).End(IIf(Len(.Range(«A» & .Rows.Count)), xlDown, xlUp))).Value
   End With  
   ReDim b(1 To UBound(a, 1), 1 To UBound(a, 2))  
   For i = 1 To UBound(a)  
       If Len(a(i, 1)) Then  
           ii = ii + 1  
           For x = 2 To UBound(a, 2): b(ii, x) = a(i, x): Next  
       End If  
   Next  
If ii > 0 Then [A1].Resize(ii, UBound(b, 2)) = b
End Sub{/post}{/quote}  

  Проблема решена, но копируются первые две ячейки в строке.  
Как сделать так что бы копировалась полностью строка (или первые несколько ячеек например 5-10 ячеек)

 

Hugo

Пользователь

Сообщений: 23254
Регистрация: 22.12.2012

.Range(.[C1]
для 5-10 замените C на E-J :)

 

mlm1

Пользователь

Сообщений: 117
Регистрация: 01.01.1970

{quote}{login=Hugo}{date=02.12.2011 01:26}{thema=}{post}.Range(.[C1]
для 5-10 замените C на E-J :){/post}{/quote}  

  Вставил пишет ошибку 1004 — что то не так

 

Hugo

Пользователь

Сообщений: 23254
Регистрация: 22.12.2012

 

mlm1

Пользователь

Сообщений: 117
Регистрация: 01.01.1970

{quote}{login=Hugo}{date=02.12.2011 01:42}{thema=}{post}Для 5 — E  
для 10 — J  
:){/post}{/quote}  

  Теперь — понял

 

mlm1

Пользователь

Сообщений: 117
Регистрация: 01.01.1970

{quote}{login=mlm1}{date=02.12.2011 02:06}{thema=Re: }{post}{quote}{login=Hugo}{date=02.12.2011 01:42}{thema=}{post}Для 5 — E  
для 10 — J  
:){/post}{/quote}  

  Теперь — понял{/post}{/quote}  

  Возможно ли выполнить такое -при копирование с нескольких листов или только с одного листа

 

Hugo

Пользователь

Сообщений: 23254
Регистрация: 22.12.2012

Можно и с нескольких.  
Просто взять данные или в несколько массивов и выгрузить один под другим, или брать несколько раз в один и выгружать несколько раз со сдвигом.  
Смотря сколько листов — если пара/тройка, то я бы сделал несколько массивов (чтоб не бегать по листам), и по Ubound(массив) определял сдвиг (ну это в обоих вариантах пригодится).

 

mlm1

Пользователь

Сообщений: 117
Регистрация: 01.01.1970

{quote}{login=Hugo}{date=05.12.2011 03:17}{thema=}{post}Можно и с нескольких.  
Просто взять данные или в несколько массивов и выгрузить один под другим, или брать несколько раз в один и выгружать несколько раз со сдвигом.  
Смотря сколько листов — если пара/тройка, то я бы сделал несколько массивов (чтоб не бегать по листам), и по Ubound(массив) определял сдвиг (ну это в обоих вариантах пригодится).{/post}{/quote}  

  Есть 10 листов  
С каждого листа планируется копировать по 10 записей на один лист

 

mlm1

Пользователь

Сообщений: 117
Регистрация: 01.01.1970

{quote}{login=mlm1}{date=05.12.2011 03:45}{thema=Re: }{post}{quote}{login=Hugo}{date=05.12.2011 03:17}{thema=}{post}Можно и с нескольких.  
Просто взять данные или в несколько массивов и выгрузить один под другим, или брать несколько раз в один и выгружать несколько раз со сдвигом.  
Смотря сколько листов — если пара/тройка, то я бы сделал несколько массивов (чтоб не бегать по листам), и по Ubound(массив) определял сдвиг (ну это в обоих вариантах пригодится).{/post}{/quote}  

  Есть 10 листов  
С каждого листа планируется копировать по 10 записей на один лист{/post}{/quote}  

  Подскажите как это реализовать

 

Hugo

Пользователь

Сообщений: 23254
Регистрация: 22.12.2012

Я уже подсказал :)  
А если Вам нужен полностью рабочий код — то нужен пример в файле с подробным объяснением. И время — у меня его сейчас нет, т.ч. может быть кто-то другой сделает…  
А вообще код то в общем готов — только в цикл по листам его поставить и место выгрузки динамически определить.

 

mlm1

Пользователь

Сообщений: 117
Регистрация: 01.01.1970

{quote}{login=Hugo}{date=08.12.2011 12:46}{thema=}{post}Я уже подсказал :)  
А если Вам нужен полностью рабочий код — то нужен пример в файле с подробным объяснением. И время — у меня его сейчас нет, т.ч. может быть кто-то другой сделает…  
А вообще код то в общем готов — только в цикл по листам его поставить и место выгрузки динамически определить.{/post}{/quote}  

  Нужно решить по возможности следующую задачу  
Если в столбце А на Листе 1 и 2 присуствуют знак или цифра то на листе 2 отображаются данные из соответствующих строк (напротив кот в столбце А находятся цифры или знаки

 

Hugo

Пользователь

Сообщений: 23254
Регистрация: 22.12.2012

Не понял эту фразу:  
«Если в столбце А на Листе 1 и 2 присуствуют знак или цифра то на листе 2»  
Я думаю, подразумевался Лист3.  
Для двух конкретных листов можно так сделать (почему в коде [J1], я уже не помню, но не менял) — код для второго листа, где похожий уже есть:

  Option Explicit  

  Private Sub Worksheet_Activate()  
   Dim a(), i&, ii&, x&, sh, sdvig&  
   UsedRange.Clear  
   sdvig = 1  
   For Each sh In Array(«Лист1», «Лист3»)  
       ii = 0  
       With Sheets(sh)  
           a = .Range(.[J1], .Range(«A» & .Rows.Count).End(IIf(Len(.Range(«A» & .Rows.Count)), xlDown, xlUp))).Value
       End With  
       ReDim b(1 To UBound(a, 1), 1 To UBound(a, 2))  
       For i = 1 To UBound(a)  
           If Len(a(i, 1)) Then  
               ii = ii + 1  
               For x = 2 To UBound(a, 2): b(ii, x) = a(i, x): Next  
           End If  
       Next  
       If ii > 0 Then  
          Range(«A» & sdvig).Resize(ii, UBound(b, 2)) = b  
       sdvig = sdvig + ii  
       End If  
   Next  
End Sub

 

mlm1

Пользователь

Сообщений: 117
Регистрация: 01.01.1970

{quote}{login=Hugo}{date=09.12.2011 10:29}{thema=}{post}Не понял эту фразу:  
«Если в столбце А на Листе 1 и 2 присуствуют знак или цифра то на листе 2»  
Я думаю, подразумевался Лист3.  
Для двух конкретных листов можно так сделать (почему в коде [J1], я уже не помню, но не менял) — код для второго листа, где похожий уже есть:

  Option Explicit  

  Private Sub Worksheet_Activate()  
   Dim a(), i&, ii&, x&, sh, sdvig&  
   UsedRange.Clear  
   sdvig = 1  
   For Each sh In Array(«Лист1», «Лист3»)  
       ii = 0  
       With Sheets(sh)  
           a = .Range(.[J1], .Range(«A» & .Rows.Count).End(IIf(Len(.Range(«A» & .Rows.Count)), xlDown, xlUp))).Value
       End With  
       ReDim b(1 To UBound(a, 1), 1 To UBound(a, 2))  
       For i = 1 To UBound(a)  
           If Len(a(i, 1)) Then  
               ii = ii + 1  
               For x = 2 To UBound(a, 2): b(ii, x) = a(i, x): Next  
           End If  
       Next  
       If ii > 0 Then  
          Range(«A» & sdvig).Resize(ii, UBound(b, 2)) = b  
       sdvig = sdvig + ii  
       End If  
   Next  
End Sub{/post}{/quote}  

  Спасибо работает

 

mlm1

Пользователь

Сообщений: 117
Регистрация: 01.01.1970

#24

19.01.2012 14:52:24

{quote}{login=mlm1}{date=09.12.2011 10:36}{thema=Re: }{post}{quote}{login=Hugo}{date=09.12.2011 10:29}{thema=}{post}Не понял эту фразу:  
«Если в столбце А на Листе 1 и 2 присуствуют знак или цифра то на листе 2»  
Я думаю, подразумевался Лист3.  
Для двух конкретных листов можно так сделать (почему в коде [J1], я уже не помню, но не менял) — код для второго листа, где похожий уже есть:

  Option Explicit  

  Private Sub Worksheet_Activate()  
   Dim a(), i&, ii&, x&, sh, sdvig&  
   UsedRange.Clear  
   sdvig = 1  
   For Each sh In Array(«Лист1», «Лист3»)  
       ii = 0  
       With Sheets(sh)  
           a = .Range(.[J1], .Range(«A» & .Rows.Count).End(IIf(Len(.Range(«A» & .Rows.Count)), xlDown, xlUp))).Value
       End With  
       ReDim b(1 To UBound(a, 1), 1 To UBound(a, 2))  
       For i = 1 To UBound(a)  
           If Len(a(i, 1)) Then  
               ii = ii + 1  
               For x = 2 To UBound(a, 2): b(ii, x) = a(i, x): Next  
           End If  
       Next  
       If ii > 0 Then  
          Range(«A» & sdvig).Resize(ii, UBound(b, 2)) = b  
       sdvig = sdvig + ii  
       End If  
   Next  
End Sub{/post}{/quote}  

  Спасибо работает{/post}{/quote}  

  Добрый день  
Подскажите возможно ли выполнить следующее используя Ваш код  

  необходимо по условию копировать на разные листы  
если в столбце А есть знак, цифра — то данные копируются на лист 2  
если в столбце В есть знак, цифра — то данные копируются на лист 3  
Пример во вложении

Прикрепленные файлы

  • post_298750.xlsx (8.56 КБ)

Перенос значений из ячейки если выполняется условие

Maderex

Дата: Среда, 06.08.2014, 14:34 |
Сообщение № 1

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

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

Сообщений: 17


Репутация:

0

±

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


Excel 2013

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

Гуру экселя, ХЕЛП.

Заранее спасибо)

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

6470168.xlsx
(11.2 Kb)

 

Ответить

Russel

Дата: Среда, 06.08.2014, 14:40 |
Сообщение № 2

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

Ранг: Старожил

Сообщений: 1392


Репутация:

318

±

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


Excel 2010

Тупо фильтром не пойдет?

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

7933989.xlsx
(11.2 Kb)


QIWI 9173973973

 

Ответить

Maderex

Дата: Среда, 06.08.2014, 14:47 |
Сообщение № 3

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

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

Сообщений: 17


Репутация:

0

±

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


Excel 2013

Тупо фильтром не пойдет?
К сообщению приложен файл: 7933989.xlsx(11Kb)

К сожалению нет( Нужно что бы все в новую таблицу переносилось.

 

Ответить

китин

Дата: Среда, 06.08.2014, 14:51 |
Сообщение № 4

Группа: Модераторы

Ранг: Экселист

Сообщений: 6973


Репутация:

1063

±

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


Excel 2007;2010;2016

может так?формула массива

Код

=ЕСЛИОШИБКА(ИНДЕКС($A$3:$A$14;НАИМЕНЬШИЙ(ЕСЛИ($B$3:$B$14<>»»;СТРОКА($A$3:$A$14)-2);СТРОКА(A1)));»»)

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

Maderex.xlsx
(12.0 Kb)


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852

 

Ответить

Maderex

Дата: Среда, 06.08.2014, 14:53 |
Сообщение № 5

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

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

Сообщений: 17


Репутация:

0

±

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


Excel 2013

может так?формула массива
[Перевод / Translate]
=ЕСЛИОШИБКА(ИНДЕКС($A$3:$A$14;НАИМЕНЬШИЙ(ЕСЛИ($B$3:$B$14<>»»;СТРОКА($A$3:$A$14)-2);СТРОКА(A1)));»»)
К сообщению приложен файл: Maderex.xlsx(12Kb)

Крутяк, то что нужно, спасибо огромное)

 

Ответить

китин

Дата: Среда, 06.08.2014, 14:55 |
Сообщение № 6

Группа: Модераторы

Ранг: Экселист

Сообщений: 6973


Репутация:

1063

±

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


Excel 2007;2010;2016

Maderex, зачем весь пост цитировать?и некрасиво и читать неудобно %)


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852

 

Ответить

Arndt

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

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

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

Сообщений: 5


Репутация:

0

±

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


Excel 2016

Гуру, помоги!

Как в моем случае использовать аналогичную формулу массива?
Полдня потратил в попытках приспособить ту, которая для Maderex’а.

«В файле пример как должно быть в итоге.»

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

888555.xlsx
(91.4 Kb)

 

Ответить

Arndt

Дата: Среда, 03.01.2018, 15:06 |
Сообщение № 8

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

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

Сообщений: 5


Репутация:

0

±

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


Excel 2016

У меня примерно 1500 строк, если это имеет значение..

 

Ответить

китин

Дата: Четверг, 04.01.2018, 11:35 |
Сообщение № 9

Группа: Модераторы

Ранг: Экселист

Сообщений: 6973


Репутация:

1063

±

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


Excel 2007;2010;2016

там только диапазоны поменять

Код

=ЕСЛИОШИБКА(ИНДЕКС($B$9:$B$1500;НАИМЕНЬШИЙ(ЕСЛИ($F$9:$F$1500<>»»;СТРОКА($B$9:$B$1500)-8);СТРОКА(A1)));»»)

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

Arndt.xlsx
(91.8 Kb)


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852

 

Ответить

Arndt

Дата: Четверг, 04.01.2018, 16:29 |
Сообщение № 10

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

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

Сообщений: 5


Репутация:

0

±

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


Excel 2016

«…Если бы мы вводили обычную формулу в Excel, то закончили бы ввод нажатием клавиши Enter. Но поскольку это формула массива, то нужно нажать комбинацию клавиш Ctrl+Shift+Enter. Этим мы укажем Excel, что это не обычная формула, а формула массива, и он автоматически заключит ее в фигурные скобки..»

Часть решения для меня была здесь.

respect

 

Ответить

nipolka

Дата: Суббота, 30.01.2021, 16:50 |
Сообщение № 11

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

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

Сообщений: 2


Репутация:

0

±

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


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

 

Ответить

Pelena

Дата: Суббота, 30.01.2021, 17:34 |
Сообщение № 12

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

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

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Смысла нет. Вряд ли китин помнит задачу трёхлетней давности. Создайте свою тему с файлом примером.
Эта тема закрыта


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

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

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

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

0 / 0 / 0

Регистрация: 30.06.2016

Сообщений: 4

1

Перенос всех строк с заданным условием на другой лист

30.06.2016, 21:23. Показов 56124. Ответов 20


Студворк — интернет-сервис помощи студентам

Здравствуйте.

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

К примеру, у меня есть набор данных, из которых я хочу вычленить только те, где значение столбца URL = *instagram.com и перенести на другой лист вместе со всеми другими параметрами.

Читала много тем на форуме, но никак не могу провести параллели со своей задачей.

Очень буду рада помощи! Спасибо.

тест.xlsx



0



5942 / 3154 / 698

Регистрация: 23.11.2010

Сообщений: 10,524

30.06.2016, 21:25

2

Расширенный фильтр посмотрите



0



0 / 0 / 0

Регистрация: 30.06.2016

Сообщений: 4

30.06.2016, 21:32

 [ТС]

3

Посмотрела. Пишет, что копирование на отдельный лист не допускается.

Пол дня сегодня промучилась над этим вопросом( Голова уже не соображает.

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

Мальчик занимавшийся макросами уволился, а на меня всех собак повесили.
Если кто может объяснить доходчиво, я попробую написать сама, но за что хвататься — не знаю!



0



5942 / 3154 / 698

Регистрация: 23.11.2010

Сообщений: 10,524

30.06.2016, 22:02

4

testpa, скопируйте на этот же лист, потом перенесете на другой лист



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

30.06.2016, 22:13

5

Лучший ответ Сообщение было отмечено testpa как решение

Решение

testpa, Если

перед

тем, как вызвать диалоговое окно Расширенный фильтр, Вы активируете рабочий лист, куда необходимо скопировать все отфильтрованные данные, то всё сработает. А если захотите немного упростить себе жизнь, то в аттаче сможете найти пример с тем же расширенным фильтром.



3



0 / 0 / 0

Регистрация: 30.06.2016

Сообщений: 4

30.06.2016, 22:28

 [ТС]

6

Огромное спасибо! Все работает!!! Даже с кнопочкой

Но как вы это сделали?? Я вас очень прошу, объясните мне поэтапно, если после рабочего дня на это остались силы и терпение. Я не могу тупо пользоваться уже готовым( Если задача поменяется и нужно будет менять какие-то условия, то сяду в лужу. Хочется понять принцип работы, чтобы самой в дальнейшем решать. Нужно головой не только кушать)

Тысячи благодарностей вам)



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

30.06.2016, 22:44

7

Собственно, я просто использовал расширенный фильтр, только программно. Единственный нюанс — исходный диапазон, там определяется как текущая область вокруг ячейки Упоминания!B3

Миниатюры

Перенос всех строк с заданным условием на другой лист
 



0



0 / 0 / 0

Регистрация: 30.06.2016

Сообщений: 4

30.06.2016, 23:19

 [ТС]

8

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

Добавлено через 9 минут
pashulka, и последнее) Скажите, а можно вот этот уже готовый фильтр превратить в макрос (и сделать для него такую же красивую кнопочку, как у вас).



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

30.06.2016, 23:39

9



0



0 / 0 / 0

Регистрация: 19.10.2015

Сообщений: 13

07.06.2020, 01:01

10

Доброго времени суток, Уважаемые знатоки!
У меня похожая ситуация, только можно подправить таким образом, чтобы копировалась не вся строка, а только именно эти столбцы.
Заранее спасибо!



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

07.06.2020, 08:26

11

alyaska213, Если столбец, где находятся критерии отбора, является частью ‘именно этих’ столбцов, то указывайте конкретно их. А если речь идёт о несмежных столбцах, то копируете все столбцы и удаляете ненужные.

Или говорите более предметно, файл с абстрактными данными (в виде .xls/.xlsx, не картинки) в виде нескольких десятков строк. И что нужно копировать, по какому принципу(критерию). И не помешает сказать, сколько в реальности строк.



0



0 / 0 / 0

Регистрация: 19.10.2015

Сообщений: 13

07.06.2020, 11:48

12

Я в качестве примера за основу взял данные девушки, которая выше писала, т.к. вся база на работе осталась.
Но учел количество столбцов.

В файле лист «Данные» строк будет не более 1500. По столбцу, выделенной красной заливкой, будет происходить фильтрование, по аналогии с сообщениями девушки выше (vk.com, facebook.com, и т.д.)

В листе «Выборка» — готовый вид отфильтрованных значений.



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

07.06.2020, 13:43

13

В файле нет переноса только избранных столбцов.
А чтобы избежать очистки данных лишних столбцов, достаточно явно указать столбцы, т.е. вместо
wsSheet2.[A5].CurrentRegion.Clear написать что-то вроде wsSheet2.Range(«A5:H» & Rows.Count).Clear

или wsSheet2.Range(«A5:H» & wsSheet2.Rows.Count).Clear если в момент выполнения макроса — активным может быть лист, не имеющий ячеек, например, лист диаграммы



1



0 / 0 / 0

Регистрация: 19.10.2015

Сообщений: 13

07.06.2020, 21:02

14

pashulka, Превосходно и Волшебно!

Я прошу прощения за столь яркие эмоции, просто сам только буквально вчера начал изучать макросы.

Огромнейшее спасибо!!!

С Днем Святой Троицы!



0



0 / 0 / 0

Регистрация: 14.11.2020

Сообщений: 4

14.11.2020, 18:22

15

Здравствуйте!

Я методом тыка и многих чтений сделала такую же таблицу, вот только в моем списке поиск по Фамилии учеников
Подскажите пожалуйста, а можно дописать какую-то команду, чтобы искалось не совпадение в ячейке, а точное значение.
Потому что есть, к примеру Сорокин, а есть СорокинА.
И в поля, связанных с Сорокин, происходит непонятные вычисления.

Буду признательна.



0



2632 / 1637 / 745

Регистрация: 23.03.2015

Сообщений: 5,148

14.11.2020, 18:25

16

teacher6,
Прикрепите файл- пример …
Покажите в нем исходные данные ( 3-4 строки) и что хотите получить…



0



2632 / 1637 / 745

Регистрация: 23.03.2015

Сообщений: 5,148

14.11.2020, 23:52

17

teacher6,

Если используете файл Паши, то уберите звездочки (*) перед словом и после него

Миниатюры

Перенос всех строк с заданным условием на другой лист
 



0



0 / 0 / 0

Регистрация: 14.11.2020

Сообщений: 4

23.11.2020, 08:54

18

Здравствуйте еще раз!
Прошу прощения, времени не было для дальнейшего познания.
Да, этот файл использую, вместо ссылок в примере фамилии. Так вот при однокоренном совпадении, все равно получается весь список.



0



Narimanych

2632 / 1637 / 745

Регистрация: 23.03.2015

Сообщений: 5,148

23.11.2020, 10:42

19

teacher6,
Для вашего файла:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub MMM()
With Worksheets("Óïîìèíàíèÿ")
        Set R1 = Range(.Cells(4, 2), .Cells(.Cells(Rows.Count, 4).End(xlUp).Row, 9))
        ARR1 = R1.Value
End With
M = 1
With Worksheets("Ðåçóëüòàò")
ReDim ARR2(1 To UBound(ARR1), 1 To UBound(ARR1, 2))
 SS = .Cells(2, 1).Value
        For i = 1 To UBound(ARR1)
            If ARR1(i, 3) = SS Then
              For j = 1 To UBound(ARR1, 2)
                ARR2(M, j) = ARR1(i, j)
              Next
              M = M + 1
        End If
        Next
Range(.Cells(6, 1), .Cells(200, 8)).ClearContents
  .Cells(6, 1).Resize(UBound(ARR2), UBound(ARR2, 2)).Value = ARR2
        
End With
End Sub



0



0 / 0 / 0

Регистрация: 06.04.2021

Сообщений: 1

07.04.2021, 11:18

20

Подскажите пожалуйста, как сделать: есть таблица excel, состоящая из трех листов. Необходимо, чтобы при вводе «done» в столбце T вся строка из первого листа копировалась на 3 лист. Спасибо.



0



Логический оператор ЕСЛИ в Excel применяется для записи определенных условий. Сопоставляются числа и/или текст, функции, формулы и т.д. Когда значения отвечают заданным параметрам, то появляется одна запись. Не отвечают – другая.

Логические функции – это очень простой и эффективный инструмент, который часто применяется в практике. Рассмотрим подробно на примерах.

Синтаксис функции ЕСЛИ с одним условием

Синтаксис оператора в Excel – строение функции, необходимые для ее работы данные.

=ЕСЛИ (логическое_выражение;значение_если_истина;значение_если_ложь)

Разберем синтаксис функции:

Логическое_выражение – ЧТО оператор проверяет (текстовые либо числовые данные ячейки).

Значение_если_истина – ЧТО появится в ячейке, когда текст или число отвечают заданному условию (правдивы).

Значение,если_ложь – ЧТО появится в графе, когда текст или число НЕ отвечают заданному условию (лживы).

Пример:

Логическая функция ЕСЛИ.

Оператор проверяет ячейку А1 и сравнивает ее с 20. Это «логическое_выражение». Когда содержимое графы больше 20, появляется истинная надпись «больше 20». Нет – «меньше или равно 20».

Внимание! Слова в формуле необходимо брать в кавычки. Чтобы Excel понял, что нужно выводить текстовые значения.

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

Логический оператор в таблице.

Обратите внимание: оператор ЕСЛИ должен проверить не цифровой тип данных, а текстовый. Поэтому мы прописали в формуле В2= «зач.». В кавычки берем, чтобы программа правильно распознала текст.



Функция ЕСЛИ в Excel с несколькими условиями

Часто на практике одного условия для логической функции мало. Когда нужно учесть несколько вариантов принятия решений, выкладываем операторы ЕСЛИ друг в друга. Таким образом, у нас получиться несколько функций ЕСЛИ в Excel.

Синтаксис будет выглядеть следующим образом:

=ЕСЛИ(логическое_выражение;значение_если_истина;ЕСЛИ(логическое_выражение;значение_если_истина;значение_если_ложь))

Здесь оператор проверяет два параметра. Если первое условие истинно, то формула возвращает первый аргумент – истину. Ложно – оператор проверяет второе условие.

Примеры несколько условий функции ЕСЛИ в Excel:

Вложение логических функций.

Таблица для анализа успеваемости. Ученик получил 5 баллов – «отлично». 4 – «хорошо». 3 – «удовлетворительно». Оператор ЕСЛИ проверяет 2 условия: равенство значения в ячейке 5 и 4.

2 условия оператора ЕСЛИ.

В этом примере мы добавили третье условие, подразумевающее наличие в табеле успеваемости еще и «двоек». Принцип «срабатывания» оператора ЕСЛИ тот же.

Расширение функционала с помощью операторов «И» и «ИЛИ»

Когда нужно проверить несколько истинных условий, используется функция И. Суть такова: ЕСЛИ а = 1 И а = 2 ТОГДА значение в ИНАЧЕ значение с.

Функция ИЛИ проверяет условие 1 или условие 2. Как только хотя бы одно условие истинно, то результат будет истинным. Суть такова: ЕСЛИ а = 1 ИЛИ а = 2 ТОГДА значение в ИНАЧЕ значение с.

Функции И и ИЛИ могут проверить до 30 условий.

Пример использования оператора И:

Пример логического оператора И.

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

Пример логического оператора ИЛИ.

Как сравнить данные в двух таблицах

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

Чтобы сравнить 2 таблицы в Excel, можно воспользоваться оператором СЧЕТЕСЛИ. Рассмотрим порядок применения функции.

Для примера возьмем две таблицы с техническими характеристиками разных кухонных комбайнов. Мы задумали выделение отличий цветом. Эту задачу в Excel решает условное форматирование.

Исходные данные (таблицы, с которыми будем работать):

Две таблицы для сравнения.

Выделяем первую таблицу. Условное форматирование – создать правило – использовать формулу для определения форматируемых ячеек:

Условное форматирование в таблице.

В строку формул записываем: =СЧЕТЕСЛИ (сравниваемый диапазон; первая ячейка первой таблицы)=0. Сравниваемый диапазон – это вторая таблица.

Условия для форматирования ячеек.

Чтобы вбить в формулу диапазон, просто выделяем его первую ячейку и последнюю. «= 0» означает команду поиска точных (а не приблизительных) значений.

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

Выделяем вторую таблицу. Условное форматирование – создать правило – использовать формулу. Применяем тот же оператор (СЧЕТЕСЛИ).

Логический оператор СЧЕТЕСЛИ.

Скачать все примеры функции ЕСЛИ в Excel

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

Like this post? Please share to your friends:
  • Перенос границы страницы в word
  • Перенести строку excel клавиши
  • Перенос границы в excel
  • Перенести столбец таблиц excel
  • Перенос горизонтальных ячеек в вертикальные excel