Здравствуйте! Казалось мне, что действие элементарное, но не смог решить. Спасибо! |
|
ts-79 Пользователь Сообщений: 246 |
|
Z Пользователь Сообщений: 6111 Win 10, MSO 2013 SP1 |
Как вариант — «=ИНДЕКС($G$2:$G$8;B2;1)» «Ctrl+S» — достойное завершение ваших гениальных мыслей!.. |
Необходимо если мы меняем значение номера строки или номера столбца, т.е. получив другой адрес ячейки, увидели значение другой ячейки. |
|
Z Пользователь Сообщений: 6111 Win 10, MSO 2013 SP1 |
#5 31.01.2014 09:48:02
Чтобы без угадай-ки — покажите на примере диапазона 10х10 две ваших «хотелки» … «Ctrl+S» — достойное завершение ваших гениальных мыслей!.. |
||
Z, Уточняю пример в файле: Изменено: Андрей Корчагин — 31.01.2014 09:51:20 |
|
Можно использовать ИНДЕКС или ДВССЫЛ |
|
wowick Пользователь Сообщений: 972 |
Вот такое получилось: правда тут доп ячейка задействована… Изменено: wowick — 31.01.2014 09:57:06 Если автоматизировать бардак, то получится автоматизированный бардак. |
Николай Павлов, Изменено: Андрей Корчагин — 31.01.2014 10:01:12 |
|
Z Пользователь Сообщений: 6111 Win 10, MSO 2013 SP1 |
Нужна привязка в диапазону — у вас он 3х7… «Ctrl+S» — достойное завершение ваших гениальных мыслей!.. |
vikttur Пользователь Сообщений: 47199 |
Молчанов Андрей, не советую. |
БМВ Модератор Сообщений: 21376 Excel 2013, 2016 |
#13 16.01.2021 09:12:45
если посмотреть с каких глубин поднялась тема и то что в #7 уже давалось и такое решение, то дебют Молчанов Андрей явно провалился. в добавок к #7 известный вариант По вопросам из тем форума, личку не читаю. |
||
30 функций Excel за 30 дней: АДРЕС (ADDRESS)
Смотрите также=АДРЕС(ПОИСКПОЗ(F4&МАКС(($A$2:$A$15=F4)*$B$2:$B$15);$A$2:$A$15&$B$2:$B$15;0)+1;2) — формула самом конце. Повторюсь:Ромич «»Так выглядит абсолютный тип записью; которое соответствует номеру файла и название левой верхней ячейки диапазона C1:C11. противном случае функцияЕсли в качестве аргумента чтобы видеть все ИНДЕКС является константной возвращаемый функцией
– если TRUEВчера в марафоне массива. неважно в каком: ну,дык, если вРомич ссылок по строкам«Курсы» — название листа, столбца, в котором листа. в ссылке.216 ИНДЕКС возвращает значение «ссылка» используется несмежный
данные. массива, используйте формуADDRESS (ИСТИНА) или вообще30 функций Excel заZorge столбце мы кликнем А2 вводить новое: а если не и столбцам при
Функция 20: ADDRESS (АДРЕС)
на котором находится расположена искомая ячейка;=CELL(«filename»,B2)filename=СУММ(B2:ИНДЕКС(A2:C6;5;2)) ошибки #ССЫЛКА!. Если диапазон, его необходимоДанные массива.(АДРЕС), как аргумент не указано, функция 30 дней: Извините, что пропал. на гиперссылку - значение,то предыдущее стоит в соседнюю ячейку? использовании стиля R1C1.
Как можно использовать функцию ADDRESS (АДРЕС)?
таблица с искомой[тип_ссылки] – число из=ЯЧЕЙКА(«имяфайла»;B2)(имяфайла) – имяСумма значений из диапазона, аргументы «номер_строки» и заключить в скобки
- ДанныеИНДЕКС(массив; номер_строки; [номер_столбца]) для
- возвращает ссылку вмы находили элементыПо хорошему, адрес
- она всегда приведёт стереть?и,соответственно, адреса этого
Синтаксис ADDRESS (АДРЕС)
Юрий МРомич ячейкой. диапазона от 1
Из полученного результата при
файла и полный
- начинающегося с ячейки «номер_столбца» опущены, функцияЕсли каждая область вЯблокиАргументы функции ИНДЕКС описаныINDIRECT стиле массива при помощи ячейки мне нужен, к нужному адресу. имени тоже стираются?или: Тогда не Offset(0,: Народ, прошу прощенияДля расчета стоимости в до 4, соответствующее помощи других функций
- путь. B2 и заканчивающегося ИНДЕКС возвращает область ссылке содержит толькоЛимоны ниже.(ДВССЫЛ). Мы изучимA1 функции для того, чтобыZorge
- я что-то не 1) за назойливость, но рублях используем формулу: одному из типов Вы можете извлечьformat пересечением пятой строки
Ловушки ADDRESS (АДРЕС)
в аргументе «ссылка», одну строку илиБананыМассив функцию, если FALSE (ЛОЖЬ),MATCH можно было выбрать: И снова добрый так понял?Владимир вот интересно стало, =B3*ДВССЫЛ(D3). возвращаемой ссылки на
Пример 1: Получаем адрес ячейки по номеру строки и столбца
название листа. В(формат) – числовой и второго столбца заданную аргументом «номер_области». один столбец, аргументГруши — обязательный аргумент. ДиапазонINDIRECT то в стиле(ПОИСКПОЗ) и обнаружили, значение из другого день, товарищи бойцы.Юрий М: Пока я телился…
можно ли по
Функция ДВССЫЛ необходима для
Абсолютная или относительная
ячейку: формуле ниже, используя формат ячейки. диапазона A2:A6, т. е.Результатом вычисления функции ИНДЕКС «номер_строки» или «номер_столбца»
Формула ячеек или константа(ДВССЫЛ) позже вR1C1 что она отлично столбца, соответствующее тойИ снова проблема,: Не так. Ваш
=АДРЕС(МАКС(ЕСЛИ(Лист1!$A$1:$G$20=A2;(СТРОКА(Лист1!$1:$20))));МАКС(ЕСЛИ(Лист1!$A$1:$G$20=A2;СТОЛБЕЦ(Лист1!$A:$G)));4)
имени(значению) получать адрес,
A1 или R1C1
получения числового значения,абсолютная на всю ячейку, функцииparentheses сумма значений из является ссылка, которая соответственно является необязательным.Описание массива. рамках марафона
.
работает в команде
Название листа
самой максимальной величине. выеденного яйца не последний файл. РанееРомич а лучше даже хранимого в ячейке, например — $A$4MID
(скобки) – возвращает
диапазона B2:B6.
Пример 2: Находим значение ячейки, используя номер строки и столбца
интерпретируется в качестве Например, для ссылкиРезультатЕсли массив содержит только30 функций Excel заsheet с другими функциями,Вопрос мне показался стоящая. для АБВ нашлись: вместо 1 - ссылку на эту на которую указываетабсолютная только на строку,(ПСТР) и 1, если форматированием2,42 таковой другими функциями. на единственную строку=ИНДЕКС(A2:B3;2;2) одну строку или 30 дней
_text
такими как
простым потому, чтоИмею массив данных, три адреса. Затем число шагов до ячейку? Ну,например, на ссылка. В результате например — A$4;FIND ячейки предусмотрено отображениеК началу страницы В зависимости от нужно использовать формулуЗначение ячейки на пересечении один столбец, соответствующий
.
(имя_листа) – имя
VLOOKUP в VB, если из которых отбираю в А3 ввели нужного столбца? одном листе есть
вычислений для остальных
абсолютная только на столбец,
(НАЙТИ), находим квадратные положительных или всехВ 4-ый день марафона формулы значение, возвращаемое
Пример 3: Возвращаем адрес ячейки с максимальным значением
ИНДЕКС(ссылка,,номер_столбца). второй строки и аргумент «номер_строки» или=INDIRECT(ADDRESS(C2,C3)) листа может быть(ВПР) и я назначаю переменной
уникальные значения из новое имя. ВЮрий М ячейка(А2) со значением товаров получим следующую
например - $A4;
скобки и возвращаем
чисел в круглых30 функций Excel за функцией ИНДЕКС, можетНомер_строки второго столбца в «номер_столбца» не является=ДВССЫЛ(АДРЕС(C2;C3)) указано, если ВыINDEX какую-либо ячейку я повторяющихся и формулой
В3 отобразился новый
: Точно: (0, 5)
123. А во таблицу:
относительная на всю ячейку,
32 символа, которые
скобках; во всех
office-guru.ru
ИНДЕКС (функция ИНДЕКС)
30 дней использоваться как ссылка — обязательный аргумент. Номер диапазоне A2:B3.
обязательным.Функция
-
желаете видеть его(ИНДЕКС). могу посмотреть и МАКС нахожу из адрес. В В4
-
на пять столбцов втором листе приПример 2. В таблице например A4.
Форма массива
Описание
следуют за ними остальных случаях возвращаетмы получали детальные или как значение.
строки в диапазоне,ГрушиЕсли массив содержит большеINDIRECT
Синтаксис
в возвращаемом функцией
20-й день нашего марафона её адрес и
-
них наибольшие. Это — осталось значение правее в той вводе этого значения,
-
содержатся данные о[a1] – логическое значение, (длина названия листа 0 (ноль). сведения о рабочей Например, формула ЯЧЕЙКА(«ширина»;ИНДЕКС(A1:B2;1;2))
-
заданном аргументом «ссылка»,=ИНДЕКС(A2:B3;2;1) одной строки и(ДВССЫЛ) может работать результате. мы посвятим изучению её значение вне к тому, что для ячейки А2. же строке (ноль).
-
-
например, в столбец цене товаров, отсортированные определяющее один из ограничена 31 символом).prefix среде, используя функцию эквивалентна формуле ЯЧЕЙКА(«ширина»;B1). из которого требуется
-
Значение ячейки на пересечении одного столбца, а и без функцииФункция функции зависимости от того уникальных значений много Если мы его
Замечания
-
Ромич ИМЯ, в соседнем в порядке возрастания двух типов ссылок:=MID(CELL(«filename»,C3),FIND(«]»,CELL(«filename»,C3))+1,32)(префикс) – текстовоеINFO
-
Функция ЯЧЕЙКА использует возвратить ссылку. второй строки и из аргументов «номер_строки»ADDRESSADDRESSADDRESS сам ли я и к каждому очистим — список: Юрий, огромное спасибо! столбце получаем ссылку стоимости. Необходимо получить A1 либо R1C1;=ПСТР(ЯЧЕЙКА(«имяфайла»;C3);НАЙТИ(«]»;ЯЧЕЙКА(«имяфайла»;C3))+1;32) значение, соответствующее префиксу(ИНФОРМ), – такие значение, возвращаемое функцией
Номер_столбца первого столбца в и «номер_столбца» задан(АДРЕС). Вот как
-
(АДРЕС) возвращает лишь(АДРЕС). Она возвращает назначаю эту ячейку из них выбирается адресов для А2 как и остальным на Лист1!А2
Примеры
Пример 1
ссылки на ячейки[имя_листа] – текстовое значение,Вместо того, чтобы вводить метки ячейки (показывает как версия Excel ИНДЕКС, как ссылку.
— необязательный аргумент. Номер диапазоне A2:B3. только один, функция можно, используя оператор адрес ячейки в адрес ячейки в или аона является максимальное из первоначального будет неполным. Поэтому форумчанам — сKuklP с минимальной и которое определяет имя
значение аргумента |
тип выравнивания). |
|
и режим пересчёта. |
С другой стороны, |
|
столбца в диапазоне, |
Бананы |
|
ИНДЕКС возвращает массив, |
конкатенации « |
виде текстовой строки. |
текстовом формате, используя |
результатом хитрых манипуляций. массива. и предлагаю в этим сайтом постигать |
: Ромич, а Если(..ВПР)? |
максимальной стоимостью товаров |
листа в документеinfo_typeprotectОдиннадцатый день марафона мы |
такая формула, как |
Пример 2
заданном аргументом «ссылка»,В этом примере функция состоящий из целой& Если Вам нужно номер строки и За сим прилагаю
Собственно вопрос: Каким строку все адреса excel и проще, Ща наши киты соответственно. Excel. Используется для(тип_сведений) в функцию(защита) — 0 посвятим изучению функции 2*ИНДЕКС(A1:B2;1;2), преобразует значение, из которого требуется ИНДЕКС используется в
строки или целого |
«, слепить нужный адрес |
значение ячейки, используйте |
столбца. Нужен ли файл с примером образом можно определить |
для одного значения. и интереснее подключатся, думаю иИсходная таблица имеет следующий создания внешних ссылок.CELL = ячейка неCELL возвращаемое функцией ИНДЕКС, |
возвратить ссылку. |
формуле массива для столбца аргумента «массив». в стиле её в качестве |
нам этот адрес? |
|
более обширным. адрес ячейки, данные Тогда и путаницыи еще в Индекс порулит… Неисповедимы вид:Примечания:(ЯЧЕЙКА) в виде заблокирована, 1 =(ЯЧЕЙКА), которая сообщит в число вНомер_области поиска значений двухНомер_строкиR1C1
аргумента функции
Ссылочная форма
Описание
Можно ли сделатьБлагодарю за оперативность. из которой мне не будет никакой.Теперь завершение. можно ли пути формулистов:-) ТолькоДля получения ссылки наСсылки типа R1C1 используются текстовой строки, Вы
Синтаксис
заблокирована.
информацию о форматировании ячейке B1.
-
— необязательный аргумент. Диапазон заданных ячеек в — обязательный аргумент.и в результате
-
INDIRECT то же самоеvikttur показывает формула? Адрес,
-
понятно объяснил? сделать получаемый адрес Ким жаловался, что ячейку с минимальной для цифрового обозначения можете указать ссылкуrow ячейки, её содержимомПримечание: в аргументе «ссылка»,
-
-
массиве с диапазоном Выбирает строку в получить значение ячейки:(ДВССЫЛ) или примените с помощью других: Например, номер договора:
-
Индекс и ЯчейкаРомич гиперссылкой? формулисты не в стоимостью товара используем столбцов и строк.
-
на ячейку, содержащую(строка) – номер и расположении. Она Функция ЯЧЕЙКА недоступна из которого требуется 2 x 2. массиве, из которой=INDIRECT(«R»&C2&»C»&C3,FALSE) одну из альтернативных функций?=ИНДЕКС($D$2:$D$15;ПОИСКПОЗ(МАКС(СМЕЩ(B1;ПОИСКПОЗ(F4;$A$2:$A$15;0);0;СЧЁТЕСЛИ($A$2:$A$15;F4)));$B$2:$B$15;)) действуют диаметрально проивоположным: нет.Имя по задумкеЮрий М фаворе. формулу: Для возвращения ссылок корректные значения. В строки ячейки. работает аналогично функции в Excel Web возвратить значение ячейкиВ этом случае нужно требуется возвратить значение.=ДВССЫЛ(«R»&C2&»C»&C3;ЛОЖЬ) формул, показанных вДавайте обратимся к сведениямСМЕЩ() лучше заменить образом. вводится ТОЛЬКО в: в завершение. можноКи-им! Ваш выход.Функция АДРЕС принимает следующие
такого типа в этом примере вtypeINFO App. на пересечении строки выбрать любые две Если аргумент «номер_строки»Функция
Замечания
-
примере 2. по функции на ИНДЕКС (сообщениеЗаранее благодарю и ячейку А2. Ввел,посмотрел(в ли сделать получаемый Я за Вас параметры: качестве параметра a1 ячейке B4 находится(тип) – тип(ИНФОРМ), т.е. имеетСкопируйте образец данных из и столбца, заданных ячейки по вертикали, опущен, аргумент «номер_столбца»
-
INDEXПри помощи функцииADDRESS 29.07.2011, 18:52) удачной пятницы оригинальном файле еще адрес гиперссылкой?{/post}{/quote}
-
переживаю.число, соответствующее номеру строки должно быть явно выпадающий список, а данных в ячейке список значений, которые следующей таблицы и аргументами «номер_строки» и например A1:A2, вставить является обязательным.(ИНДЕКС) также можетADDRESS
-
(АДРЕС) и изучимЕсли возможны совпаденияМихаил С. туча параметров выводится),Насчёт завершения -Ромич с минимальным значением указано логическое значение вместо аргумента (пустая, текст, другое). можно ввести в вставьте их в «номер_столбца». Первая введенная в первую ячейкуНомер_столбца вернуть значение ячейки,(АДРЕС) Вы можете примеры работы с максимумов для разных: Вроде уже около
стер. Если надо,ввел сомнительно: начиналось с: впр не покатит цены (функция МИН
Примеры
ЛОЖЬ или соответствующееinfo_typewidth функцию, но содержит ячейку A1 нового или выделенная область формулу =ИНДЕКС({1;2:3;4};0;2) и — необязательный аргумент. если указан номер получить адрес ячейки ней. Если у названий, диапазон ИНДЕКС($D$2:$D$15;… 40 ответов, а
следующий. |
соседнего столбца. Пока |
— ячейки со |
выполняет поиск минимального |
числовое значение 0. |
(тип_сведений) указана ссылка |
(ширина) – ширина |
не один, а |
листа Excel. Чтобы |
имеет номер 1, вторая — |
нажать клавиши CTRL+SHIFT+ВВОД. |
Выбирает столбец в |
строки и столбца: |
в виде текста, |
Вас есть дополнительная |
тоже нужно определять |
правила так и |
И еще вопрос.Можно |
накопите вопросы. |
значениями разбросаны по |
значения и возвращает |
Стиль ссылок в Excel |
на эту ячейку. |
столбца ячейки. |
два аргумента. |
отобразить результаты формул, |
2 и т. д. |
Если ввести формулу |
массиве, из которого |
=INDEX(1:5000,C2,C3) |
используя номер строки |
информация или примеры, |
динамически. |
не читали…. |
ли указать промежуткиЮрий М листу, а-ля А2, его, функция ПОИСКПОЗ |
может быть изменен |
Аргумент |
Есть несколько моментов, заИтак, давайте рассмотрим информацию выделите их и Если аргумент «номер_области» как формулу массива, |
требуется возвратить значение. |
=ИНДЕКС(1:5000;C2;C3) |
и столбца. Если пожалуйста, делитесь имиZorgeКто данные за |
поиска(например, чтоб в |
: Судя по всему |
В5, С1 находит позицию ячейки, путем установки/снятия флажкаreference которыми нужно внимательно и примеры по нажмите клавишу F2, опущен, в функции |
Excel автоматически вставит |
Если аргумент «номер_столбца»
support.office.com
30 функций Excel за 30 дней: ЯЧЕЙКА (CELL)
1:5000 Вы введёте только в комментариях.: Спасибо всем огромное. Вас придумывать будет? столбце В отображались вопросов больше нетKuklP содержащей минимальное значение пункта меню «Стиль
(ссылка) ссылается на следить, используя функцию функции а затем — клавишу ИНДЕКС используется область 1. ее во вторую опущен, аргумент «номер_строки»– это первые эти два аргумента,ФункцияЗаработало.vikttur адреса в промежутках Смотрите с: Ромич, честно каюсь
цены. К полученному ссылок R1C1», который ячейку B2.CELLCELL ВВОД. При необходимости Все указанные здесь ячейку. является обязательным. 5000 строк листа
Функция 11: CELL (ЯЧЕЙКА)
результатом будет абсолютныйADDRESSk1ava: И Вам удачных А2:К200 и АВ2:АХ200, гиперссылкой
Как можно использовать функцию CELL (ЯЧЕЙКА)?
— я не значению добавлено 2, находится в «ФайлКогда выбрано значение(ЯЧЕЙКА):
- (ЯЧЕЙКА). Если у
- измените ширину столбцов,
- области должны находиться
Синтаксис CELL (ЯЧЕЙКА)
ФормулаЕсли используются оба аргумента Excel. адрес, записанный в
(АДРЕС) возвращает ссылку
: К примеру в
выходных. Может, за а в столбцеGuest формулист. Как у
- поскольку ПОИСКПОЗ осуществляет – Параметры –protectЕсли аргумент Вас есть что чтобы видеть все на одном листе.
- Описание — и «номер_строки»,В этом примере мы стиле ссылок на ячейку в столбце A в
- два дня справитесь С — адреса: Прекрайне благодарен! них в избушке поиск относительно диапазона Формулы – Работа(защита): результат равенreference
- добавить к нашим данные. Если указать области,Результат
- и «номер_столбца», — найдём ячейку сA1 виде текста, основываясь
- одном ряду значение с задачей :) промежутка L2:AA200)? Ну
- Владимир побываю — в выбранных ячеек. с Формулами». 1, если ячейка(ссылка) опущен, то примерам и сведениям,Фрукты находящиеся на разных
- =ИНДЕКС({1;2 функция ИНДЕКС возвращает максимальным значением и. на номере строки
- одной ячейки xИли все-таки пример или что-то в: Как понять это шоке! Они там
- 2 – номер столбца,Если требуется ссылка на заблокирована, или 0
- результат возвращается для пожалуйста, делитесь этимЦена листах, произойдет ошибка
- : значение ячейки на используем функцию
Ловушки функции CELL (ЯЧЕЙКА)
=ADDRESS($C$2,$C$3) и столбца. Она , значение другой покажете? этом роде
- слово «прекрайне»? Бесконечно… такое мутят, что в котором находится ячейку, которая находится (ноль), если не последней изменённой ячейки. в комментариях.Количество #ЗНАЧ! Если необходимо3;4};0;2) пересечении указанных строкиADDRESS=АДРЕС($C$2;$C$3) может возвращать абсолютный y.Михаил С.
- Юрий М …или крайность, в не пойму сам: искомая ячейка. в другом листе заблокирована.
- Чтобы быть уверенным,ФункцияЯблоки использовать диапазоны, находящиесяЗначение ячейки на пересечении и столбца.(АДРЕС), чтобы получитьЕсли не указывать значение
Пример 1: Формат числа в ячейке
или относительный адресЗадача в том: И зачем Вам: Если нужно контролировать хорошем смысле слова… то ли яАналогичным способом получаем ссылку данного документа Excel,=CELL(B4,B2) что результат получилсяCELL0,69 ₽ на разных листах, первой строки и
Если указать в качестве
её адрес.
Пример 2: Название листа
аргумента в стиле ссылок что бы дать именно адрес? только одну ячейкуЮрий М дурак(а это скорее!), на ячейку с
полезно использовать параметр
=ЯЧЕЙКА(B4;B2)
именно тот, что(ЯЧЕЙКА) показывает информацию40 рекомендуется применить функцию второго столбца в аргумента «номер_строки» илиФункцияabs_numA1 еще одной ячейкиZorge — зачем тогда: Через край, наверное… то ли они максимальной ценой товара.
[имя_листа], который принимает
Когда выбрано значение
Пример 3: Подстановка аргумента info_type (тип_сведений) из выпадающего списка
Вам нужен, ссылку о форматировании, содержанииБананы ИНДЕКС в форме массиве. Массив содержит «номер_столбца» значение 0MAX(тип_ссылки) в формуле,или значение z: Благодарю за оперативность. обрабатываем диапазон? СформулируйтеРомич иноПланетяне. Ждем наших В результате получим: текстовое значение, соответствующееwidth желательно всегда указывать. и расположении ячейки0,34 ₽ массива и использовать
значения 1 и (ноль), функция ИНДЕКС(МАКС) находит максимальное то результатом будетR1C1Такое возможно вЯ так понимаю,
уже условие ЗАНОВО
: См. значение префикса
уважаемых Формулистов. ХотяПример 3. В таблице названию требуемого листа,(ширина), результат показывает Вы можете сослаться по заданной ссылке.38 другую функцию для 2 в первой возвратит массив значений
число в столбце абсолютная ссылка.
. К тому же
exel?
что даже не
office-guru.ru
Примеры функции АДРЕС для получения адреса ячейки листа Excel
и ОДНОЗНАЧНО. ПРЕ- … макросом можно. содержится ячейка, данные например «Лист7». ширину столбца в даже ячейку, вФункцияЛимоны
вычисления диапазона, составляющего строке и значения для целого столбца C.Чтобы увидеть адрес в в результат можетЕсли возможно, то в данных суть,
Функция АДРЕС в Excel: описание особенностей синтаксиса
По второму вопросуВ общем, «через
Ща меня ногами
из которой используются формате целого числа.
которой содержится сама
- CELL0,55 ₽ массив. Например, определить 3 и 4
- или целой строки=MAX(C3:C8) виде относительной ссылки, быть включено имя
- как реализовать. а в возможности/невозможности — зачем распределять край» — это формулисты запинают:-). в другом программном
- Пример 1. В таблице Единицей измерения в
- функция(ЯЧЕЙКА) может сообщить
- 15 используемый диапазон можно
- во второй строке. соответственно. Чтобы использовать
- =МАКС(C3:C8) можно подставить в листа.Спасибо заранее за
- выполнения. найденные значения-адреса по близкоП.С. 11979 - продукте. Для обеспечения
Excel содержится ячейка,
- этом случае являетсяCELL о ячейке информациюАпельсины с помощью функции2 значения, возвращенные какДалее в игру вступает качестве аргументаФункция
- любые ответы…Вот примерно такой разным столбцам (этоРомич это две пары? совместимости необходимо предоставить отображающая динамически изменяемые ширина одного символа(ЯЧЕЙКА).
- следующего содержания:0,25 ₽ ВЫБОР.Значение ячейки на пересечении массив, введите функцию функцияabs_numADDRESSHaken
пример получился.
Примеры использования функции АДРЕС в Excel
сложнее), если в: в завершение. можно Никогда не играл ссылку на нее данные в зависимости при стандартном размереПри работе с функциейЧисловой формат ячейки.25Например, если аргумент «ссылка» второй строки и ИНДЕКС как формула
ADDRESS(тип_ссылки) значение(АДРЕС) может возвратить
: Встаете на ячейку,Нужен этот адрес, ячейках ГИПЕРССЫЛКИ? Неважно ли сделать получаемый в игры, это
в виде R1C1. от определенных условий. шрифта.CELLНазвание листа.Груши определяет ячейки (A1:B4,D1:E4,G1:H4), второго столбца в массива в горизонтальный
(АДРЕС) в сочетании
- 4 адрес ячейки или пишете
- для работы с из какого столбца
- адрес гиперссылкой?{/post}{/quote} уже здесь подхватил.
- Исходная таблица имеет следующий Для работы сУрок подготовлен для Вас
- (ЯЧЕЙКА), иногда необходимоВыравнивание или ширину столбца.0,59 ₽ номер области 1
массиве, указанном выше. диапазон ячеек для с
. работать в сочетании=A1+A2 первоначальным массивом. Например, сработает гиперссылка?Насчёт завершения - От «Казанский». вид:
Как получить адрес ссылки на ячейку Excel?
актуальными данными в командой сайта office-guru.ru делать пересчёт листа,Функция40 соответствует диапазону A1:B4,4 строки и вMATCH
=ADDRESS($C$2,$C$3,4) с другими функциями,
ну или другую если яблоки иРомич сомнительно: начиналось с
Юрий МДля получения ссылки на
- таблице, которая находитсяИсточник: http://blog.contextures.com/archives/2011/01/12/30-excel-functions-in-30-days-11-cell/ чтобы обновить результат,CELLМиндаль номер области 2Примечание: вертикальный — для столбца.(ПОИСКПОЗ), которая находит=АДРЕС($C$2;$C$3;4) чтобы: формулу, по которой груши от разных
- : Хорошо,сейчас попробую. соседнего столбца. Пока: Вот так, например.
ячейку B6 используем на другом листеПеревел: Антон Андронов который возвращает функция.
Адрес по номерам строк и столбцов листа Excel в стиле R1C1
(ЯЧЕЙКА) имеет вот2,80 ₽ — диапазону D1:E4, Это формула массива, которую Чтобы ввести формулу номер строки, иЧтобы задать стиль ссылокПолучить адрес ячейки, зная
должно считаться значение поставщиков.
Есть таблица, при накопите вопросы.{/post}{/quote}kim
следующую формулу: =АДРЕС(6;2;1;0).
- документа требуется получитьАвтор: Антон Андронов
- Если в качестве аргумента такой синтаксис:10
- а номер области нужно вводить с
- массива, нажмите сочетаниеCOLUMN
R1C1
номер строки и третьей ячейки…MCH вводе в первуюЮрий, а что
: Дык автор конкретноАргументы функции: ссылку на даннуюФункция АДРЕС возвращает адресinfo_typeCELL(info_type,reference)Кешью 3 — диапазону помощью клавиш CTRL+SHIFT+ВВОД. клавиш CTRL+SHIFT+ВВОД.(СТОЛБЕЦ), которая определяет, вместо принятого по столбца.
Serge: И зачем Вам ячейку которой Имени нужно дописать в
exceltable.com
поиск адреса ячейки по значению
формулой вроде не6 – номер строки ячейку. определенной ячейки (текстовое(тип_сведений) выбрано значениеЯЧЕЙКА(тип_сведений;ссылка)3,55 ₽ G1:H4. Excel автоматически заключитПримечание: номер столбца. умолчанию стиляНайти значение ячейки, зная: k1ava, а теперь всетаки адрес? что мы должны получить этом макросе,чтобы он просил…
искомой ячейки;На листе «Курсы» создана значение), на которуюfilenameinfo_type16После того как с формулу в фигурные В Excel Web
=ADDRESS(MATCH(F3,C:C,0),COLUMN(C2))A1 номер строки и
можно ещё раз Вы с ним адреса расположения(гиперссылки) на выдавал не одинНу да ладно,2 – номер столбца,
таблица с актуальными указывают номера столбца(имяфайла), а книга(тип_сведений) — этоАрахис помощью аргументов «ссылка» скобки {}. Если App невозможно создавать=АДРЕС(ПОИСКПОЗ(F3;C:C;0);СТОЛБЕЦ(C2)), Вы должны указать столбца. и по-русски? будете делать? схеме. адрес, а несколько,списком(если,например,имя вот формульный вариант в котором содержится
курсами валют: и строки. К Excel ещё не один из вариантов1,25 ₽ и «номер_области» выбран
вы попытаетесь ввести формулы массива.
Урок подготовлен для Вас значение FALSE (ЛОЖЬ)Возвратить адрес ячейки сПонятно и с
Михаил С.По поводу второй
встречается неоднократно).Ромич ячейка;На отдельном листе «Цены» примеру, в результате
сохранена, то результатом аргумента:20 диапазон, с помощью их вручную, ExcelАргументы «номер_строки» и «номер_столбца» командой сайта office-guru.ru для аргумента самым большим значением. примером в Excel?
: Или так части. Дело вЮрий М: Юрий, а можно
1 – тип ссылки создана таблица с выполнения функции =АДРЕС(5;7)
будет пустая строка.
addressГрецкие орехи
аргументов «номер_строки» и отобразит формулу как должны указывать на
Источник: http://blog.contextures.com/archives/2011/01/21/30-excel-functions-in-30-days-20-address/а1Функция
GuestМихаил С.
том, что как
: А каким образом поподробнее об этом (абсолютная); товарами, отображающая стоимость
будет выведено значениеСо значением(адрес) – ссылка1,75 ₽ «номер_столбца» выбирается конкретная
текст. Если при ячейку внутри заданногоПеревел: Антон Андронов.ADDRESS: Расчитать не получится.: Блин, не свой
раз-таки важно, из и куда выводить макросе?что там к0 – указание на
в долларах США $G$5.format на первую ячейку
12 ячейка: номер строки вводе формулы не массива; в противном
Автор: Антон Андронов=ADDRESS($C$2,$C$3,1,FALSE)(АДРЕС) имеет вотНадо что бы файл сохранил …
какого столбца работает этот список?
чему? стиль R1C1. (USD):Примечание: наличие символов «$»(формат) Вы можете
в аргументеФормула
1 соответствует первой нажать клавиши CTRL+SHIFT+ВВОД, случае функция ИНДЕКС
Функция ИНДЕКС возвращает значение=АДРЕС($C$2;$C$3;1;ЛОЖЬ) такой синтаксис:
значение «Да» напротив ;) гиперссылка — идетРомич
Юрий МВ результате получим ссылку:В ячейку D3 поместим в адресе ячейки
использовать функциюreferenceОписание строке диапазона, номер она возвратит ошибку возвратит значение ошибки
или ссылку наПоследний аргумент – этоADDRESS(row_num,column_num,[abs_num],[a1],[sheet_text]) Питания ставилось только
vikttur распределение по зонам.Но
: ну,например,так: Хм, подробнее… МакросПрактическое применение функции АДРЕС: ссылку на ячейку $G$5 свидетельствует о
CELL(ссылка) в текстовомРезультат столбца 1 — #ЗНАЧ! #ССЫЛКА!. значение из таблицы имя листа. ЕслиАДРЕС(номер_строки;номер_столбца;[тип_ссылки];[а1];[имя_листа]) если в полях
: Нелетучая формула извлечения это не суть
А еще был отслеживает изменения в Поиск значения в таблицы, находящейся на том, что ссылка(ЯЧЕЙКА), чтобы показать формате.=ИНДЕКС(A2:C6;2;3)
его первому столбцуК началу страницыВ этих примерах функция или диапазона. Вам необходимо этоabs_num «должность» и «График» МАКС: важно. Есть другой бы рад, если диапазоне А2:А1000, запускает диапазоне таблицы Excel листе «Курсы», в на данную ячейку числовой формат ячейки.colПересечение второй строки и и т. д.Возвращает ссылку на ячейку, ИНДЕКС используется дляФункцию ИНДЕКС можно использовать
имя в полученном(тип_ссылки) – если стоят значения «Водитель»=МАКС(ИНДЕКС($B$2:$B$15;ПОИСКПОЗ(F4;$A$2:$A$15;)):ИНДЕКС($B$2:$B$15;ПОИСКПОЗ(F4;$A$2:$A$15;)+СЧЁТЕСЛИ(A$2:A$15;F4)-1)) вариант тут,если это бы Вы оставили по этому изменению по столбцам и
которой содержится информация является абсолютной, то Например, если ячейка(столбец) – номер третьего столбца в Ссылка, возвращаемая функцией расположенную на пересечении поиска значения ячейки, двумя способами: результате, укажите его равно
и «Пятидневка», вИ все-таки, для слишком запарно в тексте программы поиск. Если находит, строкам. о курсе валюты
есть не меняется B7 имеет формат столбца ячейки в диапазоне A2:C6, т. е. ИНДЕКС, указывает на указанной строки и находящейся на пересеченииЕсли вы хотите возвращать
в качестве аргумента1
противном случае поле чего адрес? ПоверьтеЮрий М комментарии) то в соседнююПримечание: при использовании стиля
USD. Для этого при копировании данных.General аргументе содержимое ячейки C3. пересечение строки «номер_строки» указанного столбца. Если заданных строки и значение указанной ячейкиsheet_textили вообще не
остается пустым. опыту: АДРЕС() практически
: Уточняемся:Юрий М ячейку записывает адрес
R1C1 запись абсолютной введем следующую формулу:Функция АДРЕС имеет следующую
(Общий), то результатомreference
38
и столбца «номер_столбца». ссылка составлена из столбца. или массива ячеек,(имя_листа). указано, то функцияGuest не используется, эта1. Значение всегда
planetaexcel.ru
Узнать адрес ячейки по отобранному формулой значению
: А как быть, найденной ячейки, если ссылки не содержит
=АДРЕС(3;2;1;1;»Курсы»). синтаксическую запись: формулы будет
(cсылка).=ИНДЕКС((A1:C6;A8:C11);2;2;2)Если указать в качестве несмежных выделенных диапазонов,Скопируйте образец данных из см. раздел Форма=ADDRESS($C$2,$C$3,1,TRUE,»Ex02″) возвратит абсолютный адрес: Не прикрепилось )) функция покажет адрес, будет вводиться ТОЛЬКО если в А2
нет — орёт. знака «$». ЧтобыЗначение параметров:=АДРЕС(номер_строки;номер_столбца;[тип_ссылки];[a1];[имя_листа])GсolorПересечение второй строки и аргумента «номер_строки» или
можно указать, какой следующей таблицы и
массива.=АДРЕС($C$2;$C$3;1;ИСТИНА;»Ex02″) ($A$1). Чтобы получить Прикрепленные файлы post_114193.jpg но в тексте,
в ячейку А2. введём новое имя?
Кстати, нужно добавить отличать абсолютные и3 – номер строки,Первые два аргумента данной:
(цвет) – возвращается второго столбца во
«номер_столбца» значение 0 из них требуется вставьте их в
Если требуется возвращать ссылкуФункция
относительный адрес (A1), (17.37 КБ) и обработать его2. Список найденных Может лучше по
очистку «соседней» ячейки относительные ссылки используются
в которой содержится функции являются обязательными=CELL(«format»,C2) 1, если форматированием второй области (A8:C11), (ноль), функция ИНДЕКС
использовать. ячейку A1 нового на указанные ячейки,ADDRESS используйте значение
kim в дальнейшем можно,
адресов отображать в строке вправо? Тогда после неудачного поиска: квадратные скобки «[]».
искомая ячейка; для заполнения.=ЯЧЕЙКА(«формат»;C2)
ячейки предусмотрено изменение
т. е. содержимое ячейки возвратит ссылку наИНДЕКС(ссылка; номер_строки; [номер_столбца]; [номер_области]) листа Excel. Чтобы см. раздел Ссылочная(АДРЕС) возвращает адрес4: =ЕСЛИ((должность=»водитель»)*(график=»пятидневка);»Да»;»») только преобразовав в столбце В. всё найденное будет после строки
Например, если в2 – номер столбцаОписание аргументов:
Со значением цвета для отрицательных
B9. целый столбец или
Аргументы функции ИНДЕКС описаны отобразить результаты формул, форма. ячейки в виде. Остальные варианты:k1ava ссылку. А это
3. «Старый» список относиться к одномуMsgBox «А нету данном примере в с искомой ячейкой;Номер_строки – числовое значение,filename значений; во всех1,25 целую строку соответственно. ниже. выделите их иВозвращает значение элемента таблицы текста, а не2: А если не
усложнение и добавление
очищать. имени в одной
там такого. Совсем
качестве параметра тип_ссылки1 – тип ссылки соответствующее номеру строки,
(имяфайла) функция остальных случаях возвращается=СУММ(ИНДЕКС(A1:C11;0;3;1))Аргументы «номер_строки», «номер_столбца» иСсылка
нажмите клавишу F2, или массив, заданного
как действующую ссылку.
planetaexcel.ru
Как автоматически задать значение ячейки основываясь на данных других ячеек?
=A$1, сложно, можно куда летучести (ДВССЫЛ(), например).Правильно? строке. нет.», 48, «Ошибка!» указать число 4,
– абсолютная; в которой находитсяCELL 0 (ноль).
Сумма третьего столбца в «номер_области» должны указывать
— обязательный аргумент. Ссылка а затем — клавишу
номером строки и Если Вам нужно
3 нибудь залить файлВладимир
В моём предыдущем
P.S. Комментарий задобавьте такую строку: ссылка на ячейку1 – выбор стиля
требуемая ячейка;(ЯЧЕЙКА) покажет путьcontents первой области диапазона
на ячейку внутри на один или
ВВОД. При необходимости номером столбца.
получить значение ячейки,=$A1. с простым примеров: Возможно совпадёт с сообщении ошибочно проставлен отдельную плату :-)Target.Offset(0, 1) = примет следующий вид: ссылок с буквенно-цифровой
Номер_столбца – числовое значение, к файлу, имя(содержимое) – значение (A1:C11) является суммой
аргумента «ссылка»; в несколько диапазонов ячеек.
измените ширину столбцов,Если первый аргумент функции можно использовать результат,a1 подобной конструкции чьим-либо решением, но…:
planetaexcel.ru
знак вопрос в
Извлечение информации о ячейке функцией ЯЧЕЙКА (CELL)
Иногда бывает необходимо с помощью формул узнать о какой-либо ячейке подробную информацию и параметры, чтобы использовать это в расчетах. Например, выяснить число или текст в ячейке или какой числовой формат в ней установлен. Сделать это можно, используя функцию ЯЧЕЙКА (CELL) .
Синтаксис у функции следующий:
=ЯЧЕЙКА( Параметр ; Адрес )
где Адрес — это, понятное дело, ссылка на нужную ячейку, а вот Параметр — это кодовое слово, определяющее какую именно информацию о ячейке мы хотим получить. У этого аргумента несколько возможных значений:
Давайте рассмотрим пару трюков с применением этой функции на практике.
Например, можно получить имя текущего листа формулой, используя функцию ЯЧЕЙКА с параметром «имяфайла» и извлекающей все символы правее закрывающей квадратной скобки:
Также можно проверить тип данных в ячейке (параметр «тип») и выводить сообщение об ошибке вместо вычислений, если введен текст или ячейка пуста:
Или подсветить условным форматированием все незащищенные ячейки в заданном диапазоне:
Функция ЯЧЕЙКА() в MS EXCEL
Функция ЯЧЕЙКА( ) , английская версия CELL(), возвращает сведения о форматировании, адресе или содержимом ячейки. Функция может вернуть подробную информацию о формате ячейки, исключив тем самым в некоторых случаях необходимость использования VBA. Функция особенно полезна, если необходимо вывести в ячейки полный путь файла.
Синтаксис функции ЯЧЕЙКА()
ЯЧЕЙКА(тип_сведений, [ссылка])
тип_сведений— Текстовое значение, задающее требуемый тип сведений о ячейке. В приведенном ниже списке указаны возможные значения аргумента тип_сведений и соответствующие результаты.
ссылка — Необязательный аргумент. Ячейка, сведения о которой требуется получить. Если этот аргумент опущен, сведения, указанные в аргументе тип_сведений, возвращаются для последней измененной ячейки. Если аргумент ссылки указывает на диапазон ячеек, функция ЯЧЕЙКА() возвращает сведения только для левой верхней ячейки диапазона.
Использование функции
В файле примера приведены основные примеры использования функции:
Большинство сведений об ячейке касаются ее формата. Альтернативным источником информации такого рода может случить только VBA.
Самые интересные аргументы это — адрес и имяфайла, которые позволяют быстро вывести в ячейке имени файла и путь к нему. Об этом читайте в статье Нахождение имени текущей книги.
Обратите внимание, что если в одном экземпляре MS EXCEL (см. примечание ниже) открыто несколько книг, то функция ЯЧЕЙКА() с аргументами адрес и имяфайла, будет отображать имя того файла, с который Вы изменяли последним. Например, открыто 2 книги в одном окне MS EXCEL: Базаданных.xlsx и Отчет.xlsx. В книге Базаданных.xlsx имеется формула =ЯЧЕЙКА(«имяфайла») для отображения в ячейке имени текущего файла, т.е. Базаданных.xlsx (с полным путем и с указанием листа, на котором расположена эта формула). Если перейти в окно книги Отчет.xlsx и поменять, например, содержимое ячейки, то вернувшись в окно книги Базаданных.xlsx (CTRL+TAB) увидим, что в ячейке с формулой =ЯЧЕЙКА(«имяфайла») содержится имя Отчет.xlsx. Это может быть источником ошибки. Хорошая новость в том, что при открытии книги функция пересчитывает свое значение (также пересчитать книгу можно нажав клавишу F9). При открытии файлов в разных экземплярах MS EXCEL — подобного эффекта не возникает — формула =ЯЧЕЙКА(«имяфайла») будет возвращать имя файла, в ячейку которого эта формула введена.
Примечание: Открыть несколько книг EXCEL можно в одном окне MS EXCEL (в одном экземпляре MS EXCEL) или в нескольких. Обычно книги открываются в одном экземпляре MS EXCEL (когда Вы просто открываете их подряд из Проводника Windows или через Кнопку Офис в окне MS EXCEL). Второй экземпляр MS EXCEL можно открыть запустив файл EXCEL.EXE, например через меню Пуск. Чтобы убедиться, что файлы открыты в одном экземпляре MS EXCEL нажимайте последовательно сочетание клавиш CTRL+TAB — будут отображаться все окна Книг, которые открыты в данном окне MS EXCEL. Для книг, открытых в разных окнах MS EXCEL (экземплярах MS EXCEL) это сочетание клавиш не работает. Удобно открывать в разных экземплярах Книги, вычисления в которых занимают продолжительное время. При изменении формул MS EXCEL пересчитывает только книги открытые в текущем экземпляре.
Другие возможности функции ЯЧЕЙКА() : определение типа значения, номера столбца или строки, мало востребованы, т.к. дублируются стандартными функциями ЕТЕКСТ() , ЕЧИСЛО() , СТОЛБЕЦ() и др.
Excel. Получить значение ячейки по адресу без макроса 2
Итак, решая очередную головоломку с закупкой материалов, я встал перед следующей ситуацией:
Даны две таблицы Excel на разных листах:
В таблице №1 строка состоит из пустых полей: уникальный номер товара, наименование, количество и т.п.
В таблице №2 строки непосредственно с данными: номер товара, название товара, цена, комплектность и т.п.
Я хочу связать эти таблички таким образом, чтобы при заполнении уникального номера в колонке таблицы №1 цена и название подтягивались из таблицы №2
Не хочу использовать для этого ни макросы, ни какое либо программирование, а выполнить эту задачу только средствами самого Excel
для этого мне нужно решить две задачи:
1) Найти в таблице строку, в которой находится информация о товаре
2) Используя знания об этой строке, вставить значение из нужного поля(столбца).
Решаем первую задачу:
= ПОИСКПОЗ(G11;Цены!A:A;0)
G11 — это та ячейка, куда мы вбиваем уникальный номер товара,
Цены!A:A — это колонка с уникальными номерами товаров
— формат вывода в абсолютных значениях, оставляем так, либо изучаем вопрос самостоятельно =)
Данная формула находит номер строки, в которой находится наш товар и информация о нём после того как в ячейку G11 мы вбили его уникальный номер.
Теперь нам нужно зная эту строку получить информацию о стоимости, для этого мы сперва получаем адрес данной ячейки, иначе фокус не получится.
Например за цену у нас ответственный второй столбец во второй таблице
= АДРЕС( ПОИСКПОЗ(G11;Цены!A:A;0); 2; 1;1; ‘Цены’ )
где тип ссылки абсолютный, то есть 1
и формат адреса ячеек не буквенно-числовые вида A11 B876 и т.д. , а R11C1, R876C2 и т.п
то-есть номера строк и столбцов сразу очевидны за этот формат у нас отвечает последняя 1
Сам адрес мы получаем для вкладки «Цены» , потому не забываем и её указать, иначе поиск значений будет идти на странице с таблицей 1
Мы уже у финиша
Следующая головоломка которую я не решил, зато мне подсказал мой приятель — гений Экселя.
Как зная адрес ячейки без использования макросов вытянуть из неё значения.
Всё просто, это функция
таким образом полная формула получится вида:
=ДВССЫЛ(АДРЕС(ПОИСКПОЗ(G11;Цены!A:A;0); 2 ;1;1;’Цены’)),
где меняя двойку на номер столбца с нужным типом данных мы получим любое необходимое нам значение по фиксированной товарной позиции: Наименование, тип итд
Теперь не нужно ломать голову по поводу проверки вводимых данных, они берутся полностью из имеющейся таблицы, которую до меня уже проверили ГЫГЫГЫ =)
Функция ЯЧЕЙКА в Excel и примеры ее использования
Очень часто при работе в Excel необходимо использовать данные об адресации ячеек в электронной таблице. Для этого была предусмотрена функция ЯЧЕЙКА. Рассмотрим ее использование на конкретных примерах.
Функция значения и свойства ячейки в Excel
Стоит отметить, что в Excel используются несколько функций по адресации ячеек:
Функция ЯЧЕЙКА(), английская версия CELL(), возвращает сведения о форматировании, адресе или содержимом ячейки. Функция может вернуть подробную информацию о формате ячейки, исключив тем самым в некоторых случаях необходимость использования VBA. Функция особенно полезна, если необходимо вывести в ячейки полный путь файла.
Как работает функция ЯЧЕЙКА в Excel?
Функция ЯЧЕЙКА в своей работе использует синтаксис, который состоит из двух аргументов:
- Тип_сведений – текстовое значение, задающее требуемый тип сведений о ячейке. При вводе функции вручную высвечивается выпадающий список где указаны все возможные значения аргумента «тип сведений»:
- Ссылка – необязательный аргумент. Ячейка, сведения о которой требуется получить. Если этот аргумент опущен, сведения, указанные в аргументе тип_сведений, возвращаются для последней измененной ячейки. Если аргумент ссылки указывает на диапазон ячеек, функция ЯЧЕЙКА() возвращает сведения только для левой верхней ячейки диапазона.
Примеры использования функции ЯЧЕЙКА в Excel
Пример 1. Дана таблица учета работы сотрудников организации вида:
Необходимо с помощью функции ЯЧЕЙКА вычислить в какой строке и столбце находится зарплата размером 235000 руб.
Для этого введем формулу следующего вида:
- – «строка» и «столбец» – параметр вывода;
- – С8 – адрес данных с зарплатой.
В результате вычислений получим: строка №8 и столбец №3 (С).
Как узнать ширину таблицы Excel?
Пример 2. Нужно вычислить ширину таблицы в символах. Сразу стоит отметить что в Excel по умолчанию ширина столбцов и ячеек измеряется в количестве символов, которые они умещают в своем значении доступны для отображения в ячейке без переноса строки.
Примечание. Высота строк и ячеек в Excel по умолчанию измеряется в единицах измерения базового шрифта – в пунктах pt. Чем больше шрифт, тем выше строка для полного отображения символов по высоте.
Введем в ячейку С14 формулу для вычисления суммы ширины каждого столбца таблицы:
- – «ширина» – параметр функции;
- – А1 – ширина определенного столбца.
Как получить значение первой ячейки в диапазоне
Пример 3. В условии примера 1 нужно вывести содержимое только из первой (верхней левой) ячейки из диапазона A5:C8.
Введем формулу для вычисления:
Описание формулы аналогичное предыдущим двум примерам.
Видимое значение ячейки в реальное
Часто из всем известной 1С отчеты выгружаются в Excel. Что не удивительно, ведь многие используют 1С как базу ведения всевозможных данных, а анализ предпочитают производить в Excel. И это удобно, это работает. Но часто при получении файла из 1С форматы ячеек изменены так, что отображается в ячейках одно значение, а на деле там значение совершенно иное:
Чтобы не возникло недопонимания, что это такое на картинках выше. Например, если в ячейку записать число 1077 , то оно и отобразится так же. Однако его визуальное отображение в ячейках можно изменить: выделяем ячейку -правая кнопка мыши —Формат ячеек (Format Cells) -вкладка Число (Number) . Далее в списке слева выбрать Дополнительный (Special) и установить Почтовый индекс. Тогда в ячейке визуально будет отображаться 001077 , в то время как реально в ячейке будет оставаться все то же число 1077 . Тоже и с датами. Реально в ячейке число, а визуально дата в одном из форматов из категории Дата. Подробнее про то, почему так происходит можно прочесть в статье: Как Excel воспринимает данные?
И как это всегда бывает — порой просто необходимо работать не с тем значением, которое реально в ячейке, а именно с теми, которые отображаются в ячейках. Яркий пример такой необходимости — это сцепление данных двух ячеек, в одной из которых записана дата. Например, в A1 записана дата » 06.02.2016 «, а в B1 текст вроде » Отчет по магазину за » и необходимо сцепить текст из B1 с датой из A1 . Если применить просто функцию СЦЕПИТЬ (CONCATENATE) или по простому = B1 & A1 , то результатом будет такой текст: Отчет по магазину за 42406 .
Если формат лишь один — можно стандартно попробовать побороть при помощи функции ТЕКСТ(TEXT). Например, в ячейках столбца А записаны даты в формате 31 января 2016г. Тогда формулу можно записать так:
=ТЕКСТ( A2 ;»[$-F800]ДДДД, ММММ ДД, ГГГГ»)
=TEXT( A2 ,»[$-F800]dddd, MMMM yy, yyyy»)
На примере той же СЦЕПИТЬ (CONCATENATE) :
=СЦЕПИТЬ( B1 ;ТЕКСТ( A1 ;»[$-F800]ДДДД, ММММ ДД, ГГГГ»))
=CONCATENATE( B1 ,TEXT( A1 ,»[$-F800]dddd, MMMM yy, yyyy»))
Сами вид формата для использования в функции ТЕКСТ можно подсмотреть непосредственно в форматах ячеек: правая кнопка мыши на ячейке —Формат ячеек (Format Cells) -вкладка Число (Number) -(все форматы). Там в поле Тип будет как раз приведен применяемый код формата. Можно его просто скопировать оттуда и вставить в функцию ТЕКСТ .
Но если форматы в ячейках различаются и записаны в разнобой. Стандартно этого никак не сделать, кроме как каждую ячейку руками перебивать. Но если прибегнуть к помощи Visual Basic for Applications(VBA), то можно написать простую функцию пользователя(Что такое функция пользователя(UDF)) и применить её:
Function VisualVal_Text(rc As Range) VisualVal_Text = rc.Text End Function
Для применения надо внимательно прочитать про создание функций пользователя. После этого в ячейку останется записать:
=VisualVal_Text( A1 )
и раскопировать ячейку на весь столбец. После этого можно заменить результат функции значениями(Как удалить в ячейке формулу, оставив значения) и все готово. Но и в этой функции есть недостаток. Если в ячейке отображается значение, которое не помещается в границы ячейки, то оно может быть обрезано или вместо значения будут решетки. Например, если дата в указанном формате не помещается в ячейку — вместо значений будут решетки #######:
и функция VisualVal_Text вернет так же решетки. Это тоже решаемо. Можно либо перед применением расширить столбцы с исходными данными так, чтобы значение отображалось правильно и полностью, либо применить чуть другую функцию пользователя:
Function VisualVal(rc As Range) VisualVal = Application.Text(rc.Value, rc.NumberFormat) End Function
Используется и записывается в ячейку так же, как и предыдущая:
=VisualVal( A1 )
Эта функция без всяких танцев с бубном вернет отображаемое форматом ячейки значение.
И вариант применения функции вместе с функцией СЦЕПИТЬ:
=СЦЕПИТЬ( B1 ;VisualVal_Text( A1 ))
=CONCATENATE( B1 ,VisualVal_Text( A1 ))
=СЦЕПИТЬ( B1 ;VisualVal( A1 ))
=CONCATENATE( B1 ,VisualVal( A1 ))
Как видно не надо задумываться о том какой применить формат — будет записано так же, как оно отображается в ячейке.
Все варианты решений можно посмотреть в примере :
Tips_Macro_CellValToVisual.xls (48,5 KiB, 679 скачиваний)
Статья помогла? Поделись ссылкой с друзьями!
Поиск по меткам
Поделитесь своим мнением
Комментарии, не имеющие отношения к комментируемой статье, могут быть удалены без уведомления и объяснения причин. Если есть вопрос по личной проблеме — добро пожаловать на Форум
Очень часто при работе в Excel необходимо использовать данные об адресации ячеек в электронной таблице. Для этого была предусмотрена функция ЯЧЕЙКА. Рассмотрим ее использование на конкретных примерах.
Функция значения и свойства ячейки в Excel
Стоит отметить, что в Excel используются несколько функций по адресации ячеек:
- – СТРОКА;
- – СТОЛБЕЦ и другие.
Функция ЯЧЕЙКА(), английская версия CELL(), возвращает сведения о форматировании, адресе или содержимом ячейки. Функция может вернуть подробную информацию о формате ячейки, исключив тем самым в некоторых случаях необходимость использования VBA. Функция особенно полезна, если необходимо вывести в ячейки полный путь файла.
Как работает функция ЯЧЕЙКА в Excel?
Функция ЯЧЕЙКА в своей работе использует синтаксис, который состоит из двух аргументов:
ЯЧЕЙКА(тип_сведений, [ссылка])
- Тип_сведений – текстовое значение, задающее требуемый тип сведений о ячейке. При вводе функции вручную высвечивается выпадающий список где указаны все возможные значения аргумента «тип сведений»:
- Ссылка – необязательный аргумент. Ячейка, сведения о которой требуется получить. Если этот аргумент опущен, сведения, указанные в аргументе тип_сведений, возвращаются для последней измененной ячейки. Если аргумент ссылки указывает на диапазон ячеек, функция ЯЧЕЙКА() возвращает сведения только для левой верхней ячейки диапазона.
Примеры использования функции ЯЧЕЙКА в Excel
Пример 1. Дана таблица учета работы сотрудников организации вида:
Необходимо с помощью функции ЯЧЕЙКА вычислить в какой строке и столбце находится зарплата размером 235000 руб.
Для этого введем формулу следующего вида:
тут:
- – «строка» и «столбец» – параметр вывода;
- – С8 – адрес данных с зарплатой.
В результате вычислений получим: строка №8 и столбец №3 (С).
Как узнать ширину таблицы Excel?
Пример 2. Нужно вычислить ширину таблицы в символах. Сразу стоит отметить что в Excel по умолчанию ширина столбцов и ячеек измеряется в количестве символов, которые они умещают в своем значении доступны для отображения в ячейке без переноса строки.
Примечание. Высота строк и ячеек в Excel по умолчанию измеряется в единицах измерения базового шрифта – в пунктах pt. Чем больше шрифт, тем выше строка для полного отображения символов по высоте.
Введем в ячейку С14 формулу для вычисления суммы ширины каждого столбца таблицы:
тут:
- – «ширина» – параметр функции;
- – А1 – ширина определенного столбца.
Как получить значение первой ячейки в диапазоне
Пример 3. В условии примера 1 нужно вывести содержимое только из первой (верхней левой) ячейки из диапазона A5:C8.
Введем формулу для вычисления:
Скачать примеры функции ЯЧЕЙКА в Excel
Описание формулы аналогичное предыдущим двум примерам.
Skip to content
В этой статье объясняется синтаксис функции ДВССЫЛ, основные способы ее использования и приводится ряд примеров формул, демонстрирующих использование ДВССЫЛ в Excel.
В Microsoft Excel существует множество функций, некоторые из которых просты для понимания, другие требуют длительного обучения. При этом первые используются чаще, чем вторые. И тем не менее, функция Excel ДВССЫЛ (INDIRECT на английском) является единственной в своем роде. Эта функция Excel не выполняет никаких вычислений, не оценивает никаких условий не ищет значения.
Итак, что такое функция ДВССЫЛ (INDIRECT) в Excel и для чего ее можно использовать? Это очень хороший вопрос, и, надеюсь, вы получите исчерпывающий ответ через несколько минут, когда закончите чтение.
Функция ДВССЫЛ в Excel — синтаксис и основные способы использования
ДВССЫЛ используется для создания косвенных ссылок на ячейки, диапазоны, другие листы или книги. Другими словами, она получает нужный адрес и позволяет вам при помощи формулы создать из него динамическую ссылку на ячейку или диапазон вместо их прямого указания. В результате вы можете изменить ссылку в формуле, не изменяя саму формулу. Более того, эти косвенные ссылки не изменятся при вставке на лист новых строк или столбцов или при удалении уже существующих.
Все это может быть проще понять на примере. Однако чтобы написать формулу, пусть даже самую простую, нужно знать аргументы функции, верно? Итак, давайте сначала кратко рассмотрим синтаксис Excel ДВССЫЛ.
Функция ДВССЫЛ в Excel возвращает ссылку на ячейку, используя текстовую строку. Она имеет два аргумента, первый является обязательным, а второй – нет:
ДВССЫЛ(ссылка_на_ячейку; [a1])
ссылка_на_ячейку – это адрес нужной ячейки в виде текстовой строки, либо названия именованного диапазона.
a1 — логическое значение, указывающее, какой тип ссылки содержится в первом аргументе:
- Если значение ИСТИНА или опущено, то используется ссылка на ячейку в стиле A1.
- Если ЛОЖЬ, то возвращается ссылка в виде R1C1.
Таким образом, ДВССЫЛ возвращает либо ссылку на ячейку, либо ссылку на диапазон.
Хотя тип ссылки R1C1 может быть полезен в определенных ситуациях, вам, вероятно, удобнее использовать привычные ссылки типа A1. В любом случае, почти все формулы в этом руководстве будут использовать ссылки A1, и поэтому мы будем просто опускать второй аргумент в функции.
Как работает функция ДВССЫЛ
Чтобы получить представление о работе функции, давайте создадим простую формулу, которая демонстрирует, как можно применить ДВССЫЛ в Excel.
Предположим, у вас есть число 5 в ячейке A1 и текст «A1» в ячейке C1. Теперь поместите формулу =ДВССЫЛ(C1) в любую другую ячейку и посмотрите, что произойдет:
- Функция ДВССЫЛ обращается к значению в ячейке C1. Там в виде текстовой строки записан адрес «A1».
- Функция ДВССЫЛ направляется по этому адресу в ячейку A1, откуда извлекает записанное в ней значение, то есть число 555.
Итак, в этом примере функция ДВССЫЛ преобразует текстовую строку в ссылку на ячейку.
Аналогичным образом можно получить ссылку на диапазон. Для этого просто нужно функции ДВССЫЛ указать два адреса – начальный и конечный. Вы видите это на скриншоте ниже.
Формула ДВССЫЛ(C1&»:»&C2) извлекает адреса из указанных ячеек и превращается в =ДВССЫЛ(«A1:A5»).
В итоге мы получаем ссылку =A1:A5
Если вы считаете, что это все еще имеет очень мало практического смысла, пожалуйста, читайте дальше, и я продемонстрирую вам еще несколько примеров, которые раскрывают реальную силу функции Excel ДВССЫЛ и более подробно показывают, как она работает.
Как использовать ДВССЫЛ в Excel — примеры формул
Как показано в приведенном выше примере, вы можете использовать функцию ДВССЫЛ, чтобы записать адрес ячейки как обычную текстовую строку и получить в результате значение этой ячейки. Однако этот простой пример — не более чем намек на возможности ДВССЫЛ.
При работе с реальными данными мы можем превратить любой текст в ссылку, включая очень сложные комбинации, которые вы создаете, используя значения других ячеек и результаты, возвращаемые другими формулами Excel. Но не будем торопиться и пойдем от простого к сложному.
Создание косвенных ссылок из значений ячеек
Как вы помните, функция ДВССЫЛ в Excel позволяет использовать стили ссылок A1 и R1C1. Обычно вы не можете использовать оба стиля на одном листе одновременно. Вы можете переключаться между двумя типами ссылок только с помощью опции «Файл» > «Параметры» > «Формулы» > R1C1 . По этой причине пользователи Excel редко рассматривают использование R1C1 в качестве альтернативного подхода к созданию ссылок.
В формуле ДВССЫЛ вы можете использовать любой тип ссылки на одном и том же листе, если хотите. Прежде чем мы двинемся дальше, давайте более подробно рассмотрим разницу между стилями ссылок A1 и R1C1.
Стиль A1 — это обычный и привычный всем нам тип адресации в Excel, который указывает сначала столбец, за которым следует номер строки. Например, B2 обозначает ячейку на пересечении столбца B и строки 2.
Стиль R1C1 является обозначает координаты ячейки наоборот – за строками следуют столбцы, и к этому нужно привыкнуть:) Например, R5C1 относится к ячейке A5, которая находится в строке 5, столбце 1 на листе. Если после буквы не следует какая-либо цифра, значит, вы имеете в виду ту же строку или столбец, в которых записана сама формула.
А теперь давайте сравним на простом примере, как функция ДВССЫЛ обрабатывает адреса вида A1 и R1C1:
Как вы видите на скриншоте выше, две разные формулы возвращают один и тот же результат. Вы уже поняли, почему?
- Формула в ячейке D1: =ДВССЫЛ(C1)
Это самый простой вариант. Формула обращается к ячейке C1, извлекает ее значение — текстовую строку «A2» , преобразует ее в ссылку на ячейку, переходит к ячейке A2 и возвращает ее значение, равное 456.
- Формула в ячейке D3: =ДВССЫЛ(C3;ЛОЖЬ)
ЛОЖЬ во втором аргументе указывает, что указанное значение (C3) следует рассматривать как ссылку на ячейку в формате R1C1, т. е. сначала идет номер строки, за которым следует номер столбца. Таким образом, наша формула ДВССЫЛ интерпретирует значение в ячейке C3 (R2C1) как ссылку на ячейку на пересечении строки 2 и столбца 1, которая как раз и является ячейкой A2.
Создание ссылок из значений ячеек и текста
Аналогично тому, как мы создавали ссылки из значений ячеек , вы можете комбинировать текстовую строку и ссылку на ячейку с адресом прямо в формуле ДВССЫЛ, соединив их вместе при помощи оператора конкатенации (&).
В следующем примере формула =ДВССЫЛ(«А»&C1) возвращает значение из ячейки А1 на основе следующей логической цепочки:
Функция ДВССЫЛ объединяет элементы в первом аргументе ссылка_на_ячейку — текст «А» и значение из ячейки C1. Значение в C1 – это число 1, что в результате формирует адрес А1. Формула переходит к ячейке А1 и возвращает ее значение – 555.
Использование функции ДВССЫЛ с именованными диапазонами
Помимо создания ссылок на ячейки из текстовых строк, вы можете заставить функцию Excel ДВССЫЛ создавать ссылки на именованные диапазоны.
Предположим, у вас есть следующие именованные диапазоны на вашем листе:
- Яблоки – С2:E2
- Лимоны — C3: E3
- Апельсины – C4:E4 и так далее по каждому товару.
Чтобы создать динамическую ссылку Excel на любой из указанных выше диапазонов с цифрами продаж, просто запишите его имя, скажем, в H1, и обратитесь к этой ячейке при помощи формулы =ДВССЫЛ(H1).
А теперь вы можете сделать еще один шаг и вложить эту формулу в другие функции Excel. Например, попробуем вычислить сумму и среднее значений в заданном именованном диапазоне или найти максимальную и минимальную сумму продаж в нём, как это сделано на скриншоте ниже:
- =СУММ(ДВССЫЛ (H1))
- =СРЗНАЧ(ДВССЫЛ (H1))
- =МАКС(ДВССЫЛ (H1))
- =МИН(ДВССЫЛ (H1))
Теперь, когда вы получили общее представление о том, как работает функция ДВССЫЛ в Excel, мы можем поэкспериментировать с более серьёзными формулами.
ДВССЫЛ для ссылки на другой рабочий лист
Полезность функции Excel ДВССЫЛ не ограничивается созданием «динамических» ссылок на ячейки. Вы также можете использовать ее для формирования ссылки на другие листы.
Предположим, у вас есть важные данные на листе 1, и вы хотите получить эти данные на листе 2. На скриншоте ниже показано, как можно справиться с этой задачей.
Нам поможет формула:
=ДВССЫЛ(«‘»&A2&»‘!»&B2&C2)
Давайте разбираться, как работает эта формула.
Как вы знаете, обычным способом сослаться на другой лист в Excel является указание имени этого листа, за которым следуют восклицательный знак и ссылка на ячейку или диапазон, например Лист1!A1:С10. Так как имя листа часто содержит пробелы, вам лучше заключить его (имя, а не пробел в одинарные кавычки, чтобы предотвратить возможную ошибку, например,
‘Лист 1!’$A$1 или для диапазона – ‘Лист 1!’$A$1:$С$10 .
Наша задача – сформировать нужный текст и передать его функции ДВССЫЛ. Все, что вам нужно сделать, это:
- записать имя листа в одну ячейку,
- букву столбца – в другую,
- номер строки – в третью,
- объединить всё это в одну текстовую строку,
- передать этот адрес функции ДВССЫЛ.
Помните, что в текстовой строке вы должны заключать каждый элемент, кроме номера строки, в двойные кавычки и затем связать все элементы в единое целое с помощью оператора объединения (&).
С учетом вышеизложенного получаем шаблон ДВССЫЛ для создания ссылки на другой лист:
ДВССЫЛ («‘» & имялиста & «‘!» & имя столбца нужной ячейки & номер строки нужной ячейки )
Возвращаясь к нашему примеру, вы помещаете имя листа в ячейку A2 и вводите адреса столбца и строки в B2 и С2, как показано на скриншоте выше. В результате вы получите следующую формулу:
ДВССЫЛ(«‘»&A2&»‘!»&B2&C2)
Кроме того, обратите внимание, что если вы копируете формулу в несколько ячеек, вам необходимо зафиксировать ссылку на имя листа, используя абсолютные ссылки на ячейки, например $A$2.
Замечание.
- Если какая-либо из ячеек, содержащих имя листа и адреса ячеек (A2, B2 и c2 в приведенной выше формуле), будет пуста, ваша формула вернет ошибку. Чтобы предотвратить это, вы можете обернуть функцию ДВССЫЛ в функцию ЕСЛИ :
ЕСЛИ(ИЛИ(A2=»»;B2=»»;C2-“”); «»; ДВССЫЛ(«‘»&A2&»‘!»&B2&C2)
- Чтобы формула ДВССЫЛ, ссылающаяся на другой лист, работала правильно, указанный лист должен быть открыт в Экселе, иначе формула вернет ошибку #ССЫЛКА. Чтобы не видеть сообщение об ошибке, которое может портить вид вашей таблицы, вы можете использовать функцию ЕСЛИОШИБКА, которая будет отображать пустую строку при любой возникшей ошибке:
ЕСЛИОШИБКА(ДВССЫЛ(«‘»&A2&»‘!»&B2&C2); «»)
Формула ДВССЫЛ для ссылки на другую книгу Excel
Формула, которая создает ссылку на другую книгу Excel, основана на том же подходе, что и обычная ссылка на другую электронную таблицу. Вам просто нужно указать имя книги дополнительно к имени листа и адресу ячейки.
Чтобы упростить задачу, давайте начнем с создания ссылки на другую книгу обычным способом (апострофы добавляются, если имена вашей книги и/или листа содержат пробелы):
‘[Имя_книги.xlsx]Имя_листа’!Арес_ячейки
Но, чтобы формула была универсальной, лучше апострофы добавлять всегда – лишними не будут .
Предполагая, что название книги находится в ячейке A2, имя листа — в B2, а адрес ячейки — в C2 и D2, мы получаем следующую формулу:
=ДВССЫЛ(«‘[«&$A$2&».xlsx]»&$B$2&»‘!»&C2&D2)
Поскольку вы не хотите, чтобы ячейки, содержащие имена книг и листов, изменялись при копировании формулы в другие ячейки, вы можете зафиксировать их, используя абсолютные ссылки на ячейки – $A$2 и $B$2 соответственно.
Если адреса ячеек заменить их значениями, то мы получим такой промежуточный результат:
=ДВССЫЛ(«‘[INDIRECT.xlsx]Продажи’!D3»)
Ну а итоговый результат вы видите на скриншоте ниже.
Hbc6
И теперь вы можете легко создать собственную динамическую ссылку на другую книгу Excel, используя следующий шаблон:
=ДВССЫЛ(«‘[» & Название книги & «]» & Имя листа & «‘!» & Адрес ячейки )
Примечание. Рабочая книга, на которую ссылается ваша формула, всегда должна быть открыта, иначе функция ДВССЫЛ выдаст ошибку #ССЫЛКА. Как обычно, функция ЕСЛИОШИБКА может помочь вам избежать этого:
=ЕСЛИОШИБКА(ДВССЫЛ(«‘[«&$A$2&».xlsx]»&$B$2&»‘!»&C2&D2); «»)
Использование функции Excel ДВССЫЛ чтобы зафиксировать ссылку на ячейку
Обычно Microsoft Excel автоматически изменяет ссылки на ячейки при вставке новых или удалении существующих строк или столбцов на листе. Чтобы этого не произошло, вы можете использовать функцию ДВССЫЛ для работы с конкретными адресами ячеек, которые в любом случае должны оставаться неизменными.
Чтобы проиллюстрировать разницу, сделайте следующее:
- Введите любое значение в любую ячейку, например, число 555 в ячейку A1.
- Обратитесь к A1 из двух других ячеек тремя различными способами: =A1, =ДВССЫЛ(«A1») и ДВССЫЛ(С1), где в С1 записан адрес «А1».
- Вставьте новую строку над строкой 1.
Видите, что происходит? Ячейка с логическим оператором =А1 по-прежнему возвращает 555, потому что ее формула была автоматически изменена на =A2 после вставки строки. Ячейки с формулой ДВССЫЛ теперь возвращают нули, потому что формулы в них не изменились при вставке новой строки и они по-прежнему ссылаются на ячейку A1, которая в настоящее время пуста:
После этой демонстрации у вас может сложиться впечатление, что функция ДВССЫЛ больше мешает, чем помогает. Ладно, попробуем по-другому.
Предположим, вы хотите просуммировать значения в ячейках A2:A5, и вы можете легко сделать это с помощью функции СУММ:
=СУММ(A2:A5)
Однако вы хотите, чтобы формула оставалась неизменной, независимо от того, сколько строк было удалено или вставлено. Самое очевидное решение — использование абсолютных ссылок — не поможет. Чтобы убедиться, введите формулу =СУММ($A$2:$A$5) в какую-нибудь ячейку, вставьте новую строку, скажем, в строку 3, и увидите формулу, преобразованную в =СУММ($A$2:$A$6).
Конечно, такая любезность Microsoft Excel в большинстве случаев будет работать нормально. Тем не менее, могут быть сценарии, когда вы не хотите, чтобы формула менялась автоматически. Например, нам нужна сумма только первых четырех значений из таблицы.
Решение состоит в использовании функции ДВССЫЛ, например:
=СУММ(ДВССЫЛ(«A2:A5»))
Поскольку Excel воспринимает «A1: A5» как простую текстовую строку, а не как ссылку на диапазон, он не будет вносить никаких изменений при вставке или удалении строки (строк), а также при их сортировке.
Использование ДВССЫЛ с другими функциями Excel
Помимо СУММ, ДВССЫЛ часто используется с другими функциями Excel, такими как СТРОКА, СТОЛБEЦ, АДРЕС, ВПР, СУММЕСЛИ и т. д.
Пример 1. Функции ДВССЫЛ и СТРОКА
Довольно часто функция СТРОКА используется в Excel для возврата массива значений. Например, вы можете использовать следующую формулу массива (помните, что для этого нужно нажать Ctrl + Shift + Enter
), чтобы вернуть среднее значение трех наименьших чисел в диапазоне B2:B13
{=СРЗНАЧ(НАИМЕНЬШИЙ(B2:B13;СТРОКА(1:3)))}
Однако, если вы вставите новую строку в свой рабочий лист где-нибудь между строками 1 и 3, диапазон в функции СТРОКА изменится на СТРОКА(1:4), и формула вернет среднее значение четырёх наименьших чисел вместо трёх.
Чтобы этого не произошло, вставьте ДВССЫЛ в функцию СТРОКА, и ваша формула массива всегда будет оставаться правильной, независимо от того, сколько строк будет вставлено или удалено:
={СРЗНАЧ(НАИМЕНЬШИЙ(B2:B13;СТРОКА(ДВССЫЛ(«1:3»))))}
Аналогично, если нам нужно найти сумму трёх наибольших значений, можно использовать ДВССЫЛ вместе с функцией СУММПРОИЗВ.
Вот пример:
={СУММПРОИЗВ(НАИБОЛЬШИЙ(B2:B13;СТРОКА(ДВССЫЛ(«1:3»))))}
А чтобы указать переменное количество значений, которое мы хотим сосчитать, можно это число вынести в отдельную ячейку. К примеру, в С1 запишем цифру 3. Тогда формулу можно изменить таким образом:
={СУММПРОИЗВ(НАИБОЛЬШИЙ(B2:B13;СТРОКА(ДВССЫЛ(«1:»&C1))))}
Согласитесь, что получается достаточно гибкий расчёт.
Пример 2. Функции ДВССЫЛ и АДРЕС
Вы можете использовать Excel ДВССЫЛ вместе с функцией АДРЕС, чтобы получить значение в определенной ячейке на лету.
Как вы помните, функция АДРЕС используется в Excel для получения адреса ячейки по номерам строк и столбцов. Например, формула =АДРЕС(1;3) возвращает текстовую строку «$C$1», поскольку C1 — это ячейка на пересечении 1-й строки и 3-го столбца.
Чтобы создать ссылку на ячейку, вы просто встраиваете функцию АДРЕС в формулу ДВССЫЛ, например:
=ДВССЫЛ(АДРЕС(1;3))
Конечно, эта несложная формула лишь демонстрирует технику. Более сложные примеры использования функций ДВССЫЛ И АДРЕС в Excel см. в статье Как преобразовать строки в столбцы в Excel .
И вот еще несколько примеров формул в которых используется функция ДВССЫЛ, и которые могут оказаться полезными:
- ВПР и ДВССЫЛ — как динамически извлекать данные из разных таблиц (см. пример 2).
- Excel ДВССЫЛ и СЧЁТЕСЛИ — как использовать функцию СЧЁТЕСЛИ в несмежном диапазоне или нескольких выбранных ячейках.
Использование ДВССЫЛ для создания выпадающих списков
Вы можете использовать функцию Excel ДВССЫЛ с инструментом проверки данных для создания каскадных выпадающих списков. Они показывают различные варианты выбора в зависимости от того, какое значение пользователь указал в предыдущем выпадающем списке.
Простой зависимый раскрывающийся список сделать очень просто. Все, что требуется, — это несколько именованных диапазонов для хранения элементов раскрывающегося списка.
В ячейке А1 вы создаете простой выпадающий список с названиями имеющихся именованных диапазонов. Для второго зависимого выпадающего списка в ячейке В2 вы используете простую формулу =ДВССЫЛ(A1), где A1 — это ячейка, в которой выбрано имя нужного именованного диапазона.
К примеру, выбрав в первом списке второй квартал, во втором списке мы видим месяцы этого квартала.
Рис9
Чтобы сделать более сложные трехуровневые меню или раскрывающиеся списки с многоуровневыми записями, вам понадобится немного более сложная формула ДВССЫЛ в сочетании с вложенной функцией ПОДСТАВИТЬ.
Подробное пошаговое руководство по использованию ДВССЫЛ с проверкой данных Excel смотрите в этом руководстве: Как создать зависимый раскрывающийся список в Excel.
Функция ДВССЫЛ Excel — возможные ошибки и проблемы
Как показано в приведенных выше примерах, функция ДВССЫЛ весьма полезна при работе со ссылками на ячейки и диапазоны. Однако не все пользователи Excel охотно принимают этот подход, в основном потому, что постоянное использование ДВССЫЛ приводит к отсутствию прозрачности формул Excel и несколько затрудняет их понимание. Функцию ДВССЫЛ сложно просмотреть и проанализировать ее работу, поскольку ячейка, на которую она ссылается, не является конечным местоположением значения, используемого в формуле. Это действительно довольно запутанно, особенно при работе с большими сложными формулами.
В дополнение к сказанному выше, как и любая другая функция Excel, ДВССЫЛ может вызвать ошибку, если вы неправильно используете аргументы функции. Вот список наиболее типичных ошибок и проблем:
Ошибка #ССЫЛКА!
Чаще всего функция ДВССЫЛ возвращает ошибку #ССЫЛКА! в следующих случаях:
- Аргумент ссылка_на_ячейку не является допустимой ссылкой Excel. Если вы пытаетесь передать функции текст, который не может обозначать ссылку на ячейку (например, «A1B0»), то формула приведет к ошибке #ССЫЛКА!. Во избежание возможных проблем проверьте аргументы функции ДВССЫЛ .
- Превышен предел размера диапазона. Если аргумент ссылка_на_ячейку вашей формулы ДВССЫЛ ссылается на диапазон ячеек за пределами строки 1 048 576 или столбца 16 384, вы также получите ошибку #ССЫЛКА в Excel 2007 и новее. Более ранние версии Excel игнорируют превышение этого лимита и действительно возвращают некоторое значение, хотя часто не то, что вы ожидаете.
- Используемый в формуле лист или рабочая книга закрыты.Если ваша формула с ДВССЫЛ адресуется на другую книгу или лист Excel, то эта другая книга или электронная таблица должны быть открыты, иначе ДВССЫЛ возвращает ошибку #ССЫЛКА! . Впрочем, это требование характерно для всех формул, которые ссылаются на другие рабочие книги Excel.
Ошибка #ИМЯ?
Это самый очевидный случай, подразумевающий, что в названии функции есть какая-то ошибка.
Ошибка из-за несовпадения региональных настроек.
Также распространенная проблема заключается не в названии функции ДВССЫЛ, а в различных региональных настройках для разделителя списка.
В европейских странах запятая зарезервирована как десятичный символ, а в качестве разделителя списка используется точка с запятой.
В стандартной конфигурации Windows для Северной Америки и некоторых других стран разделителем списка по умолчанию является запятая.
В результате при копировании формулы между двумя разными языковыми стандартами Excel вы можете получить сообщение об ошибке « Мы обнаружили проблему с этой формулой… », поскольку разделитель списка, используемый в формуле, отличается от того, что установлен на вашем компьютере. Если вы столкнулись с этой ошибкой при копировании какой-либо НЕПРЯМОЙ формулы из этого руководства в Excel, просто замените все запятые (,) точками с запятой (;) (либо наоборот). В обычных формулах Excel эта проблема, естественно, не возникнет. Там Excel сам поменяет разделители исходя из ваших текущих региональных настроек.
Чтобы проверить, какие разделитель списка и десятичный знак установлены на вашем компьютере, откройте панель управления и перейдите в раздел «Регион и язык» > «Дополнительные настройки».
Надеемся, что это руководство пролило свет для вас на использование ДВССЫЛ в Excel. Теперь, когда вы знаете ее сильные стороны и ограничения, пришло время попробовать и посмотреть, как функция ДВССЫЛ может упростить ваши задачи в Excel. Спасибо за чтение!
Вот еще несколько статей по той же теме:
Этот учебник рассказывает о главных преимуществах функций ИНДЕКС и ПОИСКПОЗ в Excel, которые делают их более привлекательными по сравнению с ВПР. Вы увидите несколько примеров формул, которые помогут Вам легко справиться со многими сложными задачами, перед которыми функция ВПР бессильна.
В нескольких недавних статьях мы приложили все усилия, чтобы разъяснить начинающим пользователям основы функции ВПР и показать примеры более сложных формул для продвинутых пользователей. Теперь мы попытаемся, если не отговорить Вас от использования ВПР, то хотя бы показать альтернативные способы реализации вертикального поиска в Excel.
Зачем нам это? – спросите Вы. Да, потому что ВПР – это не единственная функция поиска в Excel, и её многочисленные ограничения могут помешать Вам получить желаемый результат во многих ситуациях. С другой стороны, функции ИНДЕКС и ПОИСКПОЗ – более гибкие и имеют ряд особенностей, которые делают их более привлекательными, по сравнению с ВПР.
- Базовая информация об ИНДЕКС и ПОИСКПОЗ
- Используем функции ИНДЕКС и ПОИСКПОЗ в Excel
- Преимущества ИНДЕКС и ПОИСКПОЗ перед ВПР
- ИНДЕКС и ПОИСКПОЗ – примеры формул
- Как находить значения, которые находятся слева
- Вычисления при помощи ИНДЕКС и ПОИСКПОЗ
- Поиск по известным строке и столбцу
- Поиск по нескольким критериям
- ИНДЕКС и ПОИСКПОЗ в сочетании с ЕСЛИОШИБКА
Содержание
- Базовая информация об ИНДЕКС и ПОИСКПОЗ
- ИНДЕКС – синтаксис и применение функции
- ПОИСКПОЗ – синтаксис и применение функции
- Как использовать ИНДЕКС и ПОИСКПОЗ в Excel
- Почему ИНДЕКС/ПОИСКПОЗ лучше, чем ВПР?
- 4 главных преимущества использования ПОИСКПОЗ/ИНДЕКС в Excel:
- ИНДЕКС и ПОИСКПОЗ – примеры формул
- Как выполнить поиск с левой стороны, используя ПОИСКПОЗ и ИНДЕКС
- Вычисления при помощи ИНДЕКС и ПОИСКПОЗ в Excel (СРЗНАЧ, МАКС, МИН)
- О чём нужно помнить, используя функцию СРЗНАЧ вместе с ИНДЕКС и ПОИСКПОЗ
- Как при помощи ИНДЕКС и ПОИСКПОЗ выполнять поиск по известным строке и столбцу
- Поиск по нескольким критериям с ИНДЕКС и ПОИСКПОЗ
- ИНДЕКС и ПОИСКПОЗ в сочетании с ЕСЛИОШИБКА в Excel
Базовая информация об ИНДЕКС и ПОИСКПОЗ
Так как задача этого учебника – показать возможности функций ИНДЕКС и ПОИСКПОЗ для реализации вертикального поиска в Excel, мы не будем задерживаться на их синтаксисе и применении.
Приведём здесь необходимый минимум для понимания сути, а затем разберём подробно примеры формул, которые показывают преимущества использования ИНДЕКС и ПОИСКПОЗ вместо ВПР.
ИНДЕКС – синтаксис и применение функции
Функция INDEX (ИНДЕКС) в Excel возвращает значение из массива по заданным номерам строки и столбца. Функция имеет вот такой синтаксис:
INDEX(array,row_num,[column_num])
ИНДЕКС(массив;номер_строки;[номер_столбца])
Каждый аргумент имеет очень простое объяснение:
- array (массив) – это диапазон ячеек, из которого необходимо извлечь значение.
- row_num (номер_строки) – это номер строки в массиве, из которой нужно извлечь значение. Если не указан, то обязательно требуется аргумент column_num (номер_столбца).
- column_num (номер_столбца) – это номер столбца в массиве, из которого нужно извлечь значение. Если не указан, то обязательно требуется аргумент row_num (номер_строки)
Если указаны оба аргумента, то функция ИНДЕКС возвращает значение из ячейки, находящейся на пересечении указанных строки и столбца.
Вот простейший пример функции INDEX (ИНДЕКС):
=INDEX(A1:C10,2,3)
=ИНДЕКС(A1:C10;2;3)
Формула выполняет поиск в диапазоне A1:C10 и возвращает значение ячейки во 2-й строке и 3-м столбце, то есть из ячейки C2.
Очень просто, правда? Однако, на практике Вы далеко не всегда знаете, какие строка и столбец Вам нужны, и поэтому требуется помощь функции ПОИСКПОЗ.
ПОИСКПОЗ – синтаксис и применение функции
Функция MATCH (ПОИСКПОЗ) в Excel ищет указанное значение в диапазоне ячеек и возвращает относительную позицию этого значения в диапазоне.
Например, если в диапазоне B1:B3 содержатся значения New-York, Paris, London, тогда следующая формула возвратит цифру 3, поскольку «London» – это третий элемент в списке.
=MATCH("London",B1:B3,0)
=ПОИСКПОЗ("London";B1:B3;0)
Функция MATCH (ПОИСКПОЗ) имеет вот такой синтаксис:
MATCH(lookup_value,lookup_array,[match_type])
ПОИСКПОЗ(искомое_значение;просматриваемый_массив;[тип_сопоставления])
- lookup_value (искомое_значение) – это число или текст, который Вы ищите. Аргумент может быть значением, в том числе логическим, или ссылкой на ячейку.
- lookup_array (просматриваемый_массив) – диапазон ячеек, в котором происходит поиск.
- match_type (тип_сопоставления) – этот аргумент сообщает функции ПОИСКПОЗ, хотите ли Вы найти точное или приблизительное совпадение:
- 1 или не указан – находит максимальное значение, меньшее или равное искомому. Просматриваемый массив должен быть упорядочен по возрастанию, то есть от меньшего к большему.
- 0 – находит первое значение, равное искомому. Для комбинации ИНДЕКС/ПОИСКПОЗ всегда нужно точное совпадение, поэтому третий аргумент функции ПОИСКПОЗ должен быть равен 0.
- -1 – находит наименьшее значение, большее или равное искомому значению. Просматриваемый массив должен быть упорядочен по убыванию, то есть от большего к меньшему.
На первый взгляд, польза от функции ПОИСКПОЗ вызывает сомнение. Кому нужно знать положение элемента в диапазоне? Мы хотим знать значение этого элемента!
Позвольте напомнить, что относительное положение искомого значения (т.е. номер строки и/или столбца) – это как раз то, что мы должны указать для аргументов row_num (номер_строки) и/или column_num (номер_столбца) функции INDEX (ИНДЕКС). Как Вы помните, функция ИНДЕКС может возвратить значение, находящееся на пересечении заданных строки и столбца, но она не может определить, какие именно строка и столбец нас интересуют.
Как использовать ИНДЕКС и ПОИСКПОЗ в Excel
Теперь, когда Вам известна базовая информация об этих двух функциях, полагаю, что уже становится понятно, как функции ПОИСКПОЗ и ИНДЕКС могут работать вместе. ПОИСКПОЗ определяет относительную позицию искомого значения в заданном диапазоне ячеек, а ИНДЕКС использует это число (или числа) и возвращает результат из соответствующей ячейки.
Ещё не совсем понятно? Представьте функции ИНДЕКС и ПОИСКПОЗ в таком виде:
=INDEX(столбец из которого извлекаем,(MATCH (искомое значение,столбец в котором ищем,0))
=ИНДЕКС(столбец из которого извлекаем;(ПОИСКПОЗ(искомое значение;столбец в котором ищем;0))
Думаю, ещё проще будет понять на примере. Предположим, у Вас есть вот такой список столиц государств:
Давайте найдём население одной из столиц, например, Японии, используя следующую формулу:
=INDEX($D$2:$D$10,MATCH("Japan",$B$2:$B$10,0))
=ИНДЕКС($D$2:$D$10;ПОИСКПОЗ("Japan";$B$2:$B$10;0))
Теперь давайте разберем, что делает каждый элемент этой формулы:
- Функция MATCH (ПОИСКПОЗ) ищет значение «Japan» в столбце B, а конкретно – в ячейках B2:B10, и возвращает число 3, поскольку «Japan» в списке на третьем месте.
- Функция INDEX (ИНДЕКС) использует 3 для аргумента row_num (номер_строки), который указывает из какой строки нужно возвратить значение. Т.е. получается простая формула:
=INDEX($D$2:$D$10,3)
=ИНДЕКС($D$2:$D$10;3)
Формула говорит примерно следующее: ищи в ячейках от D2 до D10 и извлеки значение из третьей строки, то есть из ячейки D4, так как счёт начинается со второй строки.
Вот такой результат получится в Excel:
Важно! Количество строк и столбцов в массиве, который использует функция INDEX (ИНДЕКС), должно соответствовать значениям аргументов row_num (номер_строки) и column_num (номер_столбца) функции MATCH (ПОИСКПОЗ). Иначе результат формулы будет ошибочным.
Стоп, стоп… почему мы не можем просто использовать функцию VLOOKUP (ВПР)? Есть ли смысл тратить время, пытаясь разобраться в лабиринтах ПОИСКПОЗ и ИНДЕКС?
=VLOOKUP("Japan",$B$2:$D$2,3)
=ВПР("Japan";$B$2:$D$2;3)
В данном случае – смысла нет! Цель этого примера – исключительно демонстрационная, чтобы Вы могли понять, как функции ПОИСКПОЗ и ИНДЕКС работают в паре. Последующие примеры покажут Вам истинную мощь связки ИНДЕКС и ПОИСКПОЗ, которая легко справляется с многими сложными ситуациями, когда ВПР оказывается в тупике.
Почему ИНДЕКС/ПОИСКПОЗ лучше, чем ВПР?
Решая, какую формулу использовать для вертикального поиска, большинство гуру Excel считают, что ИНДЕКС/ПОИСКПОЗ намного лучше, чем ВПР. Однако, многие пользователи Excel по-прежнему прибегают к использованию ВПР, т.к. эта функция гораздо проще. Так происходит, потому что очень немногие люди до конца понимают все преимущества перехода с ВПР на связку ИНДЕКС и ПОИСКПОЗ, а тратить время на изучение более сложной формулы никто не хочет.
Далее я попробую изложить главные преимущества использования ПОИСКПОЗ и ИНДЕКС в Excel, а Вы решите – остаться с ВПР или переключиться на ИНДЕКС/ПОИСКПОЗ.
4 главных преимущества использования ПОИСКПОЗ/ИНДЕКС в Excel:
1. Поиск справа налево. Как известно любому грамотному пользователю Excel, ВПР не может смотреть влево, а это значит, что искомое значение должно обязательно находиться в крайнем левом столбце исследуемого диапазона. В случае с ПОИСКПОЗ/ИНДЕКС, столбец поиска может быть, как в левой, так и в правой части диапазона поиска. Пример: Как находить значения, которые находятся слева покажет эту возможность в действии.
2. Безопасное добавление или удаление столбцов. Формулы с функцией ВПР перестают работать или возвращают ошибочные значения, если удалить или добавить столбец в таблицу поиска. Для функции ВПР любой вставленный или удалённый столбец изменит результат формулы, поскольку синтаксис ВПР требует указывать весь диапазон и конкретный номер столбца, из которого нужно извлечь данные.
Например, если у Вас есть таблица A1:C10, и требуется извлечь данные из столбца B, то нужно задать значение 2 для аргумента col_index_num (номер_столбца) функции ВПР, вот так:
=VLOOKUP("lookup value",A1:C10,2)
=ВПР("lookup value";A1:C10;2)
Если позднее Вы вставите новый столбец между столбцами A и B, то значение аргумента придется изменить с 2 на 3, иначе формула возвратит результат из только что вставленного столбца.
Используя ПОИСКПОЗ/ИНДЕКС, Вы можете удалять или добавлять столбцы к исследуемому диапазону, не искажая результат, так как определен непосредственно столбец, содержащий нужное значение. Действительно, это большое преимущество, особенно когда работать приходится с большими объёмами данных. Вы можете добавлять и удалять столбцы, не беспокоясь о том, что нужно будет исправлять каждую используемую функцию ВПР.
3. Нет ограничения на размер искомого значения. Используя ВПР, помните об ограничении на длину искомого значения в 255 символов, иначе рискуете получить ошибку #VALUE! (#ЗНАЧ!). Итак, если таблица содержит длинные строки, единственное действующее решение – это использовать ИНДЕКС/ПОИСКПОЗ.
Предположим, Вы используете вот такую формулу с ВПР, которая ищет в ячейках от B5 до D10 значение, указанное в ячейке A2:
=VLOOKUP(A2,B5:D10,3,FALSE)
=ВПР(A2;B5:D10;3;ЛОЖЬ)
Формула не будет работать, если значение в ячейке A2 длиннее 255 символов. Вместо неё Вам нужно использовать аналогичную формулу ИНДЕКС/ПОИСКПОЗ:
=INDEX(D5:D10,MATCH(TRUE,INDEX(B5:B10=A2,0),0))
=ИНДЕКС(D5:D10;ПОИСКПОЗ(ИСТИНА;ИНДЕКС(B5:B10=A2;0);0))
4. Более высокая скорость работы. Если Вы работаете с небольшими таблицами, то разница в быстродействии Excel будет, скорее всего, не заметная, особенно в последних версиях. Если же Вы работаете с большими таблицами, которые содержат тысячи строк и сотни формул поиска, Excel будет работать значительно быстрее, при использовании ПОИСКПОЗ и ИНДЕКС вместо ВПР. В целом, такая замена увеличивает скорость работы Excel на 13%.
Влияние ВПР на производительность Excel особенно заметно, если рабочая книга содержит сотни сложных формул массива, таких как ВПР+СУММ. Дело в том, что проверка каждого значения в массиве требует отдельного вызова функции ВПР. Поэтому, чем больше значений содержит массив и чем больше формул массива содержит Ваша таблица, тем медленнее работает Excel.
С другой стороны, формула с функциями ПОИСКПОЗ и ИНДЕКС просто совершает поиск и возвращает результат, выполняя аналогичную работу заметно быстрее.
ИНДЕКС и ПОИСКПОЗ – примеры формул
Теперь, когда Вы понимаете причины, из-за которых стоит изучать функции ПОИСКПОЗ и ИНДЕКС, давайте перейдём к самому интересному и увидим, как можно применить теоретические знания на практике.
Как выполнить поиск с левой стороны, используя ПОИСКПОЗ и ИНДЕКС
Любой учебник по ВПР твердит, что эта функция не может смотреть влево. Т.е. если просматриваемый столбец не является крайним левым в диапазоне поиска, то нет шансов получить от ВПР желаемый результат.
Функции ПОИСКПОЗ и ИНДЕКС в Excel гораздо более гибкие, и им все-равно, где находится столбец со значением, которое нужно извлечь. Для примера, снова вернёмся к таблице со столицами государств и населением. На этот раз запишем формулу ПОИСКПОЗ/ИНДЕКС, которая покажет, какое место по населению занимает столица России (Москва).
Как видно на рисунке ниже, формула отлично справляется с этой задачей:
=INDEX($A$2:$A$10,MATCH("Russia",$B$2:$B$10,0))
=ИНДЕКС($A$2:$A$10;ПОИСКПОЗ("Russia";$B$2:$B$10;0))
Теперь у Вас не должно возникать проблем с пониманием, как работает эта формула:
- Во-первых, задействуем функцию MATCH (ПОИСКПОЗ), которая находит положение «Russia» в списке:
=MATCH("Russia",$B$2:$B$10,0))
=ПОИСКПОЗ("Russia";$B$2:$B$10;0))
- Далее, задаём диапазон для функции INDEX (ИНДЕКС), из которого нужно извлечь значение. В нашем случае это A2:A10.
- Затем соединяем обе части и получаем формулу:
=INDEX($A$2:$A$10;MATCH("Russia";$B$2:$B$10;0))
=ИНДЕКС($A$2:$A$10;ПОИСКПОЗ("Russia";$B$2:$B$10;0))
Подсказка: Правильным решением будет всегда использовать абсолютные ссылки для ИНДЕКС и ПОИСКПОЗ, чтобы диапазоны поиска не сбились при копировании формулы в другие ячейки.
Вычисления при помощи ИНДЕКС и ПОИСКПОЗ в Excel (СРЗНАЧ, МАКС, МИН)
Вы можете вкладывать другие функции Excel в ИНДЕКС и ПОИСКПОЗ, например, чтобы найти минимальное, максимальное или ближайшее к среднему значение. Вот несколько вариантов формул, применительно к таблице из предыдущего примера:
1. MAX (МАКС). Формула находит максимум в столбце D и возвращает значение из столбца C той же строки:
=INDEX($C$2:$C$10,MATCH(MAX($D$2:I$10),$D$2:D$10,0))
=ИНДЕКС($C$2:$C$10;ПОИСКПОЗ(МАКС($D$2:I$10);$D$2:D$10;0))
Результат: Beijing
2. MIN (МИН). Формула находит минимум в столбце D и возвращает значение из столбца C той же строки:
=INDEX($C$2:$C$10,MATCH(MIN($D$2:I$10),$D$2:D$10,0))
=ИНДЕКС($C$2:$C$10;ПОИСКПОЗ(МИН($D$2:I$10);$D$2:D$10;0))
Результат: Lima
3. AVERAGE (СРЗНАЧ). Формула вычисляет среднее в диапазоне D2:D10, затем находит ближайшее к нему и возвращает значение из столбца C той же строки:
=INDEX($C$2:$C$10,MATCH(AVERAGE($D$2:D$10),$D$2:D$10,1))
=ИНДЕКС($C$2:$C$10;ПОИСКПОЗ(СРЗНАЧ($D$2:D$10);$D$2:D$10;1))
Результат: Moscow
О чём нужно помнить, используя функцию СРЗНАЧ вместе с ИНДЕКС и ПОИСКПОЗ
Используя функцию СРЗНАЧ в комбинации с ИНДЕКС и ПОИСКПОЗ, в качестве третьего аргумента функции ПОИСКПОЗ чаще всего нужно будет указывать 1 или -1 в случае, если Вы не уверены, что просматриваемый диапазон содержит значение, равное среднему. Если же Вы уверены, что такое значение есть, – ставьте 0 для поиска точного совпадения.
- Если указываете 1, значения в столбце поиска должны быть упорядочены по возрастанию, а формула вернёт максимальное значение, меньшее или равное среднему.
- Если указываете -1, значения в столбце поиска должны быть упорядочены по убыванию, а возвращено будет минимальное значение, большее или равное среднему.
В нашем примере значения в столбце D упорядочены по возрастанию, поэтому мы используем тип сопоставления 1. Формула ИНДЕКС/ПОИСКПОЗ возвращает «Moscow», поскольку величина населения города Москва – ближайшее меньшее к среднему значению (12 269 006).
Как при помощи ИНДЕКС и ПОИСКПОЗ выполнять поиск по известным строке и столбцу
Эта формула эквивалентна двумерному поиску ВПР и позволяет найти значение на пересечении определённой строки и столбца.
В этом примере формула ИНДЕКС/ПОИСКПОЗ будет очень похожа на формулы, которые мы уже обсуждали в этом уроке, с одним лишь отличием. Угадайте каким?
Как Вы помните, синтаксис функции INDEX (ИНДЕКС) позволяет использовать три аргумента:
INDEX(array,row_num,[column_num])
ИНДЕКС(массив;номер_строки;[номер_столбца])
И я поздравляю тех из Вас, кто догадался!
Начнём с того, что запишем шаблон формулы. Для этого возьмём уже знакомую нам формулу ИНДЕКС/ПОИСКПОЗ и добавим в неё ещё одну функцию ПОИСКПОЗ, которая будет возвращать номер столбца.
=INDEX(Ваша таблица,(MATCH(значение для вертикального поиска,столбец, в котором искать,0)),(MATCH(значение для горизонтального поиска,строка в которой искать,0))
=ИНДЕКС(Ваша таблица,(MATCH(значение для вертикального поиска,столбец, в котором искать,0)),(MATCH(значение для горизонтального поиска,строка в которой искать,0))
Обратите внимание, что для двумерного поиска нужно указать всю таблицу в аргументе array (массив) функции INDEX (ИНДЕКС).
А теперь давайте испытаем этот шаблон на практике. Ниже Вы видите список самых населённых стран мира. Предположим, наша задача узнать население США в 2015 году.
Хорошо, давайте запишем формулу. Когда мне нужно создать сложную формулу в Excel с вложенными функциями, то я сначала каждую вложенную записываю отдельно.
Итак, начнём с двух функций ПОИСКПОЗ, которые будут возвращать номера строки и столбца для функции ИНДЕКС:
- ПОИСКПОЗ для столбца – мы ищем в столбце B, а точнее в диапазоне B2:B11, значение, которое указано в ячейке H2 (USA). Функция будет выглядеть так:
=MATCH($H$2,$B$1:$B$11,0)
=ПОИСКПОЗ($H$2;$B$1:$B$11;0)
Результатом этой формулы будет 4, поскольку «USA» – это 4-ый элемент списка в столбце B (включая заголовок).
- ПОИСКПОЗ для строки – мы ищем значение ячейки H3 (2015) в строке 1, то есть в ячейках A1:E1:
=MATCH($H$3,$A$1:$E$1,0)
=ПОИСКПОЗ($H$3;$A$1:$E$1;0)
Результатом этой формулы будет 5, поскольку «2015» находится в 5-ом столбце.
Теперь вставляем эти формулы в функцию ИНДЕКС и вуаля:
=INDEX($A$1:$E$11,MATCH($H$2,$B$1:$B$11,0),MATCH($H$3,$A$1:$E$1,0))
=ИНДЕКС($A$1:$E$11;ПОИСКПОЗ($H$2;$B$1:$B$11;0);ПОИСКПОЗ($H$3;$A$1:$E$1;0))
Если заменить функции ПОИСКПОЗ на значения, которые они возвращают, формула станет легкой и понятной:
=INDEX($A$1:$E$11,4,5))
=ИНДЕКС($A$1:$E$11;4;5))
Эта формула возвращает значение на пересечении 4-ой строки и 5-го столбца в диапазоне A1:E11, то есть значение ячейки E4. Просто? Да!
Поиск по нескольким критериям с ИНДЕКС и ПОИСКПОЗ
В учебнике по ВПР мы показывали пример формулы с функцией ВПР для поиска по нескольким критериям. Однако, существенным ограничением такого решения была необходимость добавлять вспомогательный столбец. Хорошая новость: формула ИНДЕКС/ПОИСКПОЗ может искать по значениям в двух столбцах, без необходимости создания вспомогательного столбца!
Предположим, у нас есть список заказов, и мы хотим найти сумму по двум критериям – имя покупателя (Customer) и продукт (Product). Дело усложняется тем, что один покупатель может купить сразу несколько разных продуктов, и имена покупателей в таблице на листе Lookup table расположены в произвольном порядке.
Вот такая формула ИНДЕКС/ПОИСКПОЗ решает задачу:
{=INDEX('Lookup table'!$A$2:$C$13,MATCH(1,(A2='Lookup table'!$A$2:$A$13)*
(B2='Lookup table'!$B$2:$B$13),0),3)}
{=ИНДЕКС('Lookup table'!$A$2:$C$13;ПОИСКПОЗ(1;(A2='Lookup table'!$A$2:$A$13)*
(B2='Lookup table'!$B$2:$B$13);0);3)}
Эта формула сложнее других, которые мы обсуждали ранее, но вооруженные знанием функций ИНДЕКС и ПОИСКПОЗ Вы одолеете ее. Самая сложная часть – это функция ПОИСКПОЗ, думаю, её нужно объяснить первой.
MATCH(1,(A2='Lookup table'!$A$2:$A$13),0)*(B2='Lookup table'!$B$2:$B$13)
ПОИСКПОЗ(1;(A2='Lookup table'!$A$2:$A$13);0)*(B2='Lookup table'!$B$2:$B$13)
В формуле, показанной выше, искомое значение – это 1, а массив поиска – это результат умножения. Хорошо, что же мы должны перемножить и почему? Давайте разберем все по порядку:
- Берем первое значение в столбце A (Customer) на листе Main table и сравниваем его со всеми именами покупателей в таблице на листе Lookup table (A2:A13).
- Если совпадение найдено, уравнение возвращает 1 (ИСТИНА), а если нет – 0 (ЛОЖЬ).
- Далее, мы делаем то же самое для значений столбца B (Product).
- Затем перемножаем полученные результаты (1 и 0). Только если совпадения найдены в обоих столбцах (т.е. оба критерия истинны), Вы получите 1. Если оба критерия ложны, или выполняется только один из них – Вы получите 0.
Теперь понимаете, почему мы задали 1, как искомое значение? Правильно, чтобы функция ПОИСКПОЗ возвращала позицию только, когда оба критерия выполняются.
Обратите внимание: В этом случае необходимо использовать третий не обязательный аргумент функции ИНДЕКС. Он необходим, т.к. в первом аргументе мы задаем всю таблицу и должны указать функции, из какого столбца нужно извлечь значение. В нашем случае это столбец C (Sum), и поэтому мы ввели 3.
И, наконец, т.к. нам нужно проверить каждую ячейку в массиве, эта формула должна быть формулой массива. Вы можете видеть это по фигурным скобкам, в которые она заключена. Поэтому, когда закончите вводить формулу, не забудьте нажать Ctrl+Shift+Enter.
Если всё сделано верно, Вы получите результат как на рисунке ниже:
ИНДЕКС и ПОИСКПОЗ в сочетании с ЕСЛИОШИБКА в Excel
Как Вы, вероятно, уже заметили (и не раз), если вводить некорректное значение, например, которого нет в просматриваемом массиве, формула ИНДЕКС/ПОИСКПОЗ сообщает об ошибке #N/A (#Н/Д) или #VALUE! (#ЗНАЧ!). Если Вы хотите заменить такое сообщение на что-то более понятное, то можете вставить формулу с ИНДЕКС и ПОИСКПОЗ в функцию ЕСЛИОШИБКА.
Синтаксис функции ЕСЛИОШИБКА очень прост:
IFERROR(value,value_if_error)
ЕСЛИОШИБКА(значение;значение_если_ошибка)
Где аргумент value (значение) – это значение, проверяемое на предмет наличия ошибки (в нашем случае – результат формулы ИНДЕКС/ПОИСКПОЗ); а аргумент value_if_error (значение_если_ошибка) – это значение, которое нужно возвратить, если формула выдаст ошибку.
Например, Вы можете вставить формулу из предыдущего примера в функцию ЕСЛИОШИБКА вот таким образом:
=IFERROR(INDEX($A$1:$E$11,MATCH($G$2,$B$1:$B$11,0),MATCH($G$3,$A$1:$E$1,0)),
"Совпадений не найдено. Попробуйте еще раз!")=ЕСЛИОШИБКА(ИНДЕКС($A$1:$E$11;ПОИСКПОЗ($G$2;$B$1:$B$11;0);ПОИСКПОЗ($G$3;$A$1:$E$1;0));
"Совпадений не найдено. Попробуйте еще раз!")
И теперь, если кто-нибудь введет ошибочное значение, формула выдаст вот такой результат:
Если Вы предпочитаете в случае ошибки оставить ячейку пустой, то можете использовать кавычки («»), как значение второго аргумента функции ЕСЛИОШИБКА. Вот так:
IFERROR(INDEX(массив,MATCH(искомое_значение,просматриваемый_массив,0),"")
ЕСЛИОШИБКА(ИНДЕКС(массив;ПОИСКПОЗ(искомое_значение;просматриваемый_массив;0);"")
Надеюсь, что хотя бы одна формула, описанная в этом учебнике, показалась Вам полезной. Если Вы сталкивались с другими задачами поиска, для которых не смогли найти подходящее решение среди информации в этом уроке, смело опишите свою проблему в комментариях, и мы все вместе постараемся решить её.
Оцените качество статьи. Нам важно ваше мнение:
Функция ИНДЕКС возвращает значение или ссылку на значение из таблицы или диапазона.
Функцию ИНДЕКС можно использовать двумя способами:
-
Если вы хотите возвращать значение указанной ячейки или массива ячеек, см. раздел Форма массива.
-
Если требуется возвращать ссылку на указанные ячейки, см. раздел Ссылочная форма.
Форма массива
Описание
Возвращает значение элемента в таблице или массиве, выбранное по индексам номеров строк и столбцов.
Если первый аргумент функции ИНДЕКС является константной массива, используйте форму массива.
Синтаксис
ИНДЕКС(массив; номер_строки; [номер_столбца])
Форма массива функции INDEX имеет следующие аргументы:
-
массив. Обязательный аргумент. Диапазон ячеек или константа массива.
-
Если массив содержит только одну строку или столбец, соответствующий аргумент номер_строки или номер_столбца является необязательным.
-
Если массив содержит более одной строки и более одного столбца и используется только номер_строки или номер_столбца, ИНДЕКС возвращает массив всей строки или столбца в массиве.
-
-
Номер_строки Обязательный, если column_num отсутствует. Выбирает строку в массиве, из которой требуется возвратить значение. Если номер_строки опущен, требуется номер_столбца.
-
Номер_столбца — необязательный аргумент. Выбирает столбец в массиве, из которого требуется возвратить значение. Если номер_столбца опущен, требуется номер_строки.
Замечания
-
Если используются аргументы номер_строки и номер_столбца, функция ИНДЕКС возвращает значение в ячейке на пересечении номеров_строки и номера_столбца.
-
row_num и column_num должны указывать на ячейку в массиве; в противном случае ИНДЕКС возвращает #ССЫЛКА! ошибку «#ЗНАЧ!».
-
Если задать для row_num или column_num значение 0 (ноль), ИНДЕКС возвращает массив значений для всего столбца или строки соответственно. Чтобы использовать значения, возвращаемые в виде массива, введите функцию ИНДЕКС как формулу массива.
Примечание: Если у вас есть текущая версия Microsoft 365, вы можете ввести формулу в верхнюю левую ячейку выходного диапазона, а затем нажать клавишу ВВОД, чтобы подтвердить формулу как формулу динамического массива. В противном случае формулу необходимо ввести как устаревшую формулу массива, сначала выбрав выходной диапазон, введите формулу в верхнюю левую ячейку выходного диапазона, а затем нажмите CTRL+SHIFT+ENTER для подтверждения. Excel автоматически вставляет фигурные скобки в начале и конце формулы. Дополнительные сведения о формулах массива см. в статье Использование формул массива: рекомендации и примеры.
Примеры
Пример 1
В этих примерах функция ИНДЕКС используется для поиска значения ячейки, находящейся на пересечении заданных строки и столбца.
Скопируйте образец данных из следующей таблицы и вставьте их в ячейку A1 нового листа Excel. Чтобы отобразить результаты формул, выделите их и нажмите клавишу F2, а затем — ВВОД.
Данные |
Данные |
|
---|---|---|
Яблоки |
Лимоны |
|
Бананы |
Груши |
|
Формула |
Описание |
Результат |
=ИНДЕКС(A2:B3;2;2) |
Значение ячейки на пересечении второй строки и второго столбца в диапазоне A2:B3. |
Груши |
=ИНДЕКС(A2:B3;2;1) |
Значение ячейки на пересечении второй строки и первого столбца в диапазоне A2:B3. |
Бананы |
Пример 2
В этом примере функция ИНДЕКС используется в формуле массива для поиска значений двух заданных ячеек в массиве с диапазоном 2 x 2.
Примечание: Если у вас есть текущая версия Microsoft 365, вы можете ввести формулу в верхнюю левую ячейку выходного диапазона, а затем нажать клавишу ВВОД, чтобы подтвердить формулу как формулу динамического массива. В противном случае формулу необходимо ввести как устаревшую формулу массива, сначала выбрав две пустые ячейки, введите формулу в верхнюю левую ячейку выходного диапазона, а затем нажмите CTRL+SHIFT+ENTER для подтверждения. Excel автоматически вставляет фигурные скобки в начале и конце формулы. Дополнительные сведения о формулах массива см. в статье Использование формул массива: рекомендации и примеры.
Формула |
Описание |
Результат |
---|---|---|
=ИНДЕКС({1;2:3;4};0;2) |
Значение ячейки на пересечении первой строки и второго столбца в массиве. Массив содержит значения 1 и 2 в первой строке и значения 3 и 4 во второй строке. |
2 |
Значение ячейки на пересечении второй строки и второго столбца в массиве, указанном выше. |
4 |
|
К началу страницы
Справочная форма
Описание
Возвращает ссылку на ячейку, расположенную на пересечении указанной строки и указанного столбца. Если ссылка состоит из несмежных выборок, вы можете выбрать выборку для поиска.
Синтаксис
ИНДЕКС(ссылка; номер_строки; [номер_столбца]; [номер_области])
Справочная форма функции ИНДЕКС имеет следующие аргументы:
-
ссылка — обязательный аргумент. Ссылка на один или несколько диапазонов ячеек.
-
Если вы вводите несмежный диапазон для ссылки, заключите ссылку в круглые скобки.
-
Если каждая область в ссылке содержит только одну строку или столбец, аргумент номер_строки или номер_столбца соответственно является необязательным. Например, для ссылки на единственную строку нужно использовать формулу ИНДЕКС(ссылка,,номер_столбца).
-
-
Номер_строки Обязательный аргумент. Номер строки в диапазоне, заданном аргументом «ссылка», из которого требуется возвратить ссылку.
-
Номер_столбца — необязательный аргумент. Номер столбца в диапазоне, заданном аргументом «ссылка», из которого требуется возвратить ссылку.
-
area_num Необязательный. Выбирает диапазон в ссылке, из которого возвращается пересечение row_num и column_num. Первая выбранная или введенная область имеет номер 1, вторая — 2 и так далее. Если номер_области опущен, ИНДЕКС использует область 1. Перечисленные здесь области должны располагаться на одном листе. Если вы укажете области, которые не находятся на одном листе друг с другом, это вызовет ошибку #ЗНАЧ! ошибку «#ВЫЧИС!». Если вам нужно использовать диапазоны, расположенные на разных листах друг от друга, рекомендуется использовать форму массива функции ИНДЕКС, а для вычисления диапазона, из которого состоит массив, использовать другую функцию. Например, вы можете использовать функцию ВЫБОР, чтобы вычислить, какой диапазон будет использоваться.
Например, если ссылка описывает ячейки (A1:B4,D1:E4,G1:H4), номер_области 1 – это диапазон A1:B4, номер_области 2 – это диапазон D1:E4, а номер_области 3 – диапазон G1:H4.
Замечания
-
После того, как ссылка и area_num выбрали конкретный диапазон, row_num и column_num выбирают конкретную ячейку: row_num 1 — это первая строка в диапазоне, column_num 1 — это первый столбец и так далее. Ссылка, возвращаемая INDEX, представляет собой пересечение row_num и column_num.
-
Если вы установите номер_строки или номер_столбца равным 0 (ноль), ИНДЕКС возвращает ссылку для всего столбца или строки соответственно.
-
row_num, column_num и area_num должны указывать на ячейку в пределах ссылки; в противном случае ИНДЕКС возвращает #ССЫЛКА! ошибку «#ЗНАЧ!». Если номер_строки и номер_столбца опущены, ИНДЕКС возвращает область в ссылке, указанную номером_области.
-
Результатом вычисления функции ИНДЕКС является ссылка, которая интерпретируется в качестве таковой другими функциями. В зависимости от формулы значение, возвращаемое функцией ИНДЕКС, может использоваться как ссылка или как значение. Например, формула ЯЧЕЙКА(«ширина»;ИНДЕКС(A1:B2;1;2)) эквивалентна формуле ЯЧЕЙКА(«ширина»;B1). Функция ЯЧЕЙКА использует значение, возвращаемое функцией ИНДЕКС, как ссылку. С другой стороны, такая формула, как 2*ИНДЕКС(A1:B2;1;2), преобразует значение, возвращаемое функцией ИНДЕКС, в число в ячейке B1.
Примеры
Скопируйте образец данных из следующей таблицы и вставьте их в ячейку A1 нового листа Excel. Чтобы отобразить результаты формул, выделите их и нажмите клавишу F2, а затем — клавишу Enter.
Фрукты |
Цена |
Количество |
---|---|---|
Яблоки |
0,69 ₽ |
40 |
Бананы |
0,34 ₽ |
38 |
Лимоны |
0,55 ₽ |
15 |
Апельсины |
0,25 ₽ |
25 |
Груши |
0,59 ₽ |
40 |
Миндаль |
2,80 ₽ |
10 |
Кешью |
3,55 ₽ |
16 |
Арахис |
1,25 ₽ |
20 |
Грецкие орехи |
1,75 ₽ |
12 |
Формула |
Описание |
Результат |
=ИНДЕКС(A2:C6;2;3) |
Пересечение второй строки и третьего столбца в диапазоне A2:C6, т. е. содержимое ячейки C3. |
38 |
=ИНДЕКС((A1:C6;A8:C11);2;2;2) |
Пересечение второй строки и второго столбца во второй области (A8:C11), т. е. содержимое ячейки B9. |
1,25 |
=СУММ(ИНДЕКС(A1:C11;0;3;1)) |
Сумма третьего столбца в первой области диапазона (A1:C11) является суммой диапазона C1:C11. |
216 |
=СУММ(B2:ИНДЕКС(A2:C6;5;2)) |
Сумма значений из диапазона, начинающегося с ячейки B2 и заканчивающегося пересечением пятой строки и второго столбца диапазона A2:A6, т. е. сумма значений из диапазона B2:B6. |
2,42 |
К началу страницы
См. также
Функция ВПР
ПОИСКПОЗ
Функция ДВССЫЛ
Использование формул массива: рекомендации и примеры
Функции ссылки и поиска (справка)
Всё о работе с ячейками в Excel-VBA: обращение, перебор, удаление, вставка, скрытие, смена имени.
Содержание:
Table of Contents:
- Что такое ячейка Excel?
- Способы обращения к ячейкам
- Выбор и активация
- Получение и изменение значений ячеек
- Ячейки открытой книги
- Ячейки закрытой книги
- Перебор ячеек
- Перебор в произвольном диапазоне
- Свойства и методы ячеек
- Имя ячейки
- Адрес ячейки
- Размеры ячейки
- Запуск макроса активацией ячейки
2 нюанса:
- Я почти везде стараюсь использовать ThisWorkbook (а не, например, ActiveWorkbook) для обращения к текущей книге, в которой написан этот код (считаю это наиболее безопасным для новичков способом обращения к книгам, чтобы случайно не внести изменения в другие книги). Для экспериментов можете вставлять этот код в модули, коды книги, либо листа, и он будет работать только в пределах этой книги.
- Я использую английский эксель и у меня по стандарту листы называются Sheet1, Sheet2 и т.д. Если вы работаете в русском экселе, то замените Thisworkbook.Sheets(«Sheet1») на Thisworkbook.Sheets(«Лист1»). Если этого не сделать, то вы получите ошибку в связи с тем, что пытаетесь обратиться к несуществующему объекту. Можно также заменить на Thisworkbook.Sheets(1), но это менее безопасно.
Что такое ячейка Excel?
В большинстве мест пишут: «элемент, образованный пересечением столбца и строки». Это определение полезно для людей, которые не знакомы с понятием «таблица». Для того, чтобы понять чем на самом деле является ячейка Excel, необходимо заглянуть в объектную модель Excel. При этом определения объектов «ряд», «столбец» и «ячейка» будут отличаться в зависимости от того, как мы работаем с файлом.
Объекты в Excel-VBA. Пока мы работаем в Excel без углубления в VBA определение ячейки как «пересечения» строк и столбцов нам вполне хватает, но если мы решаем как-то автоматизировать процесс в VBA, то о нём лучше забыть и просто воспринимать лист как «мешок» ячеек, с каждой из которых VBA позволяет работать как минимум тремя способами:
- по цифровым координатам (ряд, столбец),
- по адресам формата А1, B2 и т.д. (сценарий целесообразности данного способа обращения в VBA мне сложно представить)
- по уникальному имени (во втором и третьем вариантах мы будем иметь дело не совсем с ячейкой, а с объектом VBA range, который может состоять из одной или нескольких ячеек). Функции и методы объектов Cells и Range отличаются. Новичкам я бы порекомендовал работать с ячейками VBA только с помощью Cells и по их цифровым координатам и использовать Range только по необходимости.
Все три способа обращения описаны далее
Как это хранится на диске и как с этим работать вне Excel? С точки зрения хранения и обработки вне Excel и VBA. Сделать это можно, например, сменив расширение файла с .xls(x) на .zip и открыв этот архив.
Пример содержимого файла Excel:
Далее xl -> worksheets и мы видим файл листа
Содержимое файла:
То же, но более наглядно:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac xr xr2 xr3" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" xmlns:xr="http://schemas.microsoft.com/office/spreadsheetml/2014/revision" xmlns:xr2="http://schemas.microsoft.com/office/spreadsheetml/2015/revision2" xmlns:xr3="http://schemas.microsoft.com/office/spreadsheetml/2016/revision3" xr:uid="{00000000-0001-0000-0000-000000000000}">
<dimension ref="B2:F6"/>
<sheetViews>
<sheetView tabSelected="1" workbookViewId="0">
<selection activeCell="D12" sqref="D12"/>
</sheetView>
</sheetViews>
<sheetFormatPr defaultRowHeight="14.4" x14ac:dyDescent="0.3"/>
<sheetData>
<row r="2" spans="2:6" x14ac:dyDescent="0.3">
<c r="B2" t="s">
<v>0</v>
</c>
</row>
<row r="3" spans="2:6" x14ac:dyDescent="0.3">
<c r="C3" t="s">
<v>1</v>
</c>
</row>
<row r="4" spans="2:6" x14ac:dyDescent="0.3">
<c r="D4" t="s">
<v>2</v>
</c>
</row>
<row r="5" spans="2:6" x14ac:dyDescent="0.3">
<c r="E5" t="s">
<v>0</v></c>
</row>
<row r="6" spans="2:6" x14ac:dyDescent="0.3">
<c r="F6" t="s"><v>3</v>
</c></row>
</sheetData>
<pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/>
</worksheet>
Как мы видим, в структуре объектной модели нет никаких «пересечений». Строго говоря рабочая книга — это архив структурированных данных в формате XML. При этом в каждую «строку» входит «столбец», и в нём в свою очередь прописан номер значения данного столбца, по которому оно подтягивается из другого XML файла при открытии книги для экономии места за счёт отсутствия повторяющихся значений. Почему это важно. Если мы захотим написать какой-то обработчик таких файлов, который будет напрямую редактировать данные в этих XML, то ориентироваться надо на такую модель и структуру данных. И правильное определение будет примерно таким: ячейка — это объект внутри столбца, который в свою очередь находится внутри строки в файле xml, в котором хранятся данные о содержимом листа.
Способы обращения к ячейкам
Выбор и активация
Почти во всех случаях можно и стоит избегать использования методов Select и Activate. На это есть две причины:
- Это лишь имитация действий пользователя, которая замедляет выполнение программы. Работать с объектами книги можно напрямую без использования методов Select и Activate.
- Это усложняет код и может приводить к неожиданным последствиям. Каждый раз перед использованием Select необходимо помнить, какие ещё объекты были выбраны до этого и не забывать при необходимости снимать выбор. Либо, например, в случае использования метода Select в самом начале программы может быть выбрано два листа вместо одного потому что пользователь запустил программу, выбрав другой лист.
Можно выбирать и активировать книги, листы, ячейки, фигуры, диаграммы, срезы, таблицы и т.д.
Отменить выбор ячеек можно методом Unselect:
Selection.Unselect
Отличие выбора от активации — активировать можно только один объект из раннее выбранных. Выбрать можно несколько объектов.
Если вы записали и редактируете код макроса, то лучше всего заменить Select и Activate на конструкцию With … End With. Например, предположим, что мы записали вот такой макрос:
Sub Macro1()
' Macro1 Macro
Range("F4:F10,H6:H10").Select 'выбрали два несмежных диапазона зажав ctrl
Range("H6").Activate 'показывает только то, что я начал выбирать второй диапазон с этой ячейки (она осталась белой). Это действие ни на что не влияет
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535 'залили желтым цветом, нажав на кнопку заливки на верхней панели
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End Sub
Почему макрос записался таким неэффективным образом? Потому что в каждый момент времени (в каждой строке) программа не знает, что вы будете делать дальше. Поэтому в записи выбор ячеек и действия с ними — это два отдельных действия. Этот код лучше всего оптимизировать (особенно если вы хотите скопировать его внутрь какого-нибудь цикла, который должен будет исполняться много раз и перебирать много объектов). Например, так:
Sub Macro11()
'
' Macro1 Macro
Range("F4:F10,H6:H10").Select '1. смотрим, что за объект выбран (что идёт до .Select)
Range("H6").Activate
With Selection.Interior '2. понимаем, что у выбранного объекта есть свойство interior, с которым далее идёт работа
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End Sub
Sub Optimized_Macro()
With Range("F4:F10,H6:H10").Interior '3. переносим объект напрямую в конструкцию With вместо Selection
' ////// Здесь я для надёжности прописал бы ещё Thisworkbook.Sheet("ИмяЛиста") перед Range,
' ////// чтобы минимизировать риск любых случайных изменений других листов и книг
' ////// With Thisworkbook.Sheet("ИмяЛиста").Range("F4:F10,H6:H10").Interior
.Pattern = xlSolid '4. полностью копируем всё, что было записано рекордером внутрь блока with
.PatternColorIndex = xlAutomatic
.Color = 55555 '5. здесь я поменял цвет на зеленый, чтобы было видно, работает ли код при поочерёдном запуске двух макросов
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End Sub
Пример сценария, когда использование Select и Activate оправдано:
Допустим, мы хотим, чтобы во время исполнения программы мы одновременно изменяли несколько листов одним действием и пользователь видел какой-то определённый лист. Это можно сделать примерно так:
Sub Select_Activate_is_OK()
Thisworkbook.Worksheets(Array("Sheet1", "Sheet3")).Select 'Выбираем несколько листов по именам
Thisworkbook.Worksheets("Sheet3").Activate 'Показываем пользователю третий лист
'Далее все действия с выбранными ячейками через Select будут одновременно вносить изменения в оба выбранных листа
'Допустим, что тут мы решили покрасить те же два диапазона:
Range("F4:F10,H6:H10").Select
Range("H6").Activate
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End Sub
Единственной причиной использовать этот код по моему мнению может быть желание зачем-то показать пользователю определённую страницу книги в какой-то момент исполнения программы. С точки зрения обработки объектов, опять же, эти действия лишние.
Получение и изменение значений ячеек
Значение ячеек можно получать/изменять с помощью свойства value.
'Если нужно прочитать / записать значение ячейки, то используется свойство Value
a = ThisWorkbook.Sheets("Sheet1").Cells (1,1).Value 'записать значение ячейки А1 листа "Sheet1" в переменную "a"
ThisWorkbook.Sheets("Sheet1").Cells (1,1).Value = 1 'задать значение ячейки А1 (первый ряд, первый столбец) листа "Sheet1"
'Если нужно прочитать текст как есть (с форматированием), то можно использовать свойство .text:
ThisWorkbook.Sheets("Sheet1").Cells (1,1).Text = "1"
a = ThisWorkbook.Sheets("Sheet1").Cells (1,1).Text
'Когда проявится разница:
'Например, если мы считываем дату в формате "31 декабря 2021 г.", хранящуюся как дата
a = ThisWorkbook.Sheets("Sheet1").Cells (1,1).Value 'эапишет как "31.12.2021"
a = ThisWorkbook.Sheets("Sheet1").Cells (1,1).Text 'запишет как "31 декабря 2021 г."
Ячейки открытой книги
К ячейкам можно обращаться:
'В книге, в которой хранится макрос (на каком-то из листов, либо в отдельном модуле или форме)
ThisWorkbook.Sheets("Sheet1").Cells(1,1).Value 'По номерам строки и столбца
ThisWorkbook.Sheets("Sheet1").Cells(1,"A").Value 'По номерам строки и букве столбца
ThisWorkbook.Sheets("Sheet1").Range("A1").Value 'По адресу - вариант 1
ThisWorkbook.Sheets("Sheet1").[A1].Value 'По адресу - вариант 2
ThisWorkbook.Sheets("Sheet1").Range("CellName").Value 'По имени ячейки (для этого ей предварительно нужно его присвоить)
'Те же действия, но с использованием полного названия рабочей книги (книга должна быть открыта)
Workbooks("workbook.xlsm").Sheets("Sheet1").Cells(1,1).Value 'По номерам строки и столбца
Workbooks("workbook.xlsm").Sheets("Sheet1").Cells(1,"A").Value 'По номерам строки и букве столбца
Workbooks("workbook.xlsm").Sheets("Sheet1").Range("A1").Value 'По адресу - вариант 1
Workbooks("workbook.xlsm").Sheets("Sheet1").[A1].Value 'По адресу - вариант 2
Workbooks("workbook.xlsm").Sheets("Sheet1").Range("CellName").Value 'По имени ячейки (для этого ей предварительно нужно его присвоить)
Ячейки закрытой книги
Если нужно достать или изменить данные в другой закрытой книге, то необходимо прописать открытие и закрытие книги. Непосредственно работать с закрытой книгой не получится, потому что данные в ней хранятся отдельно от структуры и при открытии Excel каждый раз производит расстановку значений по соответствующим «слотам» в структуре. Подробнее о том, как хранятся данные в xlsx см выше.
Workbooks.Open Filename:="С:closed_workbook.xlsx" 'открыть книгу (она становится активной)
a = ActiveWorkbook.Sheets("Sheet1").Cells(1,1).Value 'достать значение ячейки 1,1
ActiveWorkbook.Close False 'закрыть книгу (False => без сохранения)
Скачать пример, в котором можно посмотреть, как доставать и как записывать значения в закрытую книгу.
Код из файла:
Option Explicit
Sub get_value_from_closed_wb() 'достать значение из закрытой книги
Dim a, wb_path, wsh As String
wb_path = ThisWorkbook.Sheets("Sheet1").Cells(2, 3).Value 'get path to workbook from sheet1
wsh = ThisWorkbook.Sheets("Sheet1").Cells(3, 3).Value
Workbooks.Open Filename:=wb_path
a = ActiveWorkbook.Sheets(wsh).Cells(3, 3).Value
ActiveWorkbook.Close False
ThisWorkbook.Sheets("Sheet1").Cells(4, 3).Value = a
End Sub
Sub record_value_to_closed_wb() 'записать значение в закрытую книгу
Dim wb_path, b, wsh As String
wsh = ThisWorkbook.Sheets("Sheet1").Cells(3, 3).Value
wb_path = ThisWorkbook.Sheets("Sheet1").Cells(2, 3).Value 'get path to workbook from sheet1
b = ThisWorkbook.Sheets("Sheet1").Cells(5, 3).Value 'get value to record in the target workbook
Workbooks.Open Filename:=wb_path
ActiveWorkbook.Sheets(wsh).Cells(4, 4).Value = b 'add new value to cell D4 of the target workbook
ActiveWorkbook.Close True
End Sub
Перебор ячеек
Перебор в произвольном диапазоне
Скачать файл со всеми примерами
Пройтись по всем ячейкам в нужном диапазоне можно разными способами. Основные:
- Цикл For Each. Пример:
Sub iterate_over_cells() For Each c In ThisWorkbook.Sheets("Sheet1").Range("B2:D4").Cells MsgBox (c) Next c End Sub
Этот цикл выведет в виде сообщений значения ячеек в диапазоне B2:D4 по порядку по строкам слева направо и по столбцам — сверху вниз. Данный способ можно использовать для действий, в который вам не важны номера ячеек (закрашивание, изменение форматирования, пересчёт чего-то и т.д.).
- Ту же задачу можно решить с помощью двух вложенных циклов — внешний будет перебирать ряды, а вложенный — ячейки в рядах. Этот способ я использую чаще всего, потому что он позволяет получить больше контроля над исполнением: на каждой итерации цикла нам доступны координаты ячеек. Для перебора всех ячеек на листе этим методом потребуется найти последнюю заполненную ячейку. Пример кода:
Sub iterate_over_cells() Dim cl, rw As Integer Dim x As Variant 'перебор области 3x3 For rw = 1 To 3 ' цикл для перебора рядов 1-3 For cl = 1 To 3 'цикл для перебора столбцов 1-3 x = ThisWorkbook.Sheets("Sheet1").Cells(rw + 1, cl + 1).Value MsgBox (x) Next cl Next rw 'перебор всех ячеек на листе. Последняя ячейка определена с помощью UsedRange 'LastRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1 'LastCol = ActiveSheet.UsedRange.Column + ActiveSheet.UsedRange.Columns.Count - 1 'For rw = 1 To LastRow 'цикл перебора всех рядов ' For cl = 1 To LastCol 'цикл для перебора всех столбцов ' Действия ' Next cl 'Next rw End Sub
- Если нужно перебрать все ячейки в выделенном диапазоне на активном листе, то код будет выглядеть так:
Sub iterate_cell_by_cell_over_selection() Dim ActSheet As Worksheet Dim SelRange As Range Dim cell As Range Set ActSheet = ActiveSheet Set SelRange = Selection 'if we want to do it in every cell of the selected range For Each cell In Selection MsgBox (cell.Value) Next cell End Sub
Данный метод подходит для интерактивных макросов, которые выполняют действия над выбранными пользователем областями.
- Перебор ячеек в ряду
Sub iterate_cells_in_row() Dim i, RowNum, StartCell As Long RowNum = 3 'какой ряд StartCell = 0 ' номер начальной ячейки (минус 1, т.к. в цикле мы прибавляем i) For i = 1 To 10 ' 10 ячеек в выбранном ряду ThisWorkbook.Sheets("Sheet1").Cells(RowNum, i + StartCell).Value = i '(i + StartCell) добавляет 1 к номеру столбца при каждом повторении Next i End Sub
- Перебор ячеек в столбце
Sub iterate_cells_in_column() Dim i, ColNum, StartCell As Long ColNum = 3 'какой столбец StartCell = 0 ' номер начальной ячейки (минус 1, т.к. в цикле мы прибавляем i) For i = 1 To 10 ' 10 ячеек ThisWorkbook.Sheets("Sheet1").Cells(i + StartCell, ColNum).Value = i ' (i + StartCell) добавляет 1 к номеру ряда при каждом повторении Next i End Sub
Свойства и методы ячеек
Имя ячейки
Присвоить новое имя можно так:
Thisworkbook.Sheets(1).Cells(1,1).name = "Новое_Имя"
Для того, чтобы сменить имя ячейки нужно сначала удалить существующее имя, а затем присвоить новое. Удалить имя можно так:
ActiveWorkbook.Names("Старое_Имя").Delete
Пример кода для переименования ячеек:
Sub rename_cell()
old_name = "Cell_Old_Name"
new_name = "Cell_New_Name"
ActiveWorkbook.Names(old_name).Delete
ThisWorkbook.Sheets(1).Cells(2, 1).Name = new_name
End Sub
Sub rename_cell_reverse()
old_name = "Cell_New_Name"
new_name = "Cell_Old_Name"
ActiveWorkbook.Names(old_name).Delete
ThisWorkbook.Sheets(1).Cells(2, 1).Name = new_name
End Sub
Адрес ячейки
Sub get_cell_address() ' вывести адрес ячейки в формате буква столбца, номер ряда
'$A$1 style
txt_address = ThisWorkbook.Sheets(1).Cells(3, 2).Address
MsgBox (txt_address)
End Sub
Sub get_cell_address_R1C1()' получить адрес столбца в формате номер ряда, номер столбца
'R1C1 style
txt_address = ThisWorkbook.Sheets(1).Cells(3, 2).Address(ReferenceStyle:=xlR1C1)
MsgBox (txt_address)
End Sub
'пример функции, которая принимает 2 аргумента: название именованного диапазона и тип желаемого адреса
'(1- тип $A$1 2- R1C1 - номер ряда, столбца)
Function get_cell_address_by_name(str As String, address_type As Integer)
'$A$1 style
Select Case address_type
Case 1
txt_address = Range(str).Address
Case 2
txt_address = Range(str).Address(ReferenceStyle:=xlR1C1)
Case Else
txt_address = "Wrong address type selected. 1,2 available"
End Select
get_cell_address_by_name = txt_address
End Function
'перед запуском нужно убедиться, что в книге есть диапазон с названием,
'адрес которого мы хотим получить, иначе будет ошибка
Sub test_function() 'запустите эту программу, чтобы увидеть, как работает функция
x = get_cell_address_by_name("MyValue", 2)
MsgBox (x)
End Sub
Размеры ячейки
Ширина и длина ячейки в VBA меняется, например, так:
Sub change_size()
Dim x, y As Integer
Dim w, h As Double
'получить координаты целевой ячейки
x = ThisWorkbook.Sheets("Sheet1").Cells(2, 2).Value
y = ThisWorkbook.Sheets("Sheet1").Cells(3, 2).Value
'получить желаемую ширину и высоту ячейки
w = ThisWorkbook.Sheets("Sheet1").Cells(6, 2).Value
h = ThisWorkbook.Sheets("Sheet1").Cells(7, 2).Value
'сменить высоту и ширину ячейки с координатами x,y
ThisWorkbook.Sheets("Sheet1").Cells(x, y).RowHeight = h
ThisWorkbook.Sheets("Sheet1").Cells(x, y).ColumnWidth = w
End Sub
Прочитать значения ширины и высоты ячеек можно двумя способами (однако результаты будут в разных единицах измерения). Если написать просто Cells(x,y).Width или Cells(x,y).Height, то будет получен результат в pt (привязка к размеру шрифта).
Sub get_size()
Dim x, y As Integer
'получить координаты ячейки, с которой мы будем работать
x = ThisWorkbook.Sheets("Sheet1").Cells(2, 2).Value
y = ThisWorkbook.Sheets("Sheet1").Cells(3, 2).Value
'получить длину и ширину выбранной ячейки в тех же единицах измерения, в которых мы их задавали
ThisWorkbook.Sheets("Sheet1").Cells(2, 6).Value = ThisWorkbook.Sheets("Sheet1").Cells(x, y).ColumnWidth
ThisWorkbook.Sheets("Sheet1").Cells(3, 6).Value = ThisWorkbook.Sheets("Sheet1").Cells(x, y).RowHeight
'получить длину и ширину с помощью свойств ячейки (только для чтения) в поинтах (pt)
ThisWorkbook.Sheets("Sheet1").Cells(7, 9).Value = ThisWorkbook.Sheets("Sheet1").Cells(x, y).Width
ThisWorkbook.Sheets("Sheet1").Cells(8, 9).Value = ThisWorkbook.Sheets("Sheet1").Cells(x, y).Height
End Sub
Скачать файл с примерами изменения и чтения размера ячеек
Запуск макроса активацией ячейки
Для запуска кода VBA при активации ячейки необходимо вставить в код листа нечто подобное:
3 важных момента, чтобы это работало:
1. Этот код должен быть вставлен в код листа (здесь контролируется диапазон D4)
2-3. Программа, ответственная за запуск кода при выборе ячейки, должна называться Worksheet_SelectionChange и должна принимать значение переменной Target, относящейся к триггеру SelectionChange. Другие доступные триггеры можно посмотреть в правом верхнем углу (2).
Скачать файл с базовым примером (как на картинке)
Скачать файл с расширенным примером (код ниже)
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' имеем в виду, что триггер SelectionChange будет запускать эту Sub после каждого клика мышью (после каждого клика будет проверяться:
'1. количество выделенных ячеек и
'2. не пересекается ли выбранный диапазон с заданным в этой программе диапазоном.
' поэтому в эту программу не стоит без необходимости писать никаких других тяжелых операций
If Selection.Count = 1 Then 'запускаем программу только если выбрано не более 1 ячейки
'вариант модификации - брать адрес ячейки из другой ячейки:
'Dim CellName as String
'CellName = Activesheet.Cells(1,1).value 'брать текстовое имя контролируемой ячейки из A1 (должно быть в формате Буква столбца + номер строки)
'If Not Intersect(Range(CellName), Target) Is Nothing Then
'для работы этой модификации следующую строку надо закомментировать/удалить
If Not Intersect(Range("D4"), Target) Is Nothing Then
'если заданный (D4) и выбранный диапазон пересекаются
'(пересечение диапазонов НЕ равно Nothing)
'можно прописать диапазон из нескольких ячеек:
'If Not Intersect(Range("D4:E10"), Target) Is Nothing Then
'можно прописать несколько диапазонов:
'If Not Intersect(Range("D4:E10"), Target) Is Nothing or Not Intersect(Range("A4:A10"), Target) Is Nothing Then
Call program 'выполняем программу
End If
End If
End Sub
Sub program()
MsgBox ("Program Is running") 'здесь пишем код того, что произойдёт при выборе нужной ячейки
End Sub