Подменить from в excel

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

Ссылки в Excel чаще всего используются вместе с такими функциями, как ВПР, для извлечения информации из другой книги. Это может быть специальная ссылка, содержащая адрес не только ячейки, но и книги, в которой находятся данные. В результате эта ссылка выглядит так: = VLOOKUP (A2; ‘[Sales 2018.xlsx] Report’! $ A: $ F; 4; 0). Или, для упрощения представления, представьте адрес в следующей форме: = ‘Report [Sales 2018.xlsx]’! $ A1. Давайте посмотрим на каждый из соединительных элементов этого типа:

  1. [Продажи 2018.xlsx]. Этот фрагмент содержит ссылку на файл, из которого вам нужно получить информацию. Его еще называют источником.
  2. Отношение. Мы использовали следующее имя, но это не обязательно. Этот блок содержит имя листа, на котором вы хотите найти информацию.
  3. $ A: $ F и $ A1 — это адрес ячейки или диапазона с данными, содержащимися в этом документе.

Фактически, процесс создания ссылки на внешний документ называется ссылкой. После регистрации адреса ячейки, содержащейся в другом файле, содержимое вкладки «Данные» изменяется. А именно: становится активной кнопка «Изменить ссылки», с помощью которой пользователь может изменять существующие ссылки.

Суть проблемы

Как правило, дополнительных сложностей в использовании подключений не возникает. Даже если есть ситуация, когда ячейки меняются, все ссылки обновляются автоматически. Но если вы уже переименуете саму книгу или переместите ее на другой адрес, Excel станет бессильным. Таким образом выдает следующее сообщение.

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

Как разорвать ссылки в Excel

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

Как разорвать связь в Эксель

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

  1. Откройте меню «Данные».
  2. Находим раздел «Подключения» и там — опцию «Изменить подключения».
  3. Затем нажмите «Отключить соединение».

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

Как разорвать связь со всеми книгами

Но если количество ссылок становится слишком большим, их удаление вручную может занять много времени. Решить эту проблему за один раз можно с помощью специального макроса. Он находится в надстройке VBA-Excel. Вам необходимо активировать его и перейти на одноименную вкладку. Будет раздел «Ссылки», в котором мы должны нажать кнопку «Разорвать все ссылки».

Как разорвать ссылки в Excel

Код на VBA

Если вы не можете активировать это дополнение, вы можете создать макрос самостоятельно. Для этого откройте редактор Visual Basic, нажав Alt + F11, и напишите следующие строки в поле ввода кода.

Sub UnlinkWorkBooks()

    Тусклый WbLink

    Тусклый я пока

    Выберите Case MsgBox («Все ссылки на другие книги будут удалены из этого файла, а формулы, которые ссылаются на другие книги, будут заменены значениями». & VbCrLf & «Вы уверены, что хотите продолжить?», 36, «Разорвать ссылку?»)

    Дело 7 «No

        Выйти ниже

    Конец выбора

    WbLinks = ActiveWorkbook.LinkSources (Тип: = xlLinkTypeExcelLinks)

    Если не пусто (WbLinks) Тогда

        Для i = 1 для UBound (WbLinks)

            ActiveWorkbook.BreakLink Имя: = WbLinks (i), Тип: = xlLinkTypeExcelLinks

        Следующий

    Другой

        MsgBox «В этом файле нет ссылок на другие книги.», 64, «Ссылки на другие книги»

    Конец, если

Конец подзаголовка

Как разорвать связи только в выделенном диапазоне

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

  1. Выберите набор данных, в который вы хотите внести изменения.
  2. Установите надстройку VBA-Excel, затем перейдите на соответствующую вкладку.
  3. Затем найдите меню «Ссылки» и нажмите кнопку «Разорвать ссылки в выбранных диапазонах».

Как разорвать ссылки в Excel

После этого все ссылки в выбранном наборе ячеек будут удалены.

Что делать, если связи не разрываются

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

  1. Во-первых, вам нужно проверить, содержится ли какая-либо информация в названных диапазонах. Для этого нажмите комбинацию клавиш Ctrl + F3 или откройте вкладку «Формулы» — «Диспетчер имен». Если имя файла полное, вам просто нужно его отредактировать или удалить совсем. Перед удалением именованных диапазонов вам необходимо скопировать файл в другое место, чтобы вы могли вернуться к исходной версии, если вы сделаете что-то неправильно.
  2. Если вы не можете решить проблему, удалив имена, вы можете проверить условное форматирование. Вы можете ссылаться на ячейки из другой таблицы в правилах условного форматирования. Для этого нужно найти соответствующий пункт на вкладке «Главная», затем нажать кнопку «Диспетчер файлов». Как разорвать ссылки в Excel
    Обычно Excel не предлагает возможности предоставить адрес других книг в условном форматировании, но это делается путем ссылки на именованный диапазон со ссылкой на другой файл. Обычно даже после удаления ссылки ссылка остается. Удалить такую ​​ссылку не составит труда, потому что она фактически не работает. Поэтому ничего плохого не произойдет, если вы его удалите.

Вы также можете использовать функцию проверки данных, чтобы увидеть, нет ли ненужных ссылок. Ссылки обычно остаются, если используется тип проверки данных «Список». Но что делать, если ячеек много? Неужели нужно постоянно проверять каждую из них? Очевидно нет. В конце концов, это займет много времени. Поэтому необходимо использовать специальный код, чтобы сохранить его значимым образом.
Явный вариант

‘—————————————————————————————

Автор: The_Prist (Дмитрий Щербаков)

‘Профессиональная разработка приложений MS Office любой сложности

‘Проведение обучающих курсов в MS Excel

https://www.excel-vba.ru

‘info@excel-vba.ru

WebMoney — R298726502453; Яндекс.Деньги — 41001332272872

‘Сфера:

‘—————————————————————————————

Sub FindErrLink()

    ‘вам нужно посмотреть ссылку Data — Изменить ссылки на исходный файл

    ‘и напишите здесь ключевые слова в нижнем регистре (часть имени файла)

    ‘звездочка просто заменяет любое количество символов, поэтому вам не важно точное имя

    Const sToFndLink $ = «* продажи за 2018 год*»

    Dim rr As Range, rc As Range, rres As Range, s$

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

    В случае ошибки Продолжить Далее

    Установите rr = ActiveSheet.UsedRange.SpecialCells (xlCellTypeAllValidation)

    Если rr ничего, тогда

        MsgBox «На активном листе нет ячеек с проверкой данных», vbInformation, «www.excel-vba.ru»

        Выйти ниже

    Конец, если

    При ошибке Перейти к 0

    ‘проверить каждую ячейку на наличие соединений

    Для каждого rc In rr

        ‘на всякий случай пропустим ошибки — это тоже может быть

        ‘но наши связи должны быть без них, и они обязательно будут найдены

        s = «»

        В случае ошибки Продолжить Далее

        s = rc.Convalida.Formula1

        При ошибке Перейти к 0

        ‘нашел — все собираем в отдельный ряд

        Если LCase (s) как sToFndLink, то

            Если ничего нет, то

                Установите rres = rc

            Другой

                Установить rres = Union (rc, rres)

            Конец, если

        Конец, если

    Следующий

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

    Если ничего нет, то

        rres.Select

‘rres.Interior.Color = vbRed’, если вам также нужно выделить цветом

    Конец, если

Конец подзаголовка

вам нужно создать стандартный модуль в редакторе макросов, а затем поместить туда этот текст. Далее вызываем окно макроса с помощью комбинации клавиш Alt + F8, затем выбираем наш макрос и нажимаем кнопку «Выполнить». При использовании этого кода необходимо учитывать несколько моментов:

  1. Прежде чем искать ссылку, которая больше не актуальна, вы должны сначала определить внешний вид ссылки, по которой она была создана. Для этого зайдите в меню «Данные» и найдите пункт «Редактировать ссылки». Далее нужно посмотреть имя файла и указать его в кавычках. Например, вот так: Const sToFndLink $ = «* 2018 продажи*»
  2. имя можно написать не полностью, а просто заменить ненужные символы звездочкой. И в кавычках пишите имя файла строчными буквами. В этом случае Excel найдет в конце все файлы, содержащие эту строку.
  3. Этот код может проверять ссылки только на текущем активном листе.
  4. С помощью этого макроса вы можете выбрать только найденные ячейки. Придется удалить все вручную. Это преимущество, потому что вы можете все перепроверить.
  5. Вы также можете выделить ячейки специальным цветом. Для этого удалите апостроф перед этой строкой rres.Interior.Color = vbRed

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

  1. Сделайте резервную копию документа.
  2. Откроем этот документ с помощью архиватора. Вы можете использовать любой формат, поддерживающий формат ZIP, но WinRar, а также тот, который встроен в Windows, будет.
  3. В появившемся архиве нужно найти папку xl и открыть там externalLinks.
  4. В этой папке находятся все внешние ссылки, каждая из которых соответствует файлу формата externalLink1.xml. Все только пронумерованы, поэтому пользователь не может понять, что это за соединение. Чтобы разобраться, что за подключение, нужно открыть папку _rels и посмотреть ее там.
  5. Затем мы удаляем все определенные ссылки на основе того, что мы узнали из файла externalLinkX.xml.rels.
  6. Далее открываем наш файл с помощью Excel. Появится информация об ошибке, например «Ошибка в части содержания книги». Даём согласие. После этого появится другое диалоговое окно. Закрываем.

После этого все ссылки необходимо удалить.

Microsoft Excel

трюки • приёмы • решения

Как в Excel 2013 обновить ссылки и изменить источник связи

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

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

  1. Если обе книги — источник и клиент — открыты, Excel автоматически обновляет ссылки, как только данные в книге-источнике меняются.
  2. Если открыта книга-источник в тот момент, когда вы открываете книгу-клиент, Excel также производит автоматическое обновление.
  3. Если книга-источник закрыта в момент открытия книги, использующей ее данные. Excel выводит строку предупреждения о том, что автоматическое обновление ссылок отключено. В таком случае нажмите на кнопку Параметры, установите переключатель в положение Включить это содержимое и нажмите на кнопку ОК. Вы также можете включить автоматическое обновление ссылок для всех книг. Для этого нажмите на кнопку Файл, далее Параметры, Центр управления безопасностью, затем нажмите на кнопку Параметры центра безопасности, далее на вкладке Внешнее содержимое переведите переключатель в положение включить автоматическое обновление для всех связей в книге.
  4. Если вы не обновили ссылки при открытии зависимого документа, вы можете обновить их в любое время впоследствии. Для этого нерейдите на вкладку Данные ленты инструментов, далее нажмите на кнопку Изменить связи. На экране вы увидите диалоговое окно Изменение связей. В этом окне выберите необходимую связь и нажмите на кнопку Обновить.

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

  1. Откройте книгу-клиент и активируйте ее. Перейдите на вкладку Данные ленты инструментов, затем нажмите на кнопку Изменить связи. На экране вы увидите диалоговое окно Изменение связей.
  2. Нажмите на ссылку (связь), с которой хотите работать.
  3. Нажмите на кнопку Изменить. Excel выведет на экран окно поиска/указания файлов, где вы можете указать путь к необходимому документу.
  4. Нажмите Закрыть для возврата к книге.

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

Как в excel изменить связи

На этом шаге мы закончим рассматривать принципы работы со связанными объектами.

Редактирование связанного объекта

Редактирование связанной информации выполняется в исходном приложении. Простейший способ открытия исходного приложения — двойной щелчок на связанной информации в документе Word:

Рис.1. Открытие приложения Excel для редактирования связанной таблицы

Для открытия исходного приложения можно также воспользоваться кнопкой Открыть источник диалогового окна Связи (команда Связи меню Правка):

Рис.2. Диалоговое окно Связи

Обновление связи

По умолчанию (рисунок 2) задано автоматическое обновление связи (активизируется переключатель автоматически в области Способ обновления связи диалогового окна Связи), т.е. при изменении информации в исходном документе (таблице Excel) она обновляется и в документе Word, если он открыт. Связи обновляются автоматически и при открытии документа Word. Автоматическое обновление данных можно отменить в диалоговом окне Связи, которое открывается при вызове одноименной команды меню Правка редактора Word. Диалоговое окно содержит список всех связей активного документа Word. Чтобы обновление выполнялось только при нажатии кнопки Обновить, нужно выделить в списке связь и установить переключатель по запросу.

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


Команда Связи меню Правка недоступна, если документ не содержит связанной информации.

Чтобы предотвратить обновление связанной информации, следует заблокировать связь. Для этого необходимо, находясь в диалоговом окне Связи, выделить связь или связи, установить опцию Не обновлять связь и нажать кнопку ОК. Блокировка связи не означает ее разрыв. Для ее отмены достаточно выключить опцию Не обновлять связь в окне Связи и нажать кнопку ОК.

Разрыв связи

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

Изменение связи

Связь может быть разорвана и при переименовании или удалении документа-источника. В этом случае необходимо повторно установить связь с документом-источником или установить связь с другим документом. Чтобы изменить или восстановить связь, надлежит нажать кнопку Сменить источник диалогового окна Связи. В результате откроется диалоговое окно Сменить источник — стандартное окно открытия документов системы Windows, где нужно выбрать документ, с которым восстанавливается связь:

Рис.3. Диалоговое окно Сменить источник

Если нужный документ отсутствует в списке, следует выбрать другой диск или папку.

На следующем шаге мы рассмотрим пример внедрения объекта в документ Word.

Блог о программе Microsoft Excel: приемы, хитрости, секреты, трюки

Создание связи между таблицами Excel

Связь между таблицами Excel – это формула, которая возвращает данные с ячейки другой рабочей книги. Когда вы открываете книгу, содержащую связи, Excel считывает последнюю информацию с книги-источника (обновление связей)

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

Когда вы создаете связь между таблицами, Excel создает формулу, которая включает в себя имя исходной книги, заключенную в скобки [], имя листа с восклицательным знаком на конце и ссылку на ячейку.

Создание связей между рабочими книгами

  1. Открываем обе рабочие книги в Excel
  2. В исходной книге выбираем ячейку, которую необходимо связать, и копируем ее (сочетание клавиш Ctrl+С)
  3. Переходим в конечную книгу, щелкаем правой кнопкой мыши по ячейке, куда мы хотим поместить связь. Из выпадающего меню выбираем Специальная вставка
  4. В появившемся диалоговом окне Специальная вставка выбираем Вставить связь.

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

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

Прежде чем создавать связи между таблицами

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

Делайте легко отслеживаемые связи. Не существует автоматического поиска всех ячеек, содержащих ссылки. Поэтому, используйте определенный формат, чтобы быстро идентифицировать связи с другими таблицами, в противном случае, документ, содержащий ссылки, может разрастись до такой степени, что его будет трудно поддерживать.

Автоматические вычисления. Исходная книга должна работать в режиме автоматического вычисления (установлено по умолчанию). Для переключения параметра вычисления перейдите по вкладке Формулы в группу Вычисление. Выберите Параметры вычислений –> Автоматически.

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

Обновление связей

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

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

Разорвать связи в книгах Excel

Разрыв связи с источником приведет к замене существующих формул связи на значения, которые они возвращают. Например, связь =[Источник.xlsx]Цены!$B$4 будет заменена на 16. Разрыв связи нельзя отменить, поэтому прежде чем совершить операцию, рекомендую сохранить книгу.

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

Вам также могут быть интересны следующие статьи

5 комментариев

Спасибо! очень полезный материал!

Пожалуйста, исправьте опечатку:
«В исходной книге выбираем ячейку, которую необходимо связать, и копируем ее (сочетание клавиш Ctrl+V)»
Думаю должно быть «Ctrl+С»

Управление обновлением внешних ссылок (связей)

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

Книга, содержащая ссылки, называется конечной книгой, а книга, с которой она связана, называется исходной книгой. Вы можете связать несколько исходных книг с одной конечной книгой.

1. Конечная книга включает внешнюю ссылку (Link).

2. Внешняя ссылка (или ссылка) — это ссылка на ячейку или диапазон в исходной книге.

3. исходная книга содержит связанную ячейку или диапазон, а также фактическое значение, возвращаемое в конечную книгу.

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

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

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

Закройте все исходные книги. Если одна книга-источник будет открыта, а остальные закрыты, обновления не будут одинаковыми.

Откройте конечную книгу.

Чтобы обновить ссылки, на панели «уровень доверия» нажмите кнопку » Обновить«. Если вы не хотите обновлять ссылки (найдите X в правой части экрана), закройте панель управления безопасностью.

Откройте книгу, содержащую связи.

Перейдите в раздел данные > запросы & подключений > изменить ссылки.

Из списка Источник выберите связанный объект, который необходимо изменить.

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

Нажмите кнопку Обновить значения.

запросов & подключений > изменить ссылки» />

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

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

В строка формул найдите ссылку на другую книгу, например К:репортс [Budget. xlsx], и замените ее на расположение новой исходной книги.

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

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

Перейдите в раздел данные > запросы & подключений > изменить ссылки.

Нажмите кнопку Запрос на обновление связей.

Выберите один из трех следующих вариантов:

Предоставление пользователям возможности выбора оповещения

Не показывать оповещение и не обновлять автоматические ссылки

Не показывать оповещения и ссылки для обновления.

Режим автоматического обновления или ручное обновление: для связей с формулами всегда задано значение «автоматически».

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

Когда вы открываете диалоговое окно Изменение связей (запросыданных > & подключения > изменить ссылки), у вас есть несколько вариантов работы с существующими ссылками. Вы можете выбрать отдельные книги, удерживая нажатой клавишу CTRL, или любую из них с помощью сочетания клавиш CTRL + A.

запросов & подключений > изменить ссылки» />

Это приведет к обновлению всех выбранных книг.

Этот параметр полезен, если вы хотите указать существующие ссылки на другой источник. Например, вы можете использовать книгу прошлого года и при запуске нового года нужно было указывать на новую книгу. Если выбрать команду изменить источник , откроется диалоговое окно Проводник, в котором можно перейти к новой исходной книге. Если книга содержит более одного листа, вам будет предложено указать, какой из них связать, просто щелкнуть нужный лист и нажать кнопку ОК.

Примечание: Книгу можно снова указать на саму себя, выбрав ее в диалоговом окне «изменить источник». При этом все ссылки на формулы будут связаны с исходной книгой.

Откроется исходная книга.

Важно: При разрыве связей с источником все формулы, использующие источник, заменяются на их текущее значение. Например, ссылка = SUM ([бюджетный. xlsx] годовой! C10: C25) будет преобразована в сумму значений в исходной книге. Поскольку это действие нельзя отменить, может потребоваться сначала сохранить версию файла.

На вкладке данные в группе запросы & подключения нажмите кнопку изменить связи.

В списке Источник выберите связь, которую требуется разорвать.

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

Щелкните элемент Разорвать.

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

Чтобы удалить имя, выполните указанные ниже действия.

Если вы используете диапазон внешних данных, параметр запроса также может использовать данные из другой книги. Может потребоваться проверить и удалить эти типы связей.

На вкладке Формулы в группе Определенные имена нажмите кнопку Диспетчер имен.

В столбце Имя выберите имя, которое следует удалить, и нажмите кнопку Удалить.

Это просто выводит уведомление в области изменение связей, независимо от того, является ли связанная книга действительной для источника. Оно должно отображаться как » ОК«, но если это не так, необходимо проверить исходную книгу. Во многих случаях исходная книга может быть перемещена или удалена, вырезанием ссылки. Если книга по-прежнему существует, вы можете повторно связать книгу с помощью параметра изменить источник .

Можно ли заменить единственную формулу вычисляемым значением?

Да. Формулы в Excel, вместо которых вводится их значение, удаляются без возможности восстановления. Если вы случайно заменили формулу со значением и хотите восстановить формулу, нажмите кнопку отменить сразу после ввода или вставки значения.

Нажмите клавиши CTRL + C , чтобы скопировать формулу.

Нажмите клавиши ALT + E + S + V , чтобы вставить формулу в качестве значения, или перейдите на вкладку Главная> буфер обмена> Вставить > Вставить значения.

Что делать, если вы не подключены к источнику?

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

Я не хочу, чтобы текущие данные были заменены новыми данными

Нажмите кнопку Не обновлять.

При попытке обновления в прошлый раз требовалось слишком много времени

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

Кто-то другой создал книгу, и я не знаю, почему я вижу этот запрос

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

Я могу ответить на приглашение один и тот же путь и не хочу повторно видеть его

Можно ответить на запрос и запретить его вывод для этой книги в будущем.

Не отображать запрос и обновлять связи автоматически

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

Перейдите в раздел > Параметрыфайлов > Дополнительно.

В разделе Общие снимите флажок Запрашивать об обновлении автоматических связей. Если этот флажок снят, связи будут обновляться автоматически (без выдачи запроса).

Одинаковый запрос для всех пользователей этой книги

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

Перейдите в раздел данные > запросы & подключений > изменить ссылки > Выбери сообщение, а затем выберите нужный параметр.

Примечание: При наличии разорванных связей будет появляться оповещение об этом.

Что делать, если я использую запрос с параметрами?

Нажмите кнопку Не обновлять.

Закройте конечную книгу.

Откройте конечную книгу.

Нажмите кнопку Обновить.

Связь с параметрическим запросом нельзя обновить без открытия книги-источника.

Почему не удается выбрать параметр «вручную» для обновления определенной внешней ссылки?

Для связей с формулами всегда задано значение «автоматически».

Дополнительные сведения

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

Примечание: Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Была ли информация полезной? Для удобства также приводим ссылку на оригинал (на английском языке).

Как изменить связи в Excel

Внешняя ссылка в Excel — это ссылка на ячейку (или диапазон ячеек) в другой книге. На рисунках ниже вы видите книги из трех отделов (North, Mid и South).

Создание внешней ссылки

Чтобы создать внешнюю ссылку, следуйте инструкции ниже:

  1. Откройте все три документа.
  2. В книге «Company», выделите ячейку B2 и введите знак равенства «=».
  3. На вкладке View (Вид) кликните по кнопке Switch Windows (Перейти в другое окно) и выберите «North».

Оповещения

Закройте все документы. Внесите изменения в книги отделов. Снова закройте все документы. Откройте файл «Company».

  1. Чтобы обновить все ссылки, кликните по кнопке Enable Content (Включить содержимое).
  2. Чтобы ссылки не обновлялись, нажмите кнопку X.

Примечание: Если вы видите другое оповещение, нажмите Update (Обновить) или Don’t Update (Не обновлять).

Чтобы открыть диалоговое окно Edit Links (Изменение связей), на вкладке Data (Данные) в разделе Connections group (Подключения) щелкните Edit links symbol (Изменить связи).

  1. Если вы не обновили ссылки сразу, можете обновить их здесь. Выберите книгу и нажмите кнопку Update Values (Обновить), чтобы обновить ссылки на эту книгу. Обратите внимание, что Status (Статус) изменяется на ОК.

Урок подготовлен для Вас командой сайта office-guru.ru Источник: http://www.excel-easy.com/examples/external-references.html Перевел: Андрей Антонов Правила перепечатки Еще больше уроков по Microsoft Excel

Power query замены значений в цикле

monstr_ork

Дата: Воскресенье, 02.06.2019, 19:08 |
Сообщение № 1

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 133


Репутация:

0

±

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


Excel 2016

Здравствуйте, форумчане.
Подскажите пожалуйста, возможно ли с помощью power query произвести замену значений в цикле?
Файл на 4.5 миллиона строк и там два столбца. Нужно произвести замену во втором столбце.
Пример строки 2 столбца: «товар1: машина, качество1: хорошее, цена1: 123, товар2:мотоцикл, качество2: отличное, цена2: 233, …» И т.д. в каждой строке таких описание может быть более 10.
Мне нужно заменить машина на auto , а мотоцикл на moto.
Будь не такое большое кол-во строк я бы через vba циклом написал, а и поменял все значения.
Сразу говорю, что названия там могут быть любыми, это строка как пример.
Я рассчитывал создать таблицу с уникальными значениями где каждой записи присвоено значение на замену и пропустить их в цикле.
Если это будет возможно, то могу приложить файл, но чуть позже.

 

Ответить

krosav4ig

Дата: Воскресенье, 02.06.2019, 19:59 |
Сообщение № 2

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

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

Сообщений: 2346


Репутация:

989

±

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


Excel 2007,2010,2013


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

 

Ответить

monstr_ork

Дата: Воскресенье, 02.06.2019, 20:49 |
Сообщение № 3

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 133


Репутация:

0

±

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


Excel 2016

krosav4ig, это при условии, что значение в отдельном столбце, правильно я понял? У меня значения внутри строки или мне нужно разбить фразу на несколько столбцов

Сообщение отредактировал monstr_orkВоскресенье, 02.06.2019, 21:02

 

Ответить

anvg

Дата: Воскресенье, 02.06.2019, 22:41 |
Сообщение № 4

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

Ранг: Ветеран

Сообщений: 581


Репутация:

271

±

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


2016, 365

Доброе время суток.
Например, так
[vba]

Код

let
    pairs = Table.ToRecords(#table({«from», «to»}, {{«машина», «auto»}, {«мотоцикл», «moto»}})),
    source = #table({«Column2»}, {{«товар1: машина, качество1: хорошее, цена1: 123, товар2:мотоцикл, качество2: отличное, цена2: 233, …»}}),
    maker = Table.TransformColumns(source, {«Column2», each List.Accumulate( pairs, _, (acc, next) => Text.Replace(acc, next[from], next[to]) ) })
in
    maker

[/vba]

 

Ответить

monstr_ork

Дата: Понедельник, 03.06.2019, 08:21 |
Сообщение № 5

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 133


Репутация:

0

±

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


Excel 2016

anvg, это у вас в код вставлены нужные данные.
Так то их будет около тысячи. которые нужно подменить.
Приложил файл, может так лучше будет понятно.
Сразу скажу. что таблицы с заменами будет отдельным листом загружаемым в PQ

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

3730234.xlsm
(14.3 Kb)

 

Ответить

anvg

Дата: Понедельник, 03.06.2019, 13:00 |
Сообщение № 6

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

Ранг: Ветеран

Сообщений: 581


Репутация:

271

±

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


2016, 365

в код вставлены нужные данные.

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

Код

let
    Products = Table.RenameColumns(Excel.CurrentWorkbook(){[Name=»Products»]}[Content], {{«Товар», «from»}, {«Товар_замена», «to»}}),
    Qualities = Table.RenameColumns(Excel.CurrentWorkbook(){[Name=»Qualities»]}[Content], {{«Качество», «from»}, {«Качество_замена», «to»}}),
    pairs = List.Buffer(Table.ToRecords(Products & Qualities)),
    Source = Excel.CurrentWorkbook(){[Name=»Source»]}[Content],
    result = Table.TransformColumns(Source, {«Столбец2», each List.Accumulate( pairs, _, (acc, next) => Text.Replace(acc, next[from], next[to]) ) })
in
    result

[/vba]

 

Ответить

sboy

Дата: Понедельник, 03.06.2019, 13:16 |
Сообщение № 7

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

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

Сообщений: 2566


Репутация:

724

±

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


Excel 2010

anvg, технический вопрос List.Buffer отличается ли для данного решения от List.Combine?


Яндекс: 410016850021169

 

Ответить

anvg

Дата: Понедельник, 03.06.2019, 13:49 |
Сообщение № 8

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

Ранг: Ветеран

Сообщений: 581


Репутация:

271

±

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


2016, 365

List.Combine объединяет несколько списков в один (можно пользоваться для этих целей оператором объединения List.Combine({list1, list2}) == list1 & list2).
List.Buffer принуждает Power Query создать конечный список, заданный его аргументом (помним, что одна из проблем Power Query — это ленивые, отложенные вычисления), что ускоряет выполнение при больших размерах списка).

 

Ответить

monstr_ork

Дата: Понедельник, 03.06.2019, 21:12 |
Сообщение № 9

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 133


Репутация:

0

±

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


Excel 2016

anvg, спасибо за помощь, но я себя переоценил (не понял как это все запустить).

Products = Table.RenameColumns(Excel.CurrentWorkbook(){[Name=»Products»]}[Content], {{«Товар», «from»}, {«Товар_замена», «to»}}),
Qualities = Table.RenameColumns(Excel.CurrentWorkbook(){[Name=»Qualities»]}[Content], {{«Качество», «from»}, {«Качество_замена», «to»}}),

как я понял, тут мы объявляем таблицы с уникальными значениями.

pairs = List.Buffer(Table.ToRecords(Products & Qualities)),

тут даем переменной что-то (объединям наши таблицы?)
Дальше мы что-то делаем с нашей основной таблицей.
Products, Qualities и Source — это переменные или это Вы так обозвали таблицы?
Если не трудно, могли бы выложить файл с внесенным кодом? (и небольшими разъяснениями)

 

Ответить

anvg

Дата: Понедельник, 03.06.2019, 22:35 |
Сообщение № 10

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

Ранг: Ветеран

Сообщений: 581


Репутация:

271

±

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


2016, 365

А вот сделали бы полноценный пример — и было бы всё без проблем :)
Да объединяем и преобразуем в список записей для последующего использования в List.Accumulate.
Решение лобовое. Тупо на каждой строке таблицы Source применяем по списку найти и заменить. Эффективность 1000 пар найти и заменить * на 4,5 миллиона строк = 4,5 миллиарда поиска и замен. Может имеет смысл разбить строки в Source на составные части с локальной индексацией, а потом делать замену через Table.Join как и советовали. Но что будет лучше — можно ответить, только зная структуру данных. По простому сколько из 1000 пар найти/заменить будут использованы для каждой строки Source.

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

9152815.xlsm
(25.1 Kb)

 

Ответить

monstr_ork

Дата: Вторник, 04.06.2019, 00:17 |
Сообщение № 11

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 133


Репутация:

0

±

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


Excel 2016

anvg, по примеру полностью с Вами согласен.
На начальном этапе меня и 4,5 миллиарда устроят, единственное что хотел уточнить, а можно вместо таблицы файл подставить? Если да то как?

По поводу дробления строки на отдельные столбцы, я делал, но не понял как потом эти столбцы проверить, т.к. их в начале по знаку «,» разделить, а потом еще прогонять циклом на замену.
Если Вам сложно, приложить файл где будет деление по столбцам?

 

Ответить

anvg

Дата: Вторник, 04.06.2019, 10:42 |
Сообщение № 12

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

Ранг: Ветеран

Сообщений: 581


Репутация:

271

±

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


2016, 365

дробления строки на отдельные столбцы

Не на столбцы, на пронумерованные строки. Точнее, сначала Table.AddIndexColumn для строк Source, и разбиение на слова содержимого второго столбца с преобразованием в таблицу и нумерацией через ту же функцию (нужно, чтобы потом собрать в правильном порядке исправленную фразу).
Вы всё же программировали на VBA, ну так осваивайте программирование на Power Query. Мышкоклацание — это не очень хороший подход.

Сообщение отредактировал anvgВторник, 04.06.2019, 10:43

 

Ответить

sboy

Дата: Вторник, 04.06.2019, 14:02 |
Сообщение № 13

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

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

Сообщений: 2566


Репутация:

724

±

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


Excel 2010

ну так осваивайте программирование на Power Query

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


Яндекс: 410016850021169

 

Ответить

anvg

Дата: Вторник, 04.06.2019, 14:45 |
Сообщение № 14

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

Ранг: Ветеран

Сообщений: 581


Репутация:

271

±

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


2016, 365

помогите оптимизировать или подсказать что лишнее или неправильное

Как по мне, так всё хорошо. Тест критерий оптимальности :) Посмотрим, что monstr_ork по результатам тестов скажет.
Я вот так сделал

 

Ответить

krosav4ig

Дата: Вторник, 04.06.2019, 22:51 |
Сообщение № 15

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

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

Сообщений: 2346


Репутация:

989

±

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


Excel 2007,2010,2013

а у меня так получилось [vba]

Код

let
    Source = Excel.CurrentWorkbook(){[Name=»Таблица1″]}[Content],
    Translations = Table.Buffer(Table.Combine(List.Transform({«Таблица2″,»Таблица3»},each Table.Skip(Table.DemoteHeaders(Excel.CurrentWorkbook(){[Name=_]}[Content]),1)))),
    Replace = Table.ReplaceValue(Table.ReplaceValue(Source,»,»,»»»))},{t(«»»,Replacer.ReplaceText,{«Столбец2″}),»:»,»»»),fn(t(«»»,Replacer.ReplaceText,{«Столбец2»}),
    Evaluate = Table.TransformColumns(Replace,{{«Столбец2»,each Table.FromRows(Expression.Evaluate(«{{t(«»»&_&»»»))}}»,[t=Text.Trim,fn=(v)=>try Translations{[Column1=v]}[Column2] otherwise v]))}}),
    Custom1 = Table.TransformColumns(Evaluate,{{«Столбец2», each Combiner.CombineTextByDelimiter(«, «)(Table.ToList(_,Combiner.CombineTextByDelimiter(«: «)))}})
in
    Custom1

[/vba]

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

7273009.xlsm
(26.1 Kb)


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

 

Ответить

sboy

Дата: Среда, 05.06.2019, 10:31 |
Сообщение № 16

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

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

Сообщений: 2566


Репутация:

724

±

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


Excel 2010

Как по мне, так всё хорошо

Не, что-то не так :) сделал синтетический тест. Исходную таблицу размножил на 100тыс строк. Таблицы с заменами не трогал.
Результаты по скорости обработки в обратном порядке:
4. мой запрос из сообщения 13 — 24 мин 48 сек
3. запрос anvg из сообщения 14 -1 мин 35 сек (чувствуется разница))
2. запрос krosav4ig из сообщения 15 — 46,4 сек!
1. запрос anvg из сообщения 6 — 2,3 сек!!!


Яндекс: 410016850021169

 

Ответить

monstr_ork

Дата: Четверг, 06.06.2019, 18:40 |
Сообщение № 17

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 133


Репутация:

0

±

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


Excel 2016

anvg, пытаюсь изучать, информации в свободных истониках на русском слишком мало, а те что есть только про то как ручками все делать =(
Только ни кто не ответил, либо я не увидел, как вместо таблиц использовать файлы, которые подружаются отдельно?
Я сделал так :
[vba]

Код

Source = Excel.Workbook(File.Contents(«путь к файлу»), null, true),

[/vba]
Но потом начались ошибки со столбцами, нужно еще что-то дописать?
И буквально еще один вопрос, как выгрзуить эти данные обратно в CSV?

[offtop]Было бы кроуто тему по Power query «открыть», хоть и не много обращений, но все же в обдом разделе[/offtop]

Сообщение отредактировал monstr_orkЧетверг, 06.06.2019, 23:17

 

Ответить

monstr_ork

Дата: Пятница, 07.06.2019, 22:00 |
Сообщение № 18

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 133


Репутация:

0

±

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


Excel 2016

Модифицировал под файлы:

ошибок нет, но код не отрабатывает.
Подскажите в чем проблема?

anvg, Ваш код пока не осилил, по этому начал с более простого для меня.

Сообщение отредактировал monstr_orkПятница, 07.06.2019, 23:15

 

Ответить

monstr_ork

Дата: Пятница, 07.06.2019, 22:05 |
Сообщение № 19

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 133


Репутация:

0

±

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


Excel 2016

+ файл с основной таблицей.
Больше двух не прикладывает

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

Data.csv
(0.6 Kb)

 

Ответить

monstr_ork

Дата: Суббота, 08.06.2019, 00:26 |
Сообщение № 20

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 133


Репутация:

0

±

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


Excel 2016

В итоге получилось сделать, вот так:
[vba]

Код

let
    Source_inout = Csv.Document(File.Contents(«C:DesktopPower QueryData.csv»),[Delimiter=»;», Columns=2, Encoding=1251, QuoteStyle=QuoteStyle.None]),
    Source = Table.RenameColumns(Source_inout,{{«Column2», «Столбец2»}}),
    table_1_inout = Csv.Document(File.Contents(«C:DesktopPower Query1_table.csv»),[Delimiter=»;», Columns=2, Encoding=1251, QuoteStyle=QuoteStyle.None]),
    table_2_inout = Csv.Document(File.Contents(«C:DesktopPower Query2_table.csv»),[Delimiter=»;», Columns=2, Encoding=1251, QuoteStyle=QuoteStyle.None]),
    Translations = Table.Combine({table_1_inout, table_2_inout}),
    Replace = Table.ReplaceValue(Table.ReplaceValue(Source,»,»,»»»))},{t(«»»,Replacer.ReplaceText,{«Столбец2″}),»:»,»»»),fn(t(«»»,Replacer.ReplaceText,{«Столбец2»}),
    Evaluate = Table.TransformColumns(Replace,{{«Столбец2»,each Table.FromRows(Expression.Evaluate(«{{t(«»»&_&»»»))}}»,[t=Text.Trim,fn=(v)=>try Translations{[Column1=v]}[Column2] otherwise v]))}}),
    Custom1 = Table.TransformColumns(Evaluate,{{«Столбец2», each Combiner.CombineTextByDelimiter(«, «)(Table.ToList(_,Combiner.CombineTextByDelimiter(«: «)))}})
in
    Custom1

[/vba]

Остался один вопрос, как все это обратно в CSV выгрузить?

krosav4ig, а для чего используется Table.Buffer? В своем примере убрал, т.к. была ошибка в форматах. у меня талблица, а требовался текст.

 

Ответить

Хитрости »

28 Декабрь 2017              19442 просмотров


Проблему замены значений по списку в Excel я уже затрагивал в статье Массовая замена слов. Там я использовал макросы, т.к. других вариантов по сути не было. Но с появлением PowerQuery многие задачи стало возможно решить и без применения VBA(макросов). В том числе и замену значений по списку соответствия. Правда, чуть менее универсально получается и в применении может быть даже не проще. Но это в любом случае выход для тех, у кого выполнение макросов запрещено политикой компании или когда даже само слово «макрос» уже вызывает легкую рвоту :)
Например, необходимо перевести текст из ячеек столбца на транслит или наоборот(с транслита на русский):
Исходная таблица
Для этого есть список соответствия:
Список соответствия
Список представляет собой умную таблицу(Вставка(Insert)Таблица(Table)), чтобы в запросе PowerQuery было удобно к ней обращаться. Таблица называется «translate_list»(имя можно изменить, выделить любую ячейку таблицы -вкладка Конструктор(Designer)Имя таблицы(Table name))

Прежде чем читать далее и пробовать применить, необходимо знать азы работы в Power Query(Power Query — что такое и почему её необходимо использовать в работе?), уметь создавать и редактировать запросы и вызвать расширенный редактор: переходим в нужный запрос —ГлавнаяРасширенный редактор:
Расширенный редактор
К статье приложен файл с готовым запросом замены по списку, который разберем ниже:
Скачать пример:

  Замена по списку через PowerQuery.xlsx (39,3 KiB, 1 241 скачиваний)


Для начала загружаем в PowerQuery таблицу для перевода: переходим на вкладку Вставка и выбираем – Таблица. Снимаем галку с пункта «Таблица с заголовками» —Ок:
Создание умной таблицы
Сразу переходим на вкладку Данные(или на вкладку Power Query) -группа Загрузить и преобразоватьИз таблицы
Данные -Из таблицы
Появится окно редактора запросов. В нем сразу переходим на вкладку ГлавнаяРасширенный редактор:
Расширенный редактор
Появится редактор текста запросов со следующим запросом:
let
Источник = Excel.CurrentWorkbook(){[Name=»rus»]}[Content],
#»Измененный тип» = Table.TransformColumnTypes(Источник,{{«Текст», type text}})
in
#»Измененный тип»
где «rus» — имя таблицы для перевода
удаляем все, начиная с in и до конца, в конце второй строки(#»Измененный тип» = Table.TransformColumnTypes(Источник,{{«Текст», type text}})) добавляем запятую и вставляем следующий текст:

//определяем направление перевода(0 - с транслита на русский, 1 - с русского на транслит)
    from="1",
    WhatChange = if (from="0") then "WhatChange" else "ChangeWith",
    ChangeWith = if (from="0") then "ChangeWith" else "WhatChange",
    //определяем столбцы со значениями для поиска и замены слов/букв
    t_1 = Table.Column(Excel.CurrentWorkbook(){[Name="translate_list"]}[Content],WhatChange),
    t_2 = Table.Column(Excel.CurrentWorkbook(){[Name="translate_list"]}[Content],ChangeWith),
    //определяем длину текста каждого слова из списка соответствия
    t1_len = List.Generate(()=> [c=1, t=Text.Length(t_1{1})], 
                          each [c]<=List.Count(t_1), 
                          each [c=[c]+1, 
                                t=Text.Length(t_1{[c]})], 
                          each [t]),
    //сортируем таблицу на основании списка длин слов, чтобы сначала заменялись самые длинные
    tbl1 = Table.Sort(Table.FromColumns({t_1, t_2, t1_len}),{{"Column3", Order.Descending},"Column1","Column2","Column3"}),
    //берем столбцы отсортированной таблицы(t1 - что заменяем, t2 - на что заменяем)
    t1 = Table.Column(tbl1,"Column1"),
    t2 = Table.Column(tbl1,"Column2"),
    //функция замены значений по списку
    TranslateFunction = (InputText)=> 
     let
       //функция замены значений
       DoRep = List.Generate(
                          ()=> [cnt=0, text=Text.Upper(InputText)], 
                          each [cnt]<=List.Count(t1), 
                          each [cnt=[cnt]+1, 
                                text=Text.Replace([text], t1{[cnt]}, t2{[cnt]})], 
                          each [text]),
       GetLastValue = List.Last(DoRep)
     in
      GetLastValue,
    Output = Table.AddColumn(#"Измененный тип", "Changed text", each TranslateFunction([Текст]))
in
    Output

должен получиться такой запрос(вместо «rus» в строке Источник = Excel.CurrentWorkbook(){[Name=»rus»]}[Content], может быть имя другой таблицы):

let
    Источник = Excel.CurrentWorkbook(){[Name="rus"]}[Content],
    #"Измененный тип" = Table.TransformColumnTypes(Источник,{{"Текст", type text}}),
    //определяем направление перевода(0 - с транслита на русский, 1 - с русского на транслит)
    from="1",
    WhatChange = if (from="0") then "WhatChange" else "ChangeWith",
    ChangeWith = if (from="0") then "ChangeWith" else "WhatChange",
    //определяем столбцы со значениями для поиска и замены слов/букв
    t_1 = Table.Column(Excel.CurrentWorkbook(){[Name="translate_list"]}[Content],WhatChange),
    t_2 = Table.Column(Excel.CurrentWorkbook(){[Name="translate_list"]}[Content],ChangeWith),
    //определяем длину текста каждого слова из списка соответствия
    t1_len = List.Generate(()=> [c=1, t=Text.Length(t_1{1})], 
                          each [c]<=List.Count(t_1), 
                          each [c=[c]+1, 
                                t=Text.Length(t_1{[c]})], 
                          each [t]),
    //сортируем таблицу на основании списка длин слов, чтобы сначала заменялись самые длинные
    tbl1 = Table.Sort(Table.FromColumns({t_1, t_2, t1_len}),{{"Column3", Order.Descending},"Column1","Column2","Column3"}),
    //берем столбцы отсортированной таблицы(t1 - что заменяем, t2 - на что заменяем)
    t1 = Table.Column(tbl1,"Column1"),
    t2 = Table.Column(tbl1,"Column2"),
    //функция замены значений по списку
    TranslateFunction = (InputText)=> 
     let
       //функция замены значений
       DoRep = List.Generate(
                          ()=> [cnt=0, text=Text.Upper(InputText)], 
                          each [cnt]<=List.Count(t1), 
                          each [cnt=[cnt]+1, 
                                text=Text.Replace([text], t1{[cnt]}, t2{[cnt]})], 
                          each [text]),
       GetLastValue = List.Last(DoRep)
     in
      GetLastValue,
    Output = Table.AddColumn(#"Измененный тип", "Changed text", each TranslateFunction([Текст]))
in
    Output

Нажимаем Готово. В получившемся запросе уже будет создан новый столбец с именем Changed text, в котором все значения будут заменены согласно списку соответствия. В нашем случае весь русский текст будет переведен на транслит.
Здесь стоит отметить, что при помощи PowerQuery данным методом удобно будет переводить один столбец. Если надо перевести еще какой-то столбец, то переходим на вкладку Добавить столбецНастраиваемый столбец. В окне задаем имя столбца и вписываем следующее:
Настраиваемый столбец
=ReplacementFunction([Текст])
Вместо Текст указывается имя столбца, который надо перевести. Таким образом мы вызываем функцию перевода, которую вставили ранее в редактор запросов. Появится новый столбец, в котором весь текст указанного столбца будет переведен на транслит.
Единственная ложка дегтя — весь текст будет переведен в верхний регистр. В данном случае это необходимость и пока я не придумал, как обойти этот момент именно для перевода с транслита. Но текст можно преобразовывать уже на выходе, применив функцию Text.Proper(или Text.Lower) в момент создания пользовательского столбца:
Output = Table.AddColumn(#»Измененный тип», «Changed text», each Text.Proper(TranslateFunction([Текст])))


Теперь разберем принцип работы того кода, который мы использовали для перевода.
Сам код, кстати, мог бы быть значительно проще, буквально в пару строк. Но в замене по списку есть нюансы. На примере перевода с транслита на русский: группе символов SHCH соответствует буква Щ. И если не сортировать список по длине символов, то сначала будет заменена отдельно буква S на С, а H на Х. И в итоге для слова «Shchebet» получим «схесхебет» вместо ожидаемого «щебет».
Начнем с того, что в коде есть возможность изменять направление перевода — либо данные из первого столбца таблицы соответствий заменяем на соответствующие им значения второго, либо наоборот. За это отвечает отдельный параметр, который мы обозначаем в самом начале:
from=»1″,
0 — ищем значение в первом столбце и заменяем соответствующим значением из второго столбца(с транслита на русский)
1 — ищем значение во втором столбце и заменяем соответствующим значением из первого столбца(с русского на транслит).
Таким образом для изменения направления надо всего лишь изменить один символ в запросе. Его можно сделать и динамическим параметром, если использовать трюк из этой статьи — Относительный путь к данным PowerQuery. Создаем таблицу параметров и далее просто ссылаемся на ячейку:
from=Excel.CurrentWorkbook(){[Name=»Parameters»]}[Content]{0}[Значение],
Далее на основании именно этого значения мы определяем в каком столбце искать и из какого брать значения на замену:

WhatChange = if (from="0") then "WhatChange" else "ChangeWith",
ChangeWith = if (from="0") then "ChangeWith" else "WhatChange",
//определяем столбцы со значениями для поиска и замены слов/букв
t_1 = Table.Column(Excel.CurrentWorkbook(){[Name="translate_list"]}[Content],WhatChange),
t_2 = Table.Column(Excel.CurrentWorkbook(){[Name="translate_list"]}[Content],ChangeWith),

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

//определяем длину текста каждого слова из списка соответствия
    t1_len = List.Generate(()=> [c=1, t=Text.Length(t_1{1})], 
                          each [c]<=List.Count(t_1), 
                          each [c=[c]+1, 
                                t=Text.Length(t_1{[c]})], 
                          each [t]),

Здесь при помощи List.Generate мы проходим циклом по каждой ячейке столбца значений для замены и определяем количество символов в каждом при помощи функции Text.Length. И именно это значение используем для формирования виртуального списка.
Далее надо объединить все столбцы(два столбца непосредственно значений и столбец с кол-вом символов) в одну таблицу, чтобы отсортировать все столбца на основании только созданного столбца кол-ва символов. Для объединения используем функцию Table.FromColumns({t_1, t_2, t1_len}), а далее это все сортируем, указывая столбец, по которому сортировать(это всегда будет «Column3», т.к. при объединении столбцов мы столбец с кол-вом символов(t1_len) всегда ставим последним. Таким же образом у нас в первом столбце всегда значения для поиска, а во втором — для замены:

//сортируем таблицу на основании списка длин слов, чтобы сначала заменялись самые длинные
    tbl1 = Table.Sort(Table.FromColumns({t_1, t_2, t1_len}),{{"Column3", Order.Descending},"Column1","Column2","Column3"}),

на всякий случай там же указываем порядок столбцов(т.к. их у нас всего три) — «Column1″,»Column2″,»Column3». Хотя этого можно не делать, они будут по умолчанию расположены в правильном для нас порядке.
Теперь для простоты обращения к столбцам списка соответствия назначаем им краткие имена:

//берем столбцы отсортированной таблицы(t1 - что заменяем, t2 - на что заменяем)
t1 = Table.Column(tbl1,"Column1"),
t2 = Table.Column(tbl1,"Column2"),

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

//функция замены значений по списку
    TranslateFunction = (InputText)=> 
     let
       //функция замены значений
       DoRep = List.Generate(
                          ()=> [cnt=0, text=Text.Upper(InputText)],
                          each [cnt]<=List.Count(t1),
                          each [cnt=[cnt]+1,
                                text=Text.Replace([text], t1{[cnt]}, t2{[cnt]})],
                          each [text]),
       GetLastValue = List.Last(DoRep)
     in
      GetLastValue,

Здесь мы опять используем List.Generate, чтобы создать цикл по списку соответствия и каждое из его значений попробовать найти в указанном тексте(InputText) и заменить на соответствующее значение из столбца значений на замену.
И последним шагом является добавление нового столбца, в котором мы в функцию TranslateFunction передаем значение каждой ячейки столбца Текст:

Output = Table.AddColumn(#"Измененный тип", "Changed text", each TranslateFunction([Текст]))

С легкой руки Максима Зеленского изменил слегка текст запроса для более быстрой сортировки:

let
    Источник = Excel.CurrentWorkbook(){[Name="translit"]}[Content],
    #"Измененный тип" = Table.TransformColumnTypes(Источник,{{"Текст", type text}}),
    //определяем направление перевода
    from="0",
    WhatChange = if (from="0") then "WhatChange" else "ChangeWith",
    ChangeWith = if (from="0") then "ChangeWith" else "WhatChange",
    //определяем столбцы со значениями для поиска и замены слов/букв
    t_1 = Table.Column(Excel.CurrentWorkbook(){[Name="translate_list"]}[Content],WhatChange),
    t_2 = Table.Column(Excel.CurrentWorkbook(){[Name="translate_list"]}[Content],ChangeWith),
    //определяем длину текста каждого слова из списка соответствия
    //и сортируем таблицу на основании длин слов, чтобы сначала заменялись самые длинные
    tbl1 = Table.Sort(Table.FromColumns({t_1, t_2}), each -Text.Length(Record.Field(_, "Column1"))),
    t1 = Table.Column(tbl1,"Column1"),
    t2 = Table.Column(tbl1,"Column2"),
    //функция замены значений по списку
    TranslateFunction = (InputText)=> 
     let
       //функция замены значений
       DoRep = List.Generate(
                          ()=> [cnt=0, text=Text.Upper(InputText)], 
                          each [cnt]<=List.Count(t1), 
                          each [cnt=[cnt]+1, 
                                text=Text.Replace([text], t1{[cnt]}, t2{[cnt]})], 
                          each [text]),
       GetLastValue = List.Last(DoRep)
     in
      GetLastValue,
    Output = Table.AddColumn(#"Измененный тип", "Changed text", each TranslateFunction([Текст]))
in
    Output

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


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

Скачать пример с запросом в двух направлениях — с русского на транслит и наоборот:

  Замена по списку через PowerQuery.xlsx (39,3 KiB, 1 241 скачиваний)

Так же см.:
Power Query — что такое и почему её необходимо использовать в работе?
Получить данные из файлов XML при помощи Power Query
Относительный путь к данным PowerQuery
Оставить цифры или текст при помощи PowerQuery


Статья помогла? Поделись ссылкой с друзьями!

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

Под выпадающим списком понимается содержание в одной ячейке нескольких значений. Когда пользователь щелкает по стрелочке справа, появляется определенный перечень. Можно выбрать конкретное.

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

Создание раскрывающегося списка

Путь: меню «Данные» — инструмент «Проверка данных» — вкладка «Параметры». Тип данных – «Список».

Создание выпадающего списка.

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

  1. Вручную через «точку-с-запятой» в поле «Источник».
  2. Ввод значений.

  3. Ввести значения заранее. А в качестве источника указать диапазон ячеек со списком.
  4. Проверка вводимых значений.

  5. Назначить имя для диапазона значений и в поле источник вписать это имя.

Имя диапазона.
Раскрывающийся список.

Любой из вариантов даст такой результат.



Выпадающий список в Excel с подстановкой данных

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

  1. Выделяем диапазон для выпадающего списка. В главном меню находим инструмент «Форматировать как таблицу».
  2. Форматировать как таблицу.

  3. Откроются стили. Выбираем любой. Для решения нашей задачи дизайн не имеет значения. Наличие заголовка (шапки) важно. В нашем примере это ячейка А1 со словом «Деревья». То есть нужно выбрать стиль таблицы со строкой заголовка. Получаем следующий вид диапазона:
  4. Выпадающий список.

  5. Ставим курсор в ячейку, где будет находиться выпадающий список. Открываем параметры инструмента «Проверка данных» (выше описан путь). В поле «Источник» прописываем такую функцию:

Ввод значения в источник.

Протестируем. Вот наша таблица со списком на одном листе:

Список и таблица.

Добавим в таблицу новое значение «елка».

Добавлено значение елка.

Теперь удалим значение «береза».

Удалено значение береза.

Осуществить задуманное нам помогла «умная таблица», которая легка «расширяется», меняется.

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

Ввод данных из списка.

  1. Сформируем именованный диапазон. Путь: «Формулы» — «Диспетчер имен» — «Создать». Вводим уникальное название диапазона – ОК.
  2. Создание имени.

  3. Создаем раскрывающийся список в любой ячейке. Как это сделать, уже известно. Источник – имя диапазона: =деревья.
  4. Снимаем галочки на вкладках «Сообщение для ввода», «Сообщение об ошибке». Если этого не сделать, Excel не позволит нам вводить новые значения.
  5. Сообщение об ошибке.

  6. Вызываем редактор Visual Basic. Для этого щелкаем правой кнопкой мыши по названию листа и переходим по вкладке «Исходный текст». Либо одновременно нажимаем клавиши Alt + F11. Копируем код (только вставьте свои параметры).
  7. Private Sub Worksheet_Change(ByVal Target As Range)
     
    Dim lReply As Long
     
        If Target.Cells.Count > 1 Then Exit Sub
        If Target.Address = "$C$2" Then
         If IsEmpty(Target) Then Exit Sub
           If WorksheetFunction.CountIf(Range("Деревья"), Target) = 0 Then
              lReply = MsgBox("Добавить введенное имя " & _
                             Target & " в выпадающий список?", vbYesNo + vbQuestion)
              If lReply = vbYes Then
                  Range("Деревья").Cells(Range("Деревья").Rows.Count + 1, 1) = Target
              End If
           End If
         End If
    End Sub
     
  8. Сохраняем, установив тип файла «с поддержкой макросов».
  9. Сообщение об ошибке.

  10. Переходим на лист со списком. Вкладка «Разработчик» — «Код» — «Макросы». Сочетание клавиш для быстрого вызова – Alt + F8. Выбираем нужное имя. Нажимаем «Выполнить».

Макрос.

Когда мы введем в пустую ячейку выпадающего списка новое наименование, появится сообщение: «Добавить введенное имя баобаб в выпадающий список?».

Нажмем «Да» и добавиться еще одна строка со значением «баобаб».

Выпадающий список в Excel с данными с другого листа/файла

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

  1. Делаем активной ячейку, куда хотим поместить раскрывающийся список.
  2. Открываем параметры проверки данных. В поле «Источник» вводим формулу: =ДВССЫЛ(“[Список1.xlsx]Лист1!$A$1:$A$9”).

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

Как сделать зависимые выпадающие списки

Возьмем три именованных диапазона:

Три именованных диапазона.

Это обязательное условие. Выше описано, как сделать обычный список именованным диапазоном (с помощью «Диспетчера имен»). Помним, что имя не может содержать пробелов и знаков препинания.

  1. Создадим первый выпадающий список, куда войдут названия диапазонов.
  2. Список диапазонов.

  3. Когда поставили курсор в поле «Источник», переходим на лист и выделяем попеременно нужные ячейки.
  4. Таблица со списком.

  5. Теперь создадим второй раскрывающийся список. В нем должны отражаться те слова, которые соответствуют выбранному в первом списке названию. Если «Деревья», то «граб», «дуб» и т.д. Вводим в поле «Источник» функцию вида =ДВССЫЛ(E3). E3 – ячейка с именем первого диапазона.
  6. Второй раскрывающийся список.

    Выбор нескольких значений из выпадающего списка Excel

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

    1. Создаем стандартный список с помощью инструмента «Проверка данных». Добавляем в исходный код листа готовый макрос. Как это делать, описано выше. С его помощью справа от выпадающего списка будут добавляться выбранные значения.
    2. Private Sub Worksheet_Change(ByVal Target As Range)
          On Error Resume Next
          If Not Intersect(Target, Range("Е2:Е9")) Is Nothing And Target.Cells.Count = 1 Then
              Application.EnableEvents = False
              If Len(Target.Offset(0, 1)) = 0 Then
                  Target.Offset(0, 1) = Target
              Else
                  Target.End(xlToRight).Offset(0, 1) = Target
              End If
              Target.ClearContents
              Application.EnableEvents = True
          End If
      End Sub
       
    3. Чтобы выбранные значения показывались снизу, вставляем другой код обработчика.
    4. Private Sub Worksheet_Change(ByVal Target As Range)
          On Error Resume Next
          If Not Intersect(Target, Range("Н2:К2")) Is Nothing And Target.Cells.Count = 1 Then
              Application.EnableEvents = False
              If Len(Target.Offset(1, 0)) = 0 Then
                  Target.Offset(1, 0) = Target
              Else
                  Target.End(xlDown).Offset(1, 0) = Target
              End If
              Target.ClearContents
              Application.EnableEvents = True
          End If
      End Sub
       
    5. Чтобы выбираемые значения отображались в одной ячейке, разделенные любым знаком препинания, применим такой модуль.

    6. Private Sub Worksheet_Change(ByVal Target As Range)
          On Error Resume Next
          If Not Intersect(Target, Range("C2:C5")) Is Nothing And Target.Cells.Count = 1 Then
              Application.EnableEvents = False
              newVal = Target
              Application.Undo
              oldval = Target
              If Len(oldval) <> 0 And oldval <> newVal Then
                  Target = Target & "," & newVal
              Else
                  Target = newVal
              End If
              If Len(newVal) = 0 Then Target.ClearContents
              Application.EnableEvents = True
          End If
      End Sub

    Не забываем менять диапазоны на «свои». Списки создаем классическим способом. А всю остальную работу будут делать макросы.

    Выпадающий список с поиском

    1. На вкладке «Разработчик» находим инструмент «Вставить» – «ActiveX». Здесь нам нужна кнопка «Поле со списком» (ориентируемся на всплывающие подсказки).
    2. Вставить ActiveX.

    3. Щелкаем по значку – становится активным «Режим конструктора». Рисуем курсором (он становится «крестиком») небольшой прямоугольник – место будущего списка.
    4. Элемент ActiveX.

    5. Жмем «Свойства» – открывается перечень настроек.
    6. Свойства ActiveX.

    7. Вписываем диапазон в строку ListFillRange (руками). Ячейку, куда будет выводиться выбранное значение – в строку LinkedCell. Для изменения шрифта и размера – Font.

    Скачать пример выпадающего списка

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

Понравилась статья? Поделить с друзьями:
  • Подмена значения в excel
  • Подложкой документа может быть word
  • Подложки для документов word скачать бесплатно
  • Подложки для word 2007
  • Поддержка макросов в excel что это