Абсолютные и относительные ссылки в Excel, чем они отличаются, смешанная адресация, как закрепить ссылку на ячейку в Эксель
Каждый человек работающий в Excel встречался с понятием адресаций или использовал ссылки в своих документах. Благодаря своим возможностям табличный процессор Эксель, входящий в состав стандартного пакета MS Office, обеспечивает надежное хранение и быструю обработку больших массивов данных. Частью этого функционала являются ссылки.
Типы адресаций
Ссылки в Excel передают в себе адрес определенных ячеек или связанных диапазонов. На одном рабочем листе одновременно могут находиться более 2 миллиардов ячеек, образующих рабочую область таблицы. Адрес активной определяют название столбца и строки, в пересечении которых и расположена ячейка. Например, С8. Это означает, что данные находятся в восьмой строке и третьем столбце под названием C. Ссылка на Range (диапазон) задается через адреса двух его углов (верхний левый и нижний правый) Для примера, B2:C6.
В Excel есть четыре типа ссылок, каждый из которых предназначен для своих операций — относительные, смешанные, абсолютные и ссылки на отдельные листы.
Относительная адресация
Использование относительных ссылок может помочь сэкономить много часов монотонной работы связанной с копированием. По умолчанию, любые созданные ссылки относительны. При копировании значений и расчетов из разных ячеек, адреса также меняются. Это главным образом отличает их от абсолютных, остающихся неизменными при копировании.
Абсолютная адресация
Иногда происходит так, что изменять адрес при растягивании формулы не нужно. Для этого подходят абсолютные ссылки в Excel. С их помощью могут быть реализованы константы и значения, которые не должны изменяться при любых условиях. Создается такая ссылка путем добавления знака американского доллара ($). Его необходимо установить перед адресом, как строки, так и столбца.
Смешанная адресация
В случае, когда знак абсолютной адресации фиксирует значение только столбцов или строк, ссылка стает смешанной. Она обладает свойствами двух других видов, то есть может копировать или ограничивать адрес ячеек по столбцам или строкам. Это самый запутанный тип адресации в Excel.
Использование относительных ссылок
Для того чтобы создать относительную адресацию в формуле, необходимо в любой свободной ячейке напечатать знак «=», без пробела вписать адрес или кликнуть по той ячейке, которая должна быть использована в вычислениях. Пример создания относительной ссылки:
- Кликаем на D2:
- Для подсчета «Итого» необходимо умножить данные из столбцов B и C, т.е вписываем формулу =B2*C2.
- Нажимаем Ввод (Enter), после чего формула будет вычислена и результат запишется в D2.
- Значение из D2 можно растянуть на все строки. Делается это с помощью функции автозаполнения, которая представляет собой квадрат, расположенный справа внизу в выделенной ячейке. «Протягиваем» маркер с помощью мыши только до пятой строки. После нее данных нет, и в последующих ячейках будут нули.
Часто при создании такого рода адресаций появляются ошибки, поскольку пользователи забывают об относительности адреса ячейки. Используя в формуле какую-либо константу, ее просто добавляют без фиксирования символом $. Это приводит к таким ошибкам как «#ПУСТО!», «#ДЕЛ/0» и другим. Иногда бывает так, что нужно растянуть формулу с зафиксированной строкой или столбцом. В таких случаях смешанная адресация может сэкономить время.
Использование абсолютных ссылок
С помощью одно простого знака $ ссылка стандартного типа превращается в абсолютную, т.е. ссылка закрепляется за ячейкой. Поставьте доллар перед строкой или столбцом в нужном адресе или выделите его и нажмите клавишу F4 для автоматического проставления знака в формуле. Вышеприведенный пример с использованием абсолютной адресации будет выглядеть следующим образом:
- Кликаем на D2.
- Вписываем уже знакомую формулу =B2*C2, выделяем ее и нажимаем F4.
- Нажимаем Enter и получаем то же самое.
- Однако теперь протягивая маркер, будет получаться везде одно и то же значение равное 4,00 р., т.е. жестко зафиксированные адреса.
В этом случае можно создать смешанную ссылку, например =B2*$C$2 будет означать, что С2 будет всегда 4, независимо от того, куда будет перемещена формула, а В2 будет изменяться.
Сквозная ссылка через лист
Использование данных из второго листа возможно благодаря реализованной сквозной адресации. Для использования значения, расположенного на другом листе, нужно после «=» в поле вписать название листа, восклицательный знак и адрес ячейки, которая содержит это значение. Например, «=’Лист2’!A1». Можно и просто после «=» перейти на следующий лист, выбрать необходимую ячейку, вернуться обратно и нажать Ввод.
Использование относительных ссылок в макросах
Хитрости »
19 Февраль 2021 Дмитрий 6094 просмотров
Основные понятия (26) Сводные таблицы и анализ данных (10) Графики и диаграммы (5) Работа с VB проектом (12) Power BI и Power Query (22) |
Условное форматирование (5) Списки и диапазоны (5) Макросы(VBA процедуры) (68) Разное (43) Баги и глюки Excel (4) |
Если Вы уже записывали макросы обработки таблиц, то наверняка сталкивались с ситуацией, когда макросом в таблицу добавляется столбец с формулами, которые потом необходимо распространить на все строки. Но если количество строк в таблице изменяется, то макрос работает некорректно: если строк стало больше, то формулы проставляются не на все строки, а если строк стало меньше – то появляются строки с лишними формулами.
К примеру, возьмем таблицу такого вида:
В конце таблицы нам необходимо добавить столбец «Стоимость», прописав в нем нехитрую формулу перемножения количества на цену:
=F2*G2
Перед записью макроса выделяем ячейку h2. При обычной записи макроса наши шаги такие:
1. Выделили I1
2. Записали в неё заголовок «Стоимость»
3. Перешли в I2
4. Записали формулу: =F2*G2
5. Распространили формулу до конца таблицы (через автозаполнение или путем копирования ячейки с формулой и вставки в остальные ячейки)
Макрос работает отлично. Пока количество строк не изменится. Если при записи макроса в таблице было 319 строк, а потом добавилось еще 20, то записанный макрос создаст формулу только в первых 319 строках.
Как выйти из такой ситуации? Все не слишком сложно. В группе кнопок код на вкладке Разработчик есть кнопка «Относительные ссылки». Если нажать её до записи макроса(или во время), то ссылки на ячейки будут уже запоминаться не как конкретный адрес, а как смещение относительно последней выделенной ячейки.
Например, запишем два простых макроса, которые будут делать одно и то же действие – перемещение вниз таблицы и выделение ячеек от нижней до верхней. Только первый макрос будет записан обычным способом, а перед записью второго мы нажмем кнопку «Относительные ссылки». Наши действия будут следующими (одинаковыми для обоих макросов):
1. До записи макроса выделяем ячейку I2
2. Начинаем запись макроса
3. Выделяем ячейку h3
4. Комбинацией клавиш Ctrl+↓(стрелка вниз) перемещаемся вниз таблицы
5. Стрелка вправо (т.е. выделяем последнюю ячейку в столбце I)
6. Комбинацией клавиш Ctrl+Shift+↑(стрелка вверх) выделяем столбец I от последней ячейки до первой
7. Завершаем запись макроса
Теперь можно посмотреть на код обоих макросов:
Отличия очевидны: в первом используется обращение к ячейкам по их конкретным адресам. Во втором же все действия происходят относительно последней выделенной ячейки(на Range(«A1») не обращаем внимания – это из другой оперы и если их удалить ничего не изменится). Из этого можно сделать вывод, что для создания гибких универсальных макросов с использованием относительных ссылок необходимо как можно меньше использовать мышку и максимально стараться применять горячие клавиши. Попробую пояснить почему: когда мы применяем то же автозаполнение (наведение курсора мыши на нижний правый угол ячейки и протягивание вниз или двойной щелчок левой кнопкой мыши) – оно применяется к конкретно определенному количеству ячеек. Т.е. даже относительные ссылки не помогут заполнить его формулами, как того требует наша изначальная задача.
1. Перед записью макроса выделяем ячейку h2
2. Начали запись макроса
3. Нажимаем кнопку Относительные ссылки (если она еще не нажата)
4. Выделяем I1
5. Записываем в неё заголовок «Стоимость»
6. Переходим в I2
7. Записываем в I2 формулу: =F2*G2
8. Комбинацией клавиш Ctrl+C(или при помощи контекстного меню мыши) копируем ячейку с формулой
9. Стрелкой вправо перемещаемся в ячейку h3
10. Комбинацией клавиш Ctrl+↓(стрелка вниз) перемещаемся вниз таблицы
11. Стрелка вправо (т.е. выделяем последнюю ячейку в столбце I)
12. Комбинацией клавиш Ctrl+Shift+↑(стрелка вверх) выделяем столбец I от последней ячейки до первой
13. Комбинацией клавиш Ctrl+V вставляем скопированную формулу
14. Нажимаем Esc для сброса буфера обмена
15. Запись макроса можно завершить
Если теперь попробовать применить такой макрос к таблице, у которой строк больше или меньше, чем было при записи макроса – все пройдет идеально. Макрос создаст столбец и запишет в нем формулу только на нужное количество строк.
Нам достаточно будет выделить ячейку заголовка последнего столбца(K5) и запустить наш макрос. Он без проблем добавит столбец с формулой в нужном месте и на все строки. Макрос же без использования относительных ссылок в такой ситуации спасует по полной: он создаст формулы начиная с ячейки I2 и до заголовка, только испортив таблицу и не сделав ничего полезного.
Так же хочу дополнить, что Относительные ссылки играют роль исключительно во время записи макроса. Во время воспроизведения совершенно не важно включены они или нет. Плюс можно(а иногда и нужно) комбинировать во время записи макросов режим относительных ссылок с обычным режимом. Например, когда столбцов в таблице у нас всегда одинаковое количество и таблица всегда в одном месте, и столбец мы добавляем всегда в столбец I. Но формулы при этом надо протягивать на разное количество строк. Тогда можно начать запись макроса обычным режимом, а после того, как записали название столбца — включить режим относительных ссылок, чтобы определение последней ячейки таблицы не зависело от количества строк в этой таблице.
Статья помогла? Поделись ссылкой с друзьями!
ВидеоурокиПоиск по меткам
Accessapple watchMultexPower Query и Power BIVBA управление кодамиБесплатные надстройкиДата и времяЗапискиИПНадстройкиПечатьПолитика КонфиденциальностиПочтаПрограммыРабота с приложениямиРазработка приложенийРосстатТренинги и вебинарыФинансовыеФорматированиеФункции Excelакции MulTExссылкистатистика
Простые относительные ссылки во внешних ссылках (Microsoft Excel)
Автор Allen Wyatt (последнее обновление 14 мая 2022 г.
способ иметь ссылки на информацию во внешней книге с использованием относительных ссылок. Например, если есть ссылка на ячейку в другой книге, для нее автоматически устанавливается явный путь, например c:\fullpath\otherfile.xls. Для целей Майка было бы лучше, если бы это был не явный путь, а просто другой файл.xls. Таким образом, он мог перемещать файлы и иметь ссылку на внешний файл, который находится относительно того, где находится моя текущая книга.
В Excel это невозможно сделать. Ссылки создаются при сохранении связанного файла. Когда открыты обе книги (та, на которую ссылается ссылка, и та, на которую ссылается ссылка), ссылки ссылаются только на имя файла. Полный путь сохраняется только при сохранении связанного файла.
Если вы хотите изменить расположение файлов, просто откройте оба файла, а затем используйте команду «Сохранить как», чтобы сохранить файлы в нужном вам месте. Excel обновит ссылки на нужные места. Однако, если вы перемещаете файлы за пределы Excel, ссылки могут легко испортиться. (Некоторые люди сообщают об успехе, когда исходная и целевая книги всегда находятся в одной и той же папке, но это кажется более упрощенным, чем то, что ищет Майк.)
ExcelTips — ваш источник экономичного обучения работе с Microsoft Excel. Этот совет (7921) относится к Microsoft Excel 97, 2000, 2002 и 2003. всемирно признанный автор. Он является президентом Sharon Parq Associates, компании, предоставляющей компьютерные и издательские услуги. Узнать больше об Аллене…
Экономьте время и повышайте производительность Excel! Автоматизируйте практически любую рутинную задачу и сэкономьте себе часы, дни, а может быть, и недели. Затем узнайте, как заставить Excel делать то, что вы считали просто невозможным! Освоение расширенных макросов Excel никогда не было проще. Ознакомьтесь с Excel 2010 VBA и макросами уже сегодня!
Подписаться
БЕСПЛАТНАЯ УСЛУГА: Получайте подобные советы каждую неделю в ExcelTips, бесплатном информационном бюллетене по продуктивности. Введите свой адрес и нажмите «Подписаться».
Просмотреть последний информационный бюллетень.
(Ваш адрес электронной почты никому никогда не передается.)
Комментарии
Этот сайт
Есть версия Excel, которая использует интерфейс меню (Excel 97, Excel 2000, Excel 2002 или Excel 2003)? Этот сайт для вас! Если вы использовать более позднюю версию Excel, посетите наш сайт ExcelTips посвящен ленточному интерфейсу.
Новейшие советы
Подписаться
БЕСПЛАТНАЯ СЛУЖБА: Получайте подобные советы каждую неделю в ExcelTips, бесплатном информационном бюллетене по продуктивности. Введите свой адрес и нажмите «Подписаться».
(Ваш адрес электронной почты никому и никогда не передается.)
Просмотр самого последнего информационного бюллетеня.
Ссылки и обмен
- Советы по Excel: часто задаваемые вопросы
- Вопросы или комментарии
- Отличные идеи брендинга
- Бесплатные календари
Copyright © 2023 Sharon Parq Associates, Inc.
Как сделать относительную ссылку на другую книгу в Excel?
спросил
Изменено 2 года, 8 месяцев назад
Просмотрено 145 тысяч раз
Я создаю лист для расчета цен. Лист должен иметь ссылку на несколько других рабочих книг, чтобы получить цены на различные компоненты. Это отлично работает на моем компьютере, но когда я перемещаю их на сервер или другой компьютер, он не может найти ссылки.
Моя папка имеет следующую структуру:
Папка |-- цены.xlsx |-- Фиксированные компоненты | |-- КомпонентыA.xlsx | +-- КомпонентыB.xlsx | +-- Переменные компоненты |-- КомпонентыC.xlsx +-- КомпонентыD.xlsx
price.xlsx
— это основной лист, который ссылается на другие листы. На моем компьютере он создает ссылки с абсолютным путем, поэтому, когда я копирую файлы, путь остается фиксированным для моей машины, а не ссылается на файлы на другом ПК.
Есть ли способ сделать ссылки относительными, чтобы я мог поместить на основной лист что-то вроде ='\Variable Components\[ComponentsC.xlsx]Sheet1'!A1
. Я бы не хотел использовать VBA для этого, поскольку люди не склонны доверять макросам, а затем жалуются, что функции не работают.
- ссылка
- Excel
3
Единственное решение, которое я видел для организации внешних файлов в подпапки, требовало использования VBA для разрешения полного пути к внешнему файлу в формулах. Вот ссылка на сайт с несколькими примерами, которые использовали другие:
http://www.teachexcel.com/excel-help/excel-how-to.php?i=415651
В качестве альтернативы, если вы можете поместить все файлы в одну папку, а не делить их на папки, то Excel будет разрешать внешние ссылки, не требуя использования VBA, даже если вы переместите файлы в сетевое расположение. Затем ваши формулы становятся просто = '[ComponentsC. xlsx] Sheet1'! A1
без имен папок для перемещения.
4
У меня была аналогичная проблема, которую я решил, используя следующую последовательность:
используйте функцию
CELL("filename")
для получения полного пути к текущему листу текущего файла.Используйте функцию
SEARCH()
, чтобы найти начало строки [FileName]SheetName вашего текущего файла Excel и листа.используйте функцию
LEFT
для извлечения полного пути к каталогу, содержащему ваш текущий файл.Объедините имя пути к каталогу, найденное на шаге 3, с именем файла, именем рабочего листа и ссылкой на ячейку, к которой вы хотите получить доступ.
используйте функцию
INDIRECT()
для доступа кCellPathName
, созданному на шаге 4.
Примечание. Эти же шаги можно использовать для доступа к ячейкам в файлах, имена которых создаются динамически. На шаге №4 используйте текстовую строку, которая динамически создается из содержимого ячеек, текущей даты или времени и т. д. и т. д.
Пример ссылки на ячейку (с каждой частью, собранной отдельно), которая включает все эти шаги:
= ДВССЫЛ ("'" & ЛЕВЫЙ (ЯЧЕЙКА ("имя файла"), ПОИСК ("[MyFileName]MySheetName", CELL( "filename")) - 1) & "[" & "OtherFileName" & "]" & "OtherSheetName" & "'!" & "$OtherColumn$OtherRow" & "'")
Обратите внимание, что LibreOffice использует несколько иной синтаксис CellPatnName, как в следующем примере:
= ДВССЫЛ(ЛЕВАЯ(ЯЧЕЙКА("имя файла"),ПОИСК("[MyFileName]MySheetName",CELL("имя файла")) - 1 ) & "ИмяДругогоФайла" & "'#$" & "ИмяДругогоЛиста" & "." & "$OtherColumn$OtherRow")
проще и короче через непрямое: INDIRECT("..\..\..\..\Supply\SU\SU.ods'#$Data.$A$2:$AC$200")
однако косвенный () имеет недостатки производительности, если много ссылок в книге
Я пропускаю конструкцию вроде: ['. ./Data.ods']#Sheet1.A1
в LibreOffice. Намерение здесь: если я создам кучу основных книг и зависимых книг отчетов в ограниченном поддереве каталогов в исходной файловой системе, я могу заархивировать все поддерево каталога с полным пакетом книг и отправить его другому сотрудничающему лицу по электронной почте или около того. Он будет сохранен в каком-то другом абсолютном пути в целевой системе, но привязка снова работает в новом абсолютном пути, потому что он был закодирован относительно корня поддерева.
1
Использование функций =worksheetname() и =Indirect(), а также присвоение рабочим листам в родительском файле Excel имени файла Excel с внешней ссылкой. Каждый файл Excel с внешней ссылкой находился в своих папках с тем же именем. Эти подпапки были нужны только для большей ясности.
Я сделал следующее:-
|—-Столбец B—————-|—-Столбец C——— —-|
R2) Родительская папка ———> «C:\TEMP\Excel\»
R3) Имя подпапки —> =worksheetname()
R5) Полный путь —————> =»‘»&C2&C3&»[«&C3&». xlsx]Лист1 ‘!$A$1″
R7) Косвенная функция——> =INDIRECT(C5,TRUE)
В основном файле, я сказал, 5 рабочих листов, помеченных как Ext-1, Ext-2, Ext- 3, Вн-4, Вн-5. Скопируйте приведенные выше формулы на все пять рабочих листов. Открыты все файлы Excel с соответствующими именами в фоновом режиме. По какой-то причине результаты не вычислялись автоматически, поэтому приходилось принудительно вносить изменения, редактируя любую ячейку. Volla, значение в ячейке A1 каждого файла Excel с внешней ссылкой находилось в основном файле.
1
Предположим, вы подключаетесь к общему диску, например к диску S? Если это так, другие люди могли сопоставить диск по-другому. Вероятно, вам нужно использовать «официальное» имя диска //euhkj002/forecasts/bla bla. Вместо S// в вашей ссылке
В Excel есть способ вставить относительную ссылку на файл или каталог. Вы можете попробовать ввести в ячейку Excel: =HYPERLINK(«.