Содержание
- Создание связи между двумя таблицами в Excel
- Дополнительные сведения о связях между таблицами в Excel
- Примечания о связях
- Пример. Связывание данных логики операций со временем с данными по рейсам авиакомпании
- «Могут потребоваться связи между таблицами»
- Шаг 1. Определите, какие таблицы указать в связи
- Шаг 2. Найдите столбцы, которые могут быть использованы для создания пути от одной таблице к другой
- Сведения об объекте модели PowerPivot в Excel
- Определенные связи
- Только отдельные модели
- Работа с источниками данных OLAP
- Активация создания модели PowerPivot
- Добавление нового источника данных, не устаревшего
- Создание новой сводной таблицы Excel, отличной от OLAP
- Создание сводной диаграммы Excel, отличной от OLAP
- Вставка сводных таблиц Excel, отличных от OLAP, из другой книги
- Отмена создания модели PowerPivot
- Объектная модель модели PowerPivot
- Объект model
- Объект ModelChanges
- Коллекция ModelColumnChanges
- Объект ModelColumnChange
- Коллекция ModelColumnNames
- Объект ModelColumnName
- Объект ModelConnection
- Коллекция ModelMeasureNames
- Объект ModelMeasureName
- Коллекция ModelRelationships
- Объект ModelRelationship
- Коллекция ModelTables
- Объект ModelTable
- Коллекция ModelTableColumns
- Объект ModelTableColumn
- Коллекция ModelTableNames
- Коллекция ModelTableNameChanges
- Объект ModelTableNameChange
- Заключение
- См. также
- Поддержка и обратная связь
Создание связи между двумя таблицами в Excel
Вы применяли функцию ВПР, чтобы переместить данные столбца из одной таблицы в другой? Так как в Excel теперь есть встроенная модель данных, функция ВПР устарела. Вы можете создать связь между двумя таблицами на основе совпадающих данных в них. Затем можно создать листы Power View или сводные таблицы и другие отчеты с полями из каждой таблицы, даже если они получены из различных источников. Например, если у вас есть данные о продажах клиентам, вам может потребоваться импортировать и связать данные логики операций со временем, чтобы проанализировать тенденции продаж по годам и месяцам.
Все таблицы в книге указываются в списках полей сводной таблицы и Power View.
При импорте связанных таблиц из реляционной базы данных Excel часто может создавать эти связи в модели данных, формируемой в фоновом режиме. В других случаях необходимо создавать связи вручную.
Убедитесь, что книга содержит хотя бы две таблицы и в каждой из них есть столбец, который можно сопоставить со столбцом из другой таблицы.
Вы можете отформатировать данные как таблицу или импортировать внешние данные в виде таблицы на новом.
Присвойте каждой из таблиц понятное имя: На вкладке Работа с таблицами щелкните Конструктор > Имя таблицы и введите имя.
Убедитесь, что столбец в одной из таблиц имеет уникальные значения без дубликатов. Excel может создавать связи только в том случае, если один столбец содержит уникальные значения.
Например, чтобы связать продажи клиента с логикой операций со временем, обе таблицы должны включать дату в одинаковом формате (например, 01.01.2012) и по крайней мере в одной таблице (логика операций со временем) должны быть перечислены все даты только один раз в столбце.
Щелкните Данные> Отношения.
Если команда Отношения недоступна, значит книга содержит только одну таблицу.
В окне Управление связями нажмите кнопку Создать.
В окне Создание связи щелкните стрелку рядом с полем Таблица и выберите таблицу из раскрывающегося списка. В связи «один ко многим» эта таблица должна быть частью с несколькими элементами. В примере с клиентами и логикой операций со временем необходимо сначала выбрать таблицу продаж клиентов, потому что каждый день, скорее всего, происходит множество продаж.
Для элемента Столбец (чужой) выберите столбец, который содержит данные, относящиеся к элементу Связанный столбец (первичный ключ). Например, при наличии столбца даты в обеих таблицах необходимо выбрать этот столбец именно сейчас.
В поле Связанная таблица выберите таблицу, содержащую хотя бы один столбец данных, которые связаны с таблицей, выбранной в поле Таблица.
В поле Связанный столбец (первичный ключ) выберите столбец, содержащий уникальные значения, которые соответствуют значениям в столбце, выбранном в поле Столбец.
Нажмите кнопку ОК.
Дополнительные сведения о связях между таблицами в Excel
Примечания о связях
Вы узнаете, существуют ли связи, при перетаскивании полей из разных таблиц в список полей сводной таблицы. Если вам не будет предложено создать связь, то в Excel уже есть сведения, необходимые для связи данных.
Создание связей аналогично использованию VLOOKUP: вам нужны столбцы, содержащие совпадающие данные, чтобы Excel могли ссылаться на строки в одной таблице с строками из другой таблицы. В примере со временем в таблице Customer должны быть значения дат, которые также существуют в таблице аналитики времени.
В модели данных связи таблиц могут быть типа «один к одному» (у каждого пассажира есть один посадочный талон) или «один ко многим» (в каждом рейсе много пассажиров), но не «многие ко многим». Связи «многие ко многим» приводят к ошибкам циклической зависимости, таким как «Обнаружена циклическая зависимость». Эта ошибка может произойти, если вы создаете прямое подключение между двумя таблицами со связью «многие ко многим» или непрямые подключения (цепочку связей таблиц, в которой каждая таблица связана со следующей отношением «один ко многим», но между первой и последней образуется отношение «многие ко многим»). Дополнительные сведения см. в статье Связи между таблицами в модели данных.
Типы данных в двух столбцах должны быть совместимы. Подробные сведения см. в статье Типы данных в моделях данных.
Другие способы создания связей могут оказаться более понятными, особенно если неизвестно, какие столбцы использовать. Дополнительные сведения см. в статье Создание связи в представлении диаграммы в Power Pivot.
Пример. Связывание данных логики операций со временем с данными по рейсам авиакомпании
Вы можете узнать о связях обеих таблиц и логики операций со временем с помощью свободных данных на Microsoft Azure Marketplace. Некоторые из этих наборов данных очень велики, и для их загрузки за разумное время необходимо быстрое подключение к Интернету.
Нажмите Получение внешних данных > Из службы данных > Из Microsoft Azure Marketplace. В мастере импорта таблиц откроется домашняя страница Microsoft Azure Marketplace.
В разделе Price (Цена) нажмите Free (Бесплатно).
В разделе Category (Категория) нажмите Science & Statistics (Наука и статистика).
Найдите DateStream и нажмите кнопку Subscribe (Подписаться).
Введите свои учетные данные Майкрософт и нажмите Sign in (Вход). Откроется окно предварительного просмотра данных.
Прокрутите вниз и нажмите Select Query (Запрос на выборку).
Нажмите кнопку Далее.
Чтобы импортировать данные, выберите BasicCalendarUS и нажмите Готово. При быстром подключении к Интернету импорт займет около минуты. После выполнения вы увидите отчет о состоянии перемещения 73 414 строк. Нажмите Закрыть.
Чтобы импортировать второй набор данных, нажмите Получение внешних данных > Из службы данных > Из Microsoft Azure Marketplace.
В разделе Type (Тип) нажмите Data Данные).
В разделе Price (Цена) нажмите Free (Бесплатно).
Найдите US Air Carrier Flight Delays и нажмите Select (Выбрать).
Прокрутите вниз и нажмите Select Query (Запрос на выборку).
Нажмите кнопку Далее.
Нажмите Готово для импорта данных. При быстром подключении к Интернету импорт займет около 15 минут. После выполнения вы увидите отчет о состоянии перемещения 2 427 284 строк. Нажмите Закрыть. Теперь у вас есть две таблицы в модели данных. Чтобы связать их, нужны совместимые столбцы в каждой таблице.
Убедитесь, что значения в столбце DateKey в таблице BasicCalendarUS указаны в формате 01.01.2012 00:00:00. В таблице On_Time_Performance также есть столбец даты и времени FlightDate, значения которого указаны в том же формате: 01.01.2012 00:00:00. Два столбца содержат совпадающие данные одинакового типа и по крайней мере один из столбцов ( DateKey) содержит только уникальные значения. В следующих действиях вы будете использовать эти столбцы, чтобы связать таблицы.
В окне Power Pivot нажмите Сводная таблица, чтобы создать сводную таблицу на новом или существующем листе.
В списке полей разверните таблицу On_Time_Performance и нажмите ArrDelayMinutes, чтобы добавить их в область значений. В сводной таблице вы увидите общее время задержанных рейсов в минутах.
Разверните таблицу BasicCalendarUS и нажмите MonthInCalendar, чтобы добавить его в область строк.
Обратите внимание, что теперь в сводной таблице перечислены месяцы, но количество минут одинаковое для каждого месяца. Нужны одинаковые значения, указывающие на связь.
В списке полей, в разделе «Могут потребоваться связи между таблицами» нажмите Создать.
В поле «Связанная таблица» выберите On_Time_Performance, а в поле «Связанный столбец (первичный ключ)» — FlightDate.
В поле «Таблица» выберите BasicCalendarUS, а в поле «Столбец (чужой)» — DateKey. Нажмите ОК для создания связи.
Обратите внимание, что время задержки в настоящее время отличается для каждого месяца.
В таблице BasicCalendarUS перетащите YearKey в область строк над пунктом MonthInCalendar.
Теперь вы можете разделить задержки прибытия по годам и месяцам, а также другим значениям в календаре.
Советы: По умолчанию месяцы перечислены в алфавитном порядке. С помощью надстройки Power Pivot вы можете изменить порядок сортировки так, чтобы они отображались в хронологическом порядке.
Таблица BasicCalendarUS должна быть открыта в окне Power Pivot.
В главной таблице нажмите Сортировка по столбцу.
В поле «Сортировать» выберите MonthInCalendar.
В поле «По» выберите MonthOfYear.
Сводная таблица теперь сортирует каждую комбинацию «месяц и год» (октябрь 2011, ноябрь 2011) по номеру месяца в году (10, 11). Изменить порядок сортировки несложно, потому что канал DateStream предоставляет все необходимые столбцы для работы этого сценария. Если вы используете другую таблицу логики операций со временем, ваши действия будут другими.
«Могут потребоваться связи между таблицами»
По мере добавления полей в сводную таблицу вы получите уведомление о необходимости связи между таблицами, чтобы разобраться с полями, выбранными в сводной таблице.
Хотя Excel может подсказать вам, когда необходима связь, он не может подсказать, какие таблицы и столбцы использовать, а также возможна ли связь между таблицами. Чтобы получить ответы на свои вопросы, попробуйте сделать следующее.
Шаг 1. Определите, какие таблицы указать в связи
Если ваша модель содержит всего лишь несколько таблиц, понятно, какие из них нужно использовать. Но для больших моделей вам может понадобиться помощь. Один из способов заключается в том, чтобы использовать представление диаграммы в надстройке Power Pivot. Представление диаграммы обеспечивает визуализацию всех таблиц в модели данных. С помощью него вы можете быстро определить, какие таблицы отделены от остальной части модели.
Примечание: Можно создавать неоднозначные связи, которые являются недопустимыми при использовании в сводной таблице или отчете Power View. Пусть все ваши таблицы связаны каким-то образом с другими таблицами в модели, но при попытке объединения полей из разных таблиц вы получите сообщение «Могут потребоваться связи между таблицами». Наиболее вероятной причиной является то, что вы столкнулись со связью «многие ко многим». Если вы будете следовать цепочке связей между таблицами, которые подключаются к необходимым для вас таблицам, то вы, вероятно, обнаружите наличие двух или более связей «один ко многим» между таблицами. Не существует простого обходного пути, который бы работал в любой ситуации, но вы можете попробоватьсоздать вычисляемые столбцы, чтобы консолидировать столбцы, которые вы хотите использовать в одной таблице.
Шаг 2. Найдите столбцы, которые могут быть использованы для создания пути от одной таблице к другой
После того как вы определили, какая таблица не связана с остальной частью модели, пересмотрите столбцы в ней, чтобы определить содержит ли другой столбец в другом месте модели соответствующие значения.
Предположим, у вас есть модель, которая содержит продажи продукции по территории, и вы впоследствии импортируете демографические данные, чтобы узнать, есть ли корреляция между продажами и демографическими тенденциями на каждой территории. Так как демографические данные поступают из различных источников, то их таблицы первоначально изолированы от остальной части модели. Для интеграции демографических данных с остальной частью своей модели вам нужно будет найти столбец в одной из демографических таблиц, соответствующий тому, который вы уже используете. Например, если демографические данные организованы по регионам и ваши данные о продажах определяют область продажи, то вы могли бы связать два набора данных, найдя общие столбцы, такие как государство, почтовый индекс или регион, чтобы обеспечить подстановку.
Кроме совпадающих значений есть несколько дополнительных требований для создания связей.
Значения данных в столбце подстановки должны быть уникальными. Другими словами, столбец не может содержать дубликаты. В модели данных нули и пустые строки эквивалентны пустому полю, которое является самостоятельным значением данных. Это означает, что не может быть несколько нулей в столбце подстановок.
Типы данных столбца подстановок и исходного столбца должны быть совместимы. Подробнее о типах данных см. в статье Типы данных в моделях данных.
Подробнее о связях таблиц см. в статье Связи между таблицами в модели данных.
Источник
Сведения об объекте модели PowerPivot в Excel
Сведения о модели надстройки PowerPivot и ее объектной модели в Excel.
Надстройка PowerPivot позволяет визуально создавать собственные кубы. Куб данных — это массив данных, определенный в измерениях или слоях. Объект Model в Excel, реализованный надстройкой PowerPivot, обеспечивает основу для загрузки и объединения исходных данных из нескольких источников данных для анализа данных на рабочем столе, включая реляционные базы данных, многомерные источники, облачные службы, веб-каналы данных, файлы Excel, текстовые файлы и данные из Интернета. Excel интегрирует дополнительные источники данных и позволяет объединять данные из нескольких источников данных.
Создание и удаление модели PowerPivot (PPM) активируется действиями, предоставляемыми пользователем, и не может быть создан непосредственно разработчиком.
Определенные связи
В этой статье мы будем ссылаться на связь между двумя таблицами, которая определяет способ корреляции данных в качестве связей.
Связи объединяют данные из ранее не связанных источников данных. У каждой связи есть первичный и внешний ключи. Связи позволяют объединить данные в одну модель. Это позволяет:
- Фильтрация данных в одной таблице по данным в связанной таблице
- Фильтрация данных по связанным столбцам
- Интеграция столбцов из нескольких таблиц в сводную таблицу или сводную диаграмму
- Сохранение меньшего размера книг из-за того, что не нужно повторять данные
Только отдельные модели
Excel с надстройкой PowerPivot создает в книге единую модель, к которой можно добавлять источники данных, создавать, изменять и связывать таблицы. В книге может быть только одна модель.
Работа с источниками данных OLAP
При подключении к источнику данных OLAP, такому как службы Analysis Services, и создании сводных таблиц OLAP, сводных диаграмм, срезов или функций куба, модель не создается. Книги, созданные с помощью надстройки PowerPivot, могут быть отправлены в SharePoint, загружены в память на сервере и доступны другим книгам, как если бы это был обычный экземпляр SQL Server Analysis Services.
Активация создания модели PowerPivot
По умолчанию XLSX-файлы в Excel 2010 и Excel не инициализированы PPM, пока модель не будет признана необходимой. Некоторые действия запускают создание PPM, если в книге нет существующей модели. В следующих разделах описываются действия, которые активируют создание PPM, если он не существует в книге.
Добавление нового источника данных, не устаревшего
При импорте определенных типов данных в книге создается новая модель (если она еще не существует), которая содержит свойства подключения, табличное представление источников данных книги и связи между ними. Сюда входят внутренние источники данных, такие как диапазоны и таблицы. В следующей таблице перечислены различные источники данных, которые можно интегрировать с PPM.
Источник данных | Description | Предварительная версия таблицы | Поддерживается запрос |
---|---|---|---|
Microsoft SQL Server | Уже поддерживается в Excel | Да | Да |
Рынок данных Microsoft SQL Azure | Поддерживается в качестве нового источника данных канала данных | Да | Нет |
Microsoft SQL Server Parallel Data Warehouse | Поддерживается с помощью установленного драйвера OLE DB | Да | Да |
Microsoft Access | Уже поддерживается в Excel | Да | Да |
Oracle | Уже поддерживается в Excel | Да | Да |
Teradata | Доступно, если установлен драйвер OLE DB или ODBC | Нет | Нет |
Sybase | Доступно, если установлен драйвер OLE DB или ODBC | Нет | Нет |
Informix | Доступно, если установлен драйвер OLE DB или ODBC | Нет | Нет |
IBM Db2 | Доступно, если установлен драйвер OLE DB или ODBC | Нет | Нет |
Microsoft Analysis Services | Уже поддерживается в Excel | Да | Да |
Отчет (службы SSRS) | Может считывать и использовать подключения, но не может создавать в клиенте Excel | Да | Нет |
Текст | Диалоговое окно Excel в пользовательском интерфейсе ленты | Да | Нет |
Веб-каналы данных (OData) | Поддерживается в качестве нового источника данных | Да | Да |
XML | Уже поддерживается в Excel | Нет | Нет |
Списки SharePoint | Уже поддерживается в Excel. Excel использует поставщик DataFeed для подключения к SharePoint | Нет | Нет |
SharePoint | Новая функция в Excel | Да | Да |
Таблицы Excel | Определяемая пользователем таблица в Excel используется для новой функции данных. При создании таблицы создается подключение к данным листа. | Недоступно | Недоступно |
Диапазоны Excel | Определяемый пользователем диапазон в Excel используется для новой функции данных. В этом случае подключение к данным листа создается к диапазону только в том случае, если этот диапазон используется в компоненте данных, таком как диаграмма или сводная таблица. | Недоступно | Недоступно |
Создание новой сводной таблицы Excel, отличной от OLAP
Новые сводные таблицы Excel, отличные от созданных из источника данных OLAP, будут основаны на PPM, поэтому если PPM отсутствует в файле, создается новая в рамках действия создания сводной таблицы. В том числе:
- Использование пользовательского интерфейса вставки сводной таблицы
- Сводка данных с помощью пользовательского интерфейса сводной таблицы
- Сводная таблица, основанная на источнике данных, отличном от OLAP, созданном с помощью объектной модели Microsoft Visual Basic для приложений (VBA)
Создание сводной диаграммы Excel, отличной от OLAP
В Excel сводные таблицы и сводные диаграммы больше не могут быть связаны. Таким образом, при вставке сводной диаграммы в книгу без модели будет создан PPM.
Вставка сводных таблиц Excel, отличных от OLAP, из другой книги
При вставке сводной таблицы или сводной диаграммы из другой книги, основанной на PPM, в ту, которая не содержит PPM, в целевой книге будет создан новый PPM. В созданную модель будет добавлен новый источник данных, указывающий на базовые данные исходной сводной таблицы или сводной диаграммы.
Отмена создания модели PowerPivot
Все действия, которые приводят к созданию PPM, можно отменить. Если эти действия выбраны в меню отмены, фактическое создание модели не будет отменено, но в нее ничего не будет добавлено. поэтому он останется пустым. При сохранении книги, если модель пуста, модель не будет сохранена вместе с файлом. Нет явного способа удаления модели, созданной в книге вручную.
Как и в Excel 2010, существует ограничение на то, какие размеры модели можно отменить. Когда модель вырастет до этого предельного размера, функция отмены для таких действий, как обновление, больше не будет предоставляться. Текущее ограничение для собственных сводных таблиц составляет 300 000 строк, при 28 байтах ячейки это ограничение составляет примерно 8 МБ в памяти. Эти значения можно задать с помощью дополнительных параметров в Excel, как показано на следующем рисунке.
Объектная модель модели PowerPivot
Книга сможет иметь только один объект Model . Объект Model представляет объект верхнего уровня, содержащий все его связи, связи и таблицы.
Вы не можете вручную создать модель в книге. Создание модели запускается с помощью действий, описанных в предыдущем разделе этой статьи. Если какое-либо из этих действий выполняется через объектную модель (OM), создается новая модель. Эта OM предназначена для программного создания связей между таблицами модели, в результате чего создаются объединенные таблицы, объединение сводных таблиц и т. д. Чтобы вы могли это сделать, необходимо иметь возможность исследовать модель, чтобы найти соответствующие таблицы и в таблицах найти соответствующие столбцы, которые будут использоваться для создания связи.
Объект model
Объект Model хранит ссылки на подключения к книгам и сведения о таблицах и связях, содержащихся в PPM. В следующей таблице перечислены свойства объекта Model .
Свойство | Чтение и запись | Тип | Описание |
---|---|---|---|
Приложение | Только для чтения | Приложение | Возвращает объект , представляющий приложение Microsoft Excel. |
Creator | Только для чтения | xlCreator | Возвращает 32-разрядное целое число, указывающее приложение, в котором был создан указанный объект. |
Parent | Только для чтения | Object | Возвращает объект Object , представляющий родительский объект указанного объекта Model . |
ModelTables | Только для чтения | ModelTable | Коллекция таблиц внутри PPM. |
ModelRelationships | Только для чтения | ModelRelationships | Коллекция связей между таблицами PPM. |
DataModelConnection | Недоступно | WorkbookConnection | Возвращает объект подключения к книге модели из коллекции подключений книги, которая подключается к модели. |
Метод Model.AddConnection
Добавляет новое подключение к книге к модели с теми же свойствами, что и у указанного в качестве аргумента. Этот метод работает только с внешними подключениями, не зависящими от модели, и возвращает ошибку при вызове с подключением внешней модели в качестве аргумента. При вызове этого метода создается новое соединение модели, которое называется так же, как и устаревшее соединение с целым числом в конце, чтобы сделать имя уникальным. В следующей таблице перечислены параметры метода AddConnection .
Имя | Необходимость | Тип | Описание |
---|---|---|---|
ConnectionToDataSource | Обязательный | WorkbookConnection | Подключение книги |
Метод Model.CreateModelWorkbookConnection
Вызов этого метода возвращает объект WorkbookConnection типа ModelConnection. Возвращается подключение модели, подключенное к указанной таблице. Этот тип подключения может использоваться только таблицами запросов в Excel. В следующей таблице перечислены параметры метода CreateModelWorkbookConnection .
Имя | Необходимость | Тип | Описание |
---|---|---|---|
ModelTable | Обязательный | Variant | Имя таблицы модели или объект таблицы модели. |
Метод Model.Initialize
Метод Initialize объекта Model не имеет параметров. Инициализирует PPM. Это вызывается по умолчанию при первом использовании модели.
Метод Model.Refresh
Метод Refresh объекта Model не имеет параметров. Обновляет все источники данных, связанные с моделью, полностью обрабатывает модель и обновляет все функции данных Excel, связанные с объектом Model .
Объект ModelChanges
Представляет изменения, внесенные в PPM. Объект ModelChanges содержит сведения о том, какие изменения были внесены в модель данных при возникновении события Workbook.ModelChange после операции модели. Когда Excel вносит изменения в модель данных, в одной операции можно вносить несколько изменений, а объект ModelChanges будет содержать сведения обо всех изменениях, внесенных в одну операцию модели. В следующей таблице перечислены свойства объекта ModelChanges .
Свойство | Чтение и запись | Тип | Описание |
---|---|---|---|
Приложение | Только для чтения | Приложение | Возвращает объект , представляющий приложение Microsoft Excel. |
ColumnsAdded | Только для чтения | ModelColumnNames | Возвращает коллекцию ModelColumnNames объектов ModelColumnName , которые представляют все столбцы, добавленные в рамках операции модели. |
ColumnsChanged | Только для чтения | ModelColumnChanges | Возвращает коллекцию ModelColumnChanges объектов ModelColumnChange , которые представляют имена таблиц и имена столбцов всех столбцов таблицы, для которых тип данных был изменен в рамках операции модели. |
ColumnsDeleted | Только для чтения | ModelColumnNames | Возвращает коллекцию ModelColumnNames объектов ModelColumnName , представляющих все столбцы, которые были удалены в рамках операции модели. |
MeasuresAdded | Только для чтения | ModelMeasureNames | Возвращает коллекцию ModelMeasureNames объектов ModelMeasureName , представляющих все меры, добавленные в рамках операции модели. |
Parent | Только для чтения | Object | Возвращает объект Object , представляющий родительский объект указанного объекта ModelChanges . |
RelationshipChange | Только для чтения | Boolean | При значении True одна или несколько связей в модели были изменены (добавлены, удалены или изменены) в рамках операции модели. Если задано значение False, связи не были изменены во время операции. |
TableNamesChanged | Только для чтения | ModelTableNameChanges | Возвращает коллекцию ModelTableNameChanges объектов ModelTableNameChange , которая представляет старые и новые имена всех таблиц, которые были переименованы в модели в рамках операции модели. |
TablesAdded | Только для чтения | ModelTableNames | Возвращает коллекцию ModelTableNames имен таблиц в виде строк, представляющих все таблицы, добавленные в модель в рамках операции модели. |
TablesDeleted | Только для чтения | ModelTableNames | Возвращает коллекцию ModelTableNames имен таблиц в виде строк, представляющих все таблицы, которые были удалены из модели в рамках операции модели. |
TablesModified | Только для чтения | ModelTableNames | Возвращает коллекцию ModelTableNames имен таблиц в виде строк, представляющих все таблицы, которые были обновлены или пересчитаны в рамках операции модели. |
UnknownChange | Только для чтения | Boolean | Значение true , если в модель было внесено не указанное изменение в рамках транзакции модели. |
Коллекция ModelColumnChanges
Коллекция объектов ModelColumnChange , представляющих столбцы, для которых тип данных был изменен в PPM. В следующей таблице перечислены свойства коллекции ModelColumnChanges .
Свойство | Чтение и запись | Тип | Описание |
---|---|---|---|
Приложение | Только для чтения | Приложение | Возвращает объект , представляющий приложение Microsoft Excel. |
Count | Только для чтения | Long | Возвращает количество объектов ModelColumnChange в коллекции |
Creator | Только для чтения | xlCreator | Возвращает 32-разрядное целое число, указывающее приложение, в котором был создан указанный объект. |
Parent | Только для чтения | Object | Возвращает объект Object , представляющий родительский объект указанного объекта ModelColumnChanges . |
Метод ModelColumnChanges.Item
Возвращает один объект из коллекции ModelColumnChanges . В следующей таблице перечислены параметры метода Item .
Имя | Необходимость | Тип | Описание |
---|---|---|---|
Указатель | Обязательный | Variant | Номер индекса или имя объекта. |
Объект ModelColumnChange
Объект , представляющий столбец в таблице в PPM, для которого был изменен тип данных. В следующей таблице перечислены свойства объекта ModelColumnChange .
Свойство | Чтение и запись | Тип | Описание |
---|---|---|---|
Приложение | Только для чтения | Приложение | Возвращает объект , представляющий приложение Microsoft Excel. |
ColumnName | Только для чтения | String | Строка , представляющая имя столбца, для которого был изменен тип данных. |
Creator | Только для чтения | xlCreator | Возвращает 32-разрядное целое число, указывающее приложение, в котором был создан указанный объект. |
Parent | Только для чтения | Object | Возвращает объект Object , представляющий родительский объект указанного объекта ModelColumnChange . |
TableName | Только для чтения | String | Строка , представляющая имя таблицы в PPM, для которой был изменен тип данных столбца. |
Коллекция ModelColumnNames
Коллекция объектов ModelColumnName , представляющая столбцы таблиц в PPM. В следующей таблице перечислены свойства коллекции ModelColumnNames .
Свойство | Чтение и запись | Тип | Описание |
---|---|---|---|
Приложение | Только для чтения | Приложение | Возвращает объект , представляющий приложение Microsoft Excel. |
Count | Только для чтения | Long | Возвращает количество объектов ModelColumnName в коллекции |
Creator | Только для чтения | xlCreator | Возвращает 32-разрядное целое число, указывающее приложение, в котором был создан указанный объект. |
Parent | Только для чтения | Object | Возвращает объект Object , представляющий родительский объект указанной коллекции ModelColumnNames . |
Метод ModelColumnNames.Item
Возвращает один объект из коллекции ModelColumnNames . В следующей таблице перечислены параметры метода Item .
Имя | Необходимость | Тип | Описание |
---|---|---|---|
Указатель | Обязательный | Variant | Номер индекса или имя объекта. |
Объект ModelColumnName
Объект , представляющий имя столбца в PPM. В следующей таблице перечислены свойства объекта ModelColumnName .
Свойство | Чтение и запись | Тип | Описание |
---|---|---|---|
Приложение | Только для чтения | Приложение | Возвращает объект , представляющий приложение Microsoft Excel. |
ColumnName | Только для чтения | String | Строка , представляющая имя столбца таблицы, определяемой свойством TableName . |
Creator | Только для чтения | xlCreator | Возвращает 32-разрядное целое число, указывающее приложение, в котором был создан указанный объект. |
Parent | Только для чтения | Object | Возвращает объект Object , представляющий родительский объект указанного объекта ModelColumnName . |
TableName | Только для чтения | String | Строка , представляющая имя таблицы в PPM. |
Объект ModelConnection
Объект ModelConnection будет содержать сведения о новом типе подключения модели, представленном в Excel для взаимодействия со встроенным PPM. В следующей таблице перечислены свойства объекта ModelConnection .
Свойство | Чтение и запись | Тип | Описание |
---|---|---|---|
ADOConnection | Только для чтения | ADOConnection | Используется для создания открытого подключения к источнику данных. Позволяет надстройкам, таким как PowerViewer, создавать прямое подключение к подсистеме и, следовательно, к модели данных. |
Приложение | Только для чтения | Приложение | Возвращает объект , представляющий приложение Microsoft Excel. |
CommandText | Чтение и запись | Variant | Возвращает или задает командную строку для указанного источника данных (таблицы). |
CommandType | Чтение и запись | xlCmdType | Возвращает или задает одну из констант xlCmdType , указывающую тип команды. |
Creator | Только для чтения | xlCreator | Возвращает 32-разрядное целое число, указывающее приложение, в котором был создан указанный объект. |
Parent | Только для чтения | Object | Возвращает объект Object , представляющий родительский объект указанного объекта ModelConnection . |
Коллекция ModelMeasureNames
Коллекция ModelMeasureNames содержит коллекцию объектов ModelMeasureName в PPM. В следующей таблице перечислены свойства коллекции ModelMeasureNames .
Свойство | Чтение и запись | Тип | Описание |
---|---|---|---|
Приложение | Только для чтения | Приложение | Возвращает объект , представляющий приложение Microsoft Excel. |
Count | Только для чтения | Long | Возвращает число объектов ModelMeasureName в коллекции |
Creator | Только для чтения | xlCreator | Возвращает 32-разрядное целое число, указывающее приложение, в котором был создан указанный объект. |
Parent | Только для чтения | Object | Возвращает объект Object , представляющий родительский объект указанной коллекции ModelMeasureNames . |
Метод ModelMeasureNames.Item
Возвращает один объект из коллекции ModelMeasureNames . В следующей таблице перечислены параметры метода Item .
Имя | Необходимость | Тип | Описание |
---|---|---|---|
Указатель | Обязательный | Variant | Номер индекса или имя объекта. |
Объект ModelMeasureName
Объект , представляющий имя меры в PPM. В следующей таблице перечислены свойства объекта ModelMeasureName .
Свойство | Чтение и запись | Тип | Описание |
---|---|---|---|
Приложение | Только для чтения | Приложение | Возвращает объект , представляющий приложение Microsoft Excel. |
MeasureName | Только для чтения | String | Строка , представляющая новое имя меры, которая была добавлена в объект ModelTable , определенный свойством TableName . |
Creator | Только для чтения | xlCreator | Возвращает 32-разрядное целое число, указывающее приложение, в котором был создан указанный объект. |
Parent | Только для чтения | Object | Возвращает объект Object , представляющий родительский объект указанного объекта ModelMeasureName . |
TableName | Только для чтения | String | Строка , представляющая имя таблицы в PPM. |
Коллекция ModelRelationships
Коллекция ModelRelationships содержит коллекцию объектов ModelRelationship в PPM. В следующей таблице перечислены свойства коллекции ModelRelationships .
Свойство | Чтение и запись | Тип | Описание |
---|---|---|---|
Приложение | Только для чтения | Приложение | Возвращает объект , представляющий приложение Microsoft Excel. |
Count | Только для чтения | Long | Возвращает количество объектов ModelRelationship в коллекции |
Creator | Только для чтения | xlCreator | Возвращает 32-разрядное целое число, указывающее приложение, в котором был создан указанный объект. |
Parent | Только для чтения | Object | Возвращает объект Object , представляющий родительский объект указанной коллекции ModelRelationships . |
Метод ModelRelationships.Add
Добавляет связь в коллекцию ModelRelationships . В следующей таблице перечислены параметры метода Add .
Имя | Необходимость | Тип | Описание |
---|---|---|---|
ForeignKeyColumn | Обязательный | ModelTableColumn | Объект ModelTableColumn , представляющий внешний ключевой столбец в таблице на многоуровневой стороне связи «один ко многим». |
PrimaryKeyColumn | Обязательный | ModelTableColumn | Объект ModelTableColumn , представляющий столбец первичного ключа в таблице с одной стороны связи «один ко многим». |
Метод ModelRelationships.Item
Возвращает один объект из коллекции ModelRelationships . В следующей таблице перечислены параметры метода Item .
Имя | Необходимость | Тип | Описание |
---|---|---|---|
Указатель | Обязательный | Variant | Номер индекса или имя объекта. |
Объект ModelRelationship
Представляет связь между объектами ModelTableColumn . Используется при программном создании связей. В следующей таблице перечислены свойства объекта ModelRelationship .
Свойство | Чтение и запись | Тип | Описание |
---|---|---|---|
Active | Чтение и запись | Boolean | При значении True связь активна. |
Приложение | Только для чтения | Приложение | Возвращает объект , представляющий приложение Microsoft Excel. |
Creator | Только для чтения | xlCreator | Возвращает 32-разрядное целое число, указывающее приложение, в котором был создан указанный объект. |
ForeignKeyColumn | Только для чтения | ModelTableColumn | Содержит объект ModelTableColumn , представляющий внешний ключевой столбец на многоуровневой стороне связи «один ко многим». |
ForeignKeyTable | Только для чтения | ModelTable | Содержит объект ModelTable , представляющий таблицу на стороне множества связи «один ко многим». |
Parent | Только для чтения | Object | Возвращает объект объектной модели, представляющий модель, в которой находится объект ModelRelationship . |
PrimaryKeyColumn | Только для чтения | ModelTableColumn | Содержит объект ModelTableColumn , представляющий первичный ключевой столбец в таблице с одной стороны связи «один ко многим». |
PrimaryKeyTable | Только для чтения | ModelTable | Содержит объект ModelTable , представляющий таблицу с одной стороны связи «один ко многим». |
Метод ModelRelationship.Delete
Метод Delete объекта ModelRelationship не имеет параметров. Удаляет связь.
Коллекция ModelTables
Коллекция ModelTables содержит коллекцию объектов ModelTable в PPM. В следующей таблице перечислены свойства коллекции ModelTables .
Свойство | Чтение и запись | Тип | Описание |
---|---|---|---|
Приложение | Только для чтения | Приложение | Возвращает объект , представляющий приложение Microsoft Excel. |
Count | Только для чтения | Long | Возвращает количество объектов ModelTable в коллекции |
Creator | Только для чтения | xlCreator | Возвращает 32-разрядное целое число, указывающее приложение, в котором был создан указанный объект. |
Parent | Только для чтения | Object | Возвращает объект Object , представляющий родительский объект указанной коллекции ModelTables . |
Метод ModelTables.Item
Возвращает один объект из коллекции ModelTables . В следующей таблице перечислены параметры метода Item.
Имя | Необходимость | Тип | Описание |
---|---|---|---|
Указатель | Обязательный | Variant | Номер индекса или имя объекта. |
Объект ModelTable
Представляет таблицу в объекте Model . Объект ModelTable доступен только для чтения, что означает, что его нельзя создать или изменить с помощью объектной модели. Для каждой таблицы в модели имеется объект ModelTable . В следующей таблице перечислены свойства объекта ModelTable .
Свойство | Чтение и запись | Тип | Описание |
---|---|---|---|
Приложение | Только для чтения | Приложение | Возвращает объект , представляющий приложение Microsoft Excel. |
Creator | Только для чтения | xlCreator | Возвращает 32-разрядное целое число, указывающее приложение, в котором был создан указанный объект. |
ModelTableColumns | Только для чтения | ModelTableColumns | Коллекция объектов ModelTableColumn , составляющих объект ModelTable . |
Имя | Только для чтения | String | Возвращает имя объекта ModelTable . |
Parent | Только для чтения | Object | Возвращает объект Object , представляющий модель, в которой находится объект ModelTable . |
RecordCount | Только для чтения | Integer | Возвращает общее число строк для объекта ModelTable . |
SourceName | Только для чтения | String | Имя таблицы в источнике данных. Если в таблице нет источника данных (созданного в модели), свойство вернет ошибку. |
SourceWorkbookConnection | Только для чтения | WorkbookConnection | Возвращает подключение к книге, из которой был создан объект ModelTable . |
Метод ModelTable.Refresh
Метод Refresh объекта ModelTable не имеет параметров. Обновляет исходные подключения таблицы модели.
Коллекция ModelTableColumns
Коллекция ModelTableColumns содержит коллекцию объектов ModelTableColumn в PPM. В следующей таблице перечислены свойства коллекции ModelTableColumns .
Свойство | Чтение и запись | Тип | Описание |
---|---|---|---|
Приложение | Только для чтения | Приложение | Возвращает объект , представляющий приложение Microsoft Excel. |
Count | Только для чтения | Long | Возвращает число объектов ModelTableColumn в коллекции |
Creator | Только для чтения | xlCreator | Возвращает 32-разрядное целое число, указывающее приложение, в котором был создан указанный объект. |
Parent | Только для чтения | Object | Возвращает объект Object , представляющий родительский объект указанной коллекции ModelTableColumns . |
Метод ModelTableColumns.Item
Возвращает один объект из коллекции ModelTableColumns . В следующей таблице перечислены параметры метода Item .
Имя | Необходимость | Тип | Описание |
---|---|---|---|
Указатель | Обязательный | Variant | Номер индекса или имя объекта. |
Объект ModelTableColumn
Представляет один столбец в объекте ModelTable . Используется при программном создании связей. В следующей таблице перечислены свойства объекта ModelTableColumn .
Свойство | Чтение и запись | Тип | Описание |
---|---|---|---|
Приложение | Только для чтения | Приложение | Возвращает объект , представляющий приложение Microsoft Excel. |
Creator | Только для чтения | xlCreator | Возвращает 32-разрядное целое число, указывающее приложение, в котором был создан указанный объект. |
DataType | Только для чтения | xlParameterDataType | Возвращает тип данных столбца. |
Имя | Только для чтения | String | Возвращает имя объекта ModelTableColumn . |
Parent | Только для чтения | Object | Возвращает объект Object , представляющий родительский объект указанного объекта ModelTableColumn . |
Коллекция ModelTableNames
Коллекция ModelTableNames содержит коллекцию объектов ModelTableName в PPM. В следующей таблице перечислены свойства коллекции ModelTableNames .
Свойство | Чтение и запись | Тип | Описание |
---|---|---|---|
Приложение | Только для чтения | Приложение | Возвращает объект , представляющий приложение Microsoft Excel. |
Count | Только для чтения | Long | Возвращает число объектов ModelTableName в коллекции |
Creator | Только для чтения | xlCreator | Возвращает 32-разрядное целое число, указывающее приложение, в котором был создан указанный объект. |
Parent | Только для чтения | Object | Возвращает объект Object , представляющий родительский объект указанного объекта ModelTableNames . |
Метод ModelTableNames.Item
Возвращает один объект из коллекции ModelTableNames . В следующей таблице перечислены параметры метода Item .
Имя | Необходимость | Тип | Описание |
---|---|---|---|
Указатель | Обязательный | Variant | Номер индекса или имя объекта. |
Коллекция ModelTableNameChanges
Коллекция ModelTableNameChanges содержит коллекцию объектов ModelTableNameChange в PPM. В следующей таблице перечислены свойства коллекции ModelTableNameChanges .
Свойство | Чтение и запись | Тип | Описание |
---|---|---|---|
Приложение | Только для чтения | Приложение | Возвращает объект , представляющий приложение Microsoft Excel. |
Count | Только для чтения | Long | Возвращает число объектов ModelTableNameChange в коллекции. |
Creator | Только для чтения | xlCreator | Возвращает 32-разрядное целое число, указывающее приложение, в котором был создан указанный объект. |
Parent | Только для чтения | Object | Возвращает объект Object , представляющий родительский объект указанной коллекции ModelTableNameChanges . |
Метод ModelTableNameChanges.Item
Возвращает один объект из коллекции ModelTableNameChanges . В следующей таблице перечислены параметры метода Item .
Имя | Необходимость | Тип | Описание |
---|---|---|---|
Указатель | Обязательный | Variant | Номер индекса или имя объекта. |
Объект ModelTableNameChange
Объект , представляющий старое и новое имя таблицы, которая была переименована в PPM. В следующей таблице перечислены свойства объекта ModelTableNameChange .
Свойство | Чтение и запись | Тип | Описание |
---|---|---|---|
Приложение | Только для чтения | Приложение | Возвращает объект , представляющий приложение Microsoft Excel. |
Creator | Только для чтения | xlCreator | Возвращает 32-разрядное целое число, указывающее приложение, в котором был создан указанный объект. |
Parent | Только для чтения | Object | Возвращает объект Object , представляющий модель, в которой находится объект ModelTableNameChange . |
TableNameNew | Только для чтения | String | Возвращает новое имя таблицы. |
TableNameOld | Только для чтения | String | Возвращает старое имя таблицы. |
Заключение
Надстройка PowerPivot позволяет создавать собственные кубы, а не использовать стандартные кубы, которые Excel создает для вас за power tables. С помощью этой надстройки можно просматривать кубы в визуальном контексте и изменять свойства куба. Объект Model хранит ссылки на подключения к книгам и сведения о таблицах и связях, содержащихся в модели PowerPivot.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
Jack Famous Пользователь Сообщений: 10846 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#1 17.11.2016 21:59:29 Доброго вечера, уважаемые форумчане! В посте №24 — рабочий макрос.
Прикрепленные файлы
Изменено: Jack Famous — 24.11.2016 09:31:50 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
|||||
SuperCat Пользователь Сообщений: 2737 |
Опять ТЗ строчим? There is no knowledge that is not power |
Jack Famous Пользователь Сообщений: 10846 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#3 17.11.2016 22:47:53 SuperCat, так и знал)))) да вот как ни напишу — всё как ТЗ выглядит))))
Изменено: Jack Famous — 18.11.2016 00:10:27 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
|
С.М. Пользователь Сообщений: 936 |
#4 18.11.2016 02:51:45
Изменено: С.М. — 18.11.2016 02:55:06 |
|
Jack Famous Пользователь Сообщений: 10846 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
С.М., наконец-то первый вариант по теме))))) спасибо вам большое — как обращаться с этим зверем?))) выделял и 1 и 2 таблицу, запускал макрос — ничего((( Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#6 18.11.2016 12:11:34 Доброе время суток
Несколько щелчков мышкой… в Power Query. И выясняется, что в результате есть ошибочка Прикрепленные файлы
Изменено: Андрей VG — 18.11.2016 12:12:23 |
||
Jack Famous Пользователь Сообщений: 10846 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
Андрей VG, здравствуйте!))) спасибо за пример, но пишет «указанного файла не существует» Изменено: Jack Famous — 18.11.2016 12:15:52 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#8 18.11.2016 12:15:38
Вы слишком быстро пришли за примером. Обнаружил, что не ту версию файла прикрепил. Переложил, и тут вы — качать… Накладка, однако |
||
Jack Famous Пользователь Сообщений: 10846 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
Андрей VG, спасибо большое)))) есть возможность рассказать, как эту динамическую связку организовывать? Я бы в динамике всё построил… Изменено: Jack Famous — 18.11.2016 12:19:51 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
JeyCi Пользователь Сообщений: 3357 |
#10 18.11.2016 12:29:23
не делайте непроверенных выводов!.. в PQ — язык другой (M-language), язык DAX в PP #14 —> Расширенный редактор Изменено: JeyCi — 18.11.2016 12:32:33 чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок — обратитесь к собеседнику на ВЫ — ответ на ваш вопрос получите — а остальное вас не касается (п.п.п. на форумах) |
||
Максим Зеленский Пользователь Сообщений: 4646 Microsoft MVP |
#11 18.11.2016 12:31:51 Можно чуть подсократить:
F1 творит чудеса |
||
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#12 18.11.2016 13:05:09
Конечно!
|
||||
С.М. Пользователь Сообщений: 936 |
#13 18.11.2016 13:27:25
Не надо ничего выделять, жмём кнопку : Прикрепленные файлы
|
||
Jack Famous Пользователь Сообщений: 10846 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
С.М., огромное спасибо!!! Буду разбираться с кодом))) Андрей VG и Максим Зеленский , благодарою за вариант решения через PQ — в перспективе этот вариант, скорее всего станет основным, а пока буду учить матчасть)))) Изменено: Jack Famous — 18.11.2016 13:45:07 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
Максим Зеленский Пользователь Сообщений: 4646 Microsoft MVP |
#15 18.11.2016 15:11:30 Андрей VG, нет предела совершенству
Изменено: Максим Зеленский — 18.11.2016 15:12:10 F1 творит чудеса |
|
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#16 18.11.2016 15:33:34 Максим, у меня PQL через раз ругается, что не может выполнить Join из-за одинаковых названий столбцов
, поэтому и пришлось делать «лишнюю» операцию. Причём, если соединение по двум и более столбцам, тогда без вопросов — отрабатывает как и должно быть. Один из глюков PQL — может в последних и поправили. |
||
странно, у меня не ругается… |
|
Максим Зеленский Пользователь Сообщений: 4646 Microsoft MVP |
#18 18.11.2016 16:46:01 я думаю, в этом дело:
F1 творит чудеса |
||
Jack Famous Пользователь Сообщений: 10846 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
Максим Зеленский, Андрей VG, подскажите, а эти формулы только руками вбивать или есть что-то вроде мастера функций, как в Excel — тогда дело за синтаксисом и практикой)) Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
JeyCi Пользователь Сообщений: 3357 |
#20 18.11.2016 18:24:47
Jack Famous вы кнопки в надстройке нажимайте и смотрите, что получается, а в расширенном редакторе — весь код целиком увидеть можно… вопрос в том в какой последовательности какие кнопки (в зависимости от того, какие шаги по коду совершить хотите)… последовательность — это уже вопрос алгоритмизации… для получения нужного на выходе… вы не стесняйтесь знакомиться с надстройкой , если чётко себе представляете алгоритм, который вам надо закодировать [решение порождает человек, простые шаги может пройти по кнопкам на ленте PQ]… сложные моменты придётся править руками, когда захотите выполнять ювелирную работу (как с макрорекодером)… — что вызвало проблему, чтобы самому прийти к такому выводу?? — особенно после прохождения по моему линку в #10 и ответа Максима там… Изменено: JeyCi — 18.11.2016 18:30:27 чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок — обратитесь к собеседнику на ВЫ — ответ на ваш вопрос получите — а остальное вас не касается (п.п.п. на форумах) |
||
С.М. Пользователь Сообщений: 936 |
#21 18.11.2016 20:05:07
|
|||
Jack Famous Пользователь Сообщений: 10846 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
JeyCi, надо пробовать — спасибо за напутствие!)) Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
Jack Famous Пользователь Сообщений: 10846 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
С.М., посидел, посмотрел — из переменных, которые смог: разглядеть только типы, помещения и таблица. Первые 2 — в виде именованных диапазонов, а таблица и есть таблица)) не могли бы вы изменить сам принцип работы макроса? Сейчас он решает одну конкретную задачу — ни влево, ни в право, к тому же он вставляет не значения столбца, а самостоятельно индексирует третий столбец справочника. То есть, если мне нужно вставлять какой-либо другой столбец — это очень замороченная процедура получится… Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
Jack Famous Пользователь Сообщений: 10846 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#24 24.11.2016 09:41:44 Доброго утра, уважаемые форумчане!
Прикрепленные файлы
Изменено: Jack Famous — 24.11.2016 10:25:06 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
|||
Jack Famous Пользователь Сообщений: 10846 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
Отдельная благодарность Андрей VG, Максим Зеленский и JeyCi — с их подсказок удалось довольно простым способом осуществить подобную связь в динамически обновляемом виде через запросы в Power Query — теперь, связав 2 и более таблицы через запросы по ключевым полям и удалив в этих запросах всё лишнее, можно готовый итоговый запрос выгрузить в книгу и строить сводную по нему. При изменении/дополнении/удалении данных в справочниках — всё динамически обновляется и в сводной. Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
Максим Зеленский Пользователь Сообщений: 4646 Microsoft MVP |
#26 29.11.2016 15:40:57
F1 творит чудеса |
|||
Jack Famous Пользователь Сообщений: 10846 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
Максим Зеленский, да — добавить в модель данных и готово))) подскажите, пожалуйста аналоги функций СУММЕСЛИМН и СЧЁТЕСЛИМН для Power Query. Или это только через DAX в Power Pivot? А то таблички посвязывал по ключевым полям (6 штук), а этого капец как не хватает… Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#28 29.11.2016 21:21:22 Доброе время суток
Смотря что вы под этим подразумеваете. В общем случае — фильтрация по критериям и группировка (плоская сводная таблица). |
||
Jack Famous Пользователь Сообщений: 10846 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
Андрей VG, доброй ночи! Изменено: Jack Famous — 30.11.2016 00:24:07 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
Jack Famous Пользователь Сообщений: 10846 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#30 30.11.2016 00:27:28 МОДЕРАТОРАМ: предлагаю (из-за развития темы вне названия) следующее название темы — «Объединение таблиц. Макросы, Power Query и Power Pivot» Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
FULL OUTER JOIN средствами excel |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Связи в эксель
Как разорвать связи в Excel
Описание проблемы
Когда в формуле вы указываете ссылку на другую книгу, то Excel образует с ней связь. Эта связь будет прекрасно работать и обновляться автоматически в том случае, когда открыты обе книги.
К сожалению, если книга-источник была удалена/перемещена или переименована, то связь нарушится. Также связь будет потеряна если вы переместите конечный файл (содержащий ссылку). Если вы передадите только конечный файл по почте, то получатель тоже не сможет обновить связи.
При нарушении связи, ячейки со ссылками на другие книги будут содержать ошибки #ССЫЛКА.
Как разорвать связь
Один из способов решения данной проблемы — разрыв связи. Если в файле только одна связь, то сделать это довольно просто:
- Перейдите на вкладку Данные.
- Выберите команду Изменить связи в разделе Подключения.
- Нажмите Разорвать связь.
ВАЖНО! При разрыве связи все формулы ссылающиеся на книгу-источник будут преобразованы в значения! Отмена данной операции невозможна!
Как разорвать связь со всеми книгами
Для удобства, можно воспользоваться макросом, который разорвет связи со всеми книгами. Макрос входит в состав надстройки VBA-Excel. Чтобы им воспользоваться необходимо:
- Перейти на вкладку VBA-Excel.
- В меню Связи выбрать команду Разорвать все связи.
Код на VBA
Код макроса удаляющего все связи с книгой представлен ниже. Можете скопировать его в свой проект.
Как разорваться связи только в выделенном диапазоне
Иногда в книге имеется много связей и есть опасения, что при удалении связи можно удалить лишнюю. Чтобы этого избежать с помощью надстройки можно удалить связи только в выделенном диапазоне. Для этого:
- Выделите диапазон данных.
- Перейдите на вкладку VBA-Excel (доступна после установки).
- В меню Связи выберите команду Разорвать связи в выделенных ячейках.
Создание связи между двумя таблицами в Excel
Вы применяли функцию ВПР, чтобы переместить данные столбца из одной таблицы в другой? Так как в Excel теперь есть встроенная модель данных, функция ВПР устарела. Вы можете создать связь между двумя таблицами на основе совпадающих данных в них. Затем можно создать листы Power View или сводные таблицы и другие отчеты с полями из каждой таблицы, даже если они получены из различных источников. Например, если у вас есть данные о продажах клиентам, вам может потребоваться импортировать и связать данные логики операций со временем, чтобы проанализировать тенденции продаж по годам и месяцам.
Все таблицы в книге указываются в списках полей сводной таблицы и Power View.
При импорте связанных таблиц из реляционной базы данных Excel часто может создавать эти связи в модели данных, формируемой в фоновом режиме. В других случаях необходимо создавать связи вручную.
Убедитесь, что книга содержит хотя бы две таблицы и в каждой из них есть столбец, который можно сопоставить со столбцом из другой таблицы.
Присвойте каждой из таблиц понятное имя: На вкладке Работа с таблицами щелкните Конструктор > Имя таблицы и введите имя.
Убедитесь, что столбец в одной из таблиц имеет уникальные значения без дубликатов. Excel может создавать связи только в том случае, если один столбец содержит уникальные значения.
Например, чтобы связать продажи клиента с логикой операций со временем, обе таблицы должны включать дату в одинаковом формате (например, 01.01.2012) и по крайней мере в одной таблице (логика операций со временем) должны быть перечислены все даты только один раз в столбце.
Щелкните Данные> Отношения.
Если команда Отношения недоступна, значит книга содержит только одну таблицу.
В окне Управление связями нажмите кнопку Создать.
В окне Создание связи щелкните стрелку рядом с полем Таблица и выберите таблицу из раскрывающегося списка. В связи «один ко многим» эта таблица должна быть частью с несколькими элементами. В примере с клиентами и логикой операций со временем необходимо сначала выбрать таблицу продаж клиентов, потому что каждый день, скорее всего, происходит множество продаж.
Для элемента Столбец (чужой) выберите столбец, который содержит данные, относящиеся к элементу Связанный столбец (первичный ключ). Например, при наличии столбца даты в обеих таблицах необходимо выбрать этот столбец именно сейчас.
В поле Связанная таблица выберите таблицу, содержащую хотя бы один столбец данных, которые связаны с таблицей, выбранной в поле Таблица.
В поле Связанный столбец (первичный ключ) выберите столбец, содержащий уникальные значения, которые соответствуют значениям в столбце, выбранном в поле Столбец.
Нажмите кнопку ОК.
Дополнительные сведения о связях между таблицами в Excel
Примечания о связях
Вы узнаете, существуют ли связи, при перетаскивании полей из разных таблиц в список полей сводной таблицы. Если вам не будет предложено создать связь, то в Excel уже есть сведения, необходимые для связи данных.
Создание связей похоже на использование Влукупс: вам понадобятся столбцы с соответствующими данными, чтобы приложение Excel могло перекрестно ссылаться на строки в одной таблице с помощью других таблиц. В примере логики операций со временем в таблице клиента должны быть указаны значения даты, которые также есть в таблице операций со временем.
В модели данных связи таблиц могут быть типа «один к одному» (у каждого пассажира есть один посадочный талон) или «один ко многим» (в каждом рейсе много пассажиров), но не «многие ко многим». Связи «многие ко многим» приводят к ошибкам циклической зависимости, таким как «Обнаружена циклическая зависимость». Эта ошибка может произойти, если вы создаете прямое подключение между двумя таблицами со связью «многие ко многим» или непрямые подключения (цепочку связей таблиц, в которой каждая таблица связана со следующей отношением «один ко многим», но между первой и последней образуется отношение «многие ко многим»). Дополнительные сведения см. в статье Связи между таблицами в модели данных.
Типы данных в двух столбцах должны быть совместимы. Подробные сведения см. в статье Типы данных в моделях данных.
Другие способы создания связей могут оказаться более понятными, особенно если неизвестно, какие столбцы использовать. Дополнительные сведения см. в статье Создание связи в представлении диаграммы в Power Pivot.
Пример. Связывание данных логики операций со временем с данными по рейсам авиакомпании
Вы можете узнать о связях обеих таблиц и логики операций со временем с помощью свободных данных на Microsoft Azure Marketplace. Некоторые из этих наборов данных очень велики, и для их загрузки за разумное время необходимо быстрое подключение к Интернету.
Нажмите Получение внешних данных > Из службы данных > Из Microsoft Azure Marketplace. В мастере импорта таблиц откроется домашняя страница Microsoft Azure Marketplace.
В разделе Price (Цена) нажмите Free (Бесплатно).
В разделе Category (Категория) нажмите Science & Statistics (Наука и статистика).
Найдите DateStream и нажмите кнопку Subscribe (Подписаться).
Введите свои учетные данные Майкрософт и нажмите Sign in (Вход). Откроется окно предварительного просмотра данных.
Прокрутите вниз и нажмите Select Query (Запрос на выборку).
Нажмите кнопку Далее.
Чтобы импортировать данные, выберите BasicCalendarUS и нажмите Готово. При быстром подключении к Интернету импорт займет около минуты. После выполнения вы увидите отчет о состоянии перемещения 73 414 строк. Нажмите кнопку Закрыть.
Чтобы импортировать второй набор данных, нажмите Получение внешних данных > Из службы данных > Из Microsoft Azure Marketplace.
В разделе Type (Тип) нажмите Data Данные).
В разделе Price (Цена) нажмите Free (Бесплатно).
Найдите US Air Carrier Flight Delays и нажмите Select (Выбрать).
Прокрутите вниз и нажмите Select Query (Запрос на выборку).
Нажмите кнопку Далее.
Нажмите Готово для импорта данных. При быстром подключении к Интернету импорт займет около 15 минут. После выполнения вы увидите отчет о состоянии перемещения 2 427 284 строк. Нажмите Закрыть. Теперь у вас есть две таблицы в модели данных. Чтобы связать их, нужны совместимые столбцы в каждой таблице.
Убедитесь, что значения в столбце DateKey в таблице BasicCalendarUS указаны в формате 01.01.2012 00:00:00. В таблице On_Time_Performance также есть столбец даты и времени FlightDate, значения которого указаны в том же формате: 01.01.2012 00:00:00. Два столбца содержат совпадающие данные одинакового типа и по крайней мере один из столбцов (DateKey) содержит только уникальные значения. В следующих действиях вы будете использовать эти столбцы, чтобы связать таблицы.
В окне Power Pivot нажмите Сводная таблица, чтобы создать сводную таблицу на новом или существующем листе.
В списке полей разверните таблицу On_Time_Performance и нажмите ArrDelayMinutes, чтобы добавить их в область значений. В сводной таблице вы увидите общее время задержанных рейсов в минутах.
Разверните таблицу BasicCalendarUS и нажмите MonthInCalendar, чтобы добавить его в область строк.
Обратите внимание, что теперь в сводной таблице перечислены месяцы, но количество минут одинаковое для каждого месяца. Нужны одинаковые значения, указывающие на связь.
В списке полей, в разделе «Могут потребоваться связи между таблицами» нажмите Создать.
В поле «Связанная таблица» выберите On_Time_Performance, а в поле «Связанный столбец (первичный ключ)» — FlightDate.
В поле «Таблица» выберитеBasicCalendarUS, а в поле «Столбец (чужой)» — DateKey. Нажмите ОК для создания связи.
Обратите внимание, что время задержки в настоящее время отличается для каждого месяца.
В таблице BasicCalendarUS перетащите YearKey в область строк над пунктом MonthInCalendar.
Теперь вы можете разделить задержки прибытия по годам и месяцам, а также другим значениям в календаре.
Советы: По умолчанию месяцы перечислены в алфавитном порядке. С помощью надстройки Power Pivot вы можете изменить порядок сортировки так, чтобы они отображались в хронологическом порядке.
Таблица BasicCalendarUS должна быть открыта в окне Power Pivot.
В главной таблице нажмите Сортировка по столбцу.
В поле «Сортировать» выберите MonthInCalendar.
В поле «По» выберите MonthOfYear.
Сводная таблица теперь сортирует каждую комбинацию «месяц и год» (октябрь 2011, ноябрь 2011) по номеру месяца в году (10, 11). Изменить порядок сортировки несложно, потому что канал DateStream предоставляет все необходимые столбцы для работы этого сценария. Если вы используете другую таблицу логики операций со временем, ваши действия будут другими.
«Могут потребоваться связи между таблицами»
По мере добавления полей в сводную таблицу вы получите уведомление о необходимости связи между таблицами, чтобы разобраться с полями, выбранными в сводной таблице.
Хотя Excel может подсказать вам, когда необходима связь, он не может подсказать, какие таблицы и столбцы использовать, а также возможна ли связь между таблицами. Чтобы получить ответы на свои вопросы, попробуйте сделать следующее.
Шаг 1. Определите, какие таблицы указать в связи
Если ваша модель содержит всего лишь несколько таблиц, понятно, какие из них нужно использовать. Но для больших моделей вам может понадобиться помощь. Один из способов заключается в том, чтобы использовать представление диаграммы в надстройке Power Pivot. Представление диаграммы обеспечивает визуализацию всех таблиц в модели данных. С помощью него вы можете быстро определить, какие таблицы отделены от остальной части модели.
Примечание: Можно создавать неоднозначные связи, которые являются недопустимыми при использовании в сводной таблице или отчете Power View. Пусть все ваши таблицы связаны каким-то образом с другими таблицами в модели, но при попытке объединения полей из разных таблиц вы получите сообщение «Могут потребоваться связи между таблицами». Наиболее вероятной причиной является то, что вы столкнулись со связью «многие ко многим». Если вы будете следовать цепочке связей между таблицами, которые подключаются к необходимым для вас таблицам, то вы, вероятно, обнаружите наличие двух или более связей «один ко многим» между таблицами. Не существует простого обходного пути, который бы работал в любой ситуации, но вы можете попробоватьсоздать вычисляемые столбцы, чтобы консолидировать столбцы, которые вы хотите использовать в одной таблице.
Шаг 2. Найдите столбцы, которые могут быть использованы для создания пути от одной таблице к другой
После того как вы определили, какая таблица не связана с остальной частью модели, пересмотрите столбцы в ней, чтобы определить содержит ли другой столбец в другом месте модели соответствующие значения.
Предположим, у вас есть модель, которая содержит продажи продукции по территории, и вы впоследствии импортируете демографические данные, чтобы узнать, есть ли корреляция между продажами и демографическими тенденциями на каждой территории. Так как демографические данные поступают из различных источников, то их таблицы первоначально изолированы от остальной части модели. Для интеграции демографических данных с остальной частью своей модели вам нужно будет найти столбец в одной из демографических таблиц, соответствующий тому, который вы уже используете. Например, если демографические данные организованы по регионам и ваши данные о продажах определяют область продажи, то вы могли бы связать два набора данных, найдя общие столбцы, такие как государство, почтовый индекс или регион, чтобы обеспечить подстановку.
Кроме совпадающих значений есть несколько дополнительных требований для создания связей.
Значения данных в столбце подстановки должны быть уникальными. Другими словами, столбец не может содержать дубликаты. В модели данных нули и пустые строки эквивалентны пустому полю, которое является самостоятельным значением данных. Это означает, что не может быть несколько нулей в столбце подстановок.
Типы данных столбца подстановок и исходного столбца должны быть совместимы. Подробнее о типах данных см. в статье Типы данных в моделях данных.
Подробнее о связях таблиц см. в статье Связи между таблицами в модели данных.
Примечание: Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Была ли информация полезной? Для удобства также приводим ссылку на оригинал (на английском языке).
Блог о программе Microsoft Excel: приемы, хитрости, секреты, трюки
Создание связи между таблицами Excel
Связь между таблицами Excel – это формула, которая возвращает данные с ячейки другой рабочей книги. Когда вы открываете книгу, содержащую связи, Excel считывает последнюю информацию с книги-источника (обновление связей)
Межтабличные связи в Excel используются для получения данных как с других листов рабочей книги, так и с других рабочих книг Excel. К примеру, у вас имеется таблица с расчетом итоговой суммы продаж. В расчете используются цены на продукт и объем продаж. В таком случае имеет смысл создать отдельную таблицу с данными по ценам, которые будут подтягиваться с помощью связей первой таблицы.
Когда вы создаете связь между таблицами, Excel создает формулу, которая включает в себя имя исходной книги, заключенную в скобки [], имя листа с восклицательным знаком на конце и ссылку на ячейку.
Создание связей между рабочими книгами
- Открываем обе рабочие книги в Excel
- В исходной книге выбираем ячейку, которую необходимо связать, и копируем ее (сочетание клавиш Ctrl+С)
- Переходим в конечную книгу, щелкаем правой кнопкой мыши по ячейке, куда мы хотим поместить связь. Из выпадающего меню выбираем Специальная вставка
- В появившемся диалоговом окне Специальная вставка выбираем Вставить связь.
Есть еще один, более простой, вариант создания связи между таблицами. В ячейку, куда мы хотим вставить связь, ставим знак равенства (так же как и для обычной формулы), переходим в исходную книгу, выбираем ячейку, которую хотим связать, щелкаем Enter.
Вы можете использовать инструменты копирования и автозаполнения для формул связи так же, как и для обычных формул.
Прежде чем создавать связи между таблицами
Прежде чем вы начнете распространять знания на свои грандиозные идеи, прочитайте несколько советов по работе со связями в Excel:
Делайте легко отслеживаемые связи. Не существует автоматического поиска всех ячеек, содержащих ссылки. Поэтому, используйте определенный формат, чтобы быстро идентифицировать связи с другими таблицами, в противном случае, документ, содержащий ссылки, может разрастись до такой степени, что его будет трудно поддерживать.
Автоматические вычисления. Исходная книга должна работать в режиме автоматического вычисления (установлено по умолчанию). Для переключения параметра вычисления перейдите по вкладке Формулы в группу Вычисление. Выберите Параметры вычислений –> Автоматически.
Избегайте циклические ссылки. Циклические связи – когда две рабочие книги содержат ссылки друг на друга – могут быть причиной медленного открытия и работы файла.
Обновление связей
Для ручного обновления связи между таблицами, перейдите по вкладке Данные в группу Подключения. Щелкните по кнопке Изменить связи.
В появившемся диалоговом окне Изменение связей, выберите интересующую вас связь и щелкните по кнопке Обновить.
Разорвать связи в книгах Excel
Разрыв связи с источником приведет к замене существующих формул связи на значения, которые они возвращают. Например, связь =[Источник.xlsx]Цены!$B$4 будет заменена на 16. Разрыв связи нельзя отменить, поэтому прежде чем совершить операцию, рекомендую сохранить книгу.
Перейдите по вкладке Данные в группу Подключения. Щелкните по кнопке Изменить связи. В появившемся диалоговом окне Изменение связей, выберите интересующую вас связь и щелкните по кнопке Разорвать связь.
Вам также могут быть интересны следующие статьи
5 комментариев
Спасибо! очень полезный материал!
Пожалуйста, исправьте опечатку:
«В исходной книге выбираем ячейку, которую необходимо связать, и копируем ее (сочетание клавиш Ctrl+V)»
Думаю должно быть «Ctrl+С»
Формула для создания связи ВПР между двумя таблицами в Excel
Иногда данные, которые нужно найти, могут находится на разных таблицах. Часто приходится делать выборку данных по нескольким таблицам Excel. Пользователь должен иметь возможность определять из какой таблицы делать выборку по критериям условий для того или иного типа данных. Для этого можно создать специальную формулу.
Как связать две таблицы одной формулой для выборки ВПР по условию
Ниже на рисунке представлена таблица для вычисления налоговой суммы. Пользователь имеет возможность определять семейное положение сотрудника (женат или Неженат). Если пользователь выберет условие «Неженат», выборка должна выполнятся по таблице «Неженатые сотрудники». Если будет выбран критерий «Женат» выборка будет произведена по таблице «Женатые сотрудники». Формула для расчета налогов при условии женат или Неженат сотрудник фирмы:
Чтобы создать переключатель между таблицами можно использовать имена диапазонов ячеек и функцию ДВССЫЛ. После чего нужно составить формулу. Необходимо сначала создать два именных диапазона:
- Женат – для таблицы «Женатые сотрудники».
- Неженат – для таблицы «Неженатые сотрудники».
Чтобы присвоить отдельные имена для каждого из диапазонов этих двух таблиц сделайте следующее:
- Выделите диапазон ячеек A3:D10.
- Выберите инструмент: «ФОРМУЛЫ»-«Определенные имена»-«Присвоить имя». Появится окно «Создание имени» как показано на рисунке:
- В поле «Имя:» введите значение – Женат. И нажмите ОК.
- Выделите диапазон ячеек из второй таблицы F3:I10.
- Снова выберите инструмент «Присвоить имя» на вкладке «ФОРМУЛЫ» и заполните поле «Имя:» значением – Неженат, как на рисунке:
- Нажмите Ок.
Для точности и удобства ввода входных значений в ячейке… используется выпадающий список создан инструментом: «ДАННЫЕ»-«Работа с данными»-«Проверка данных»-«Тип данных:»-«Список».
Выпадающий список состоит только из двух значений: «Женат» «Неженат». Точно такие же как названия имен диапазонов ячеек, созданных ранее. Значение ячейки E12 будет использовано для переключения между таблицами при поиске по условию. Поэтому значения и имена диапазонов должны быть идентичны.
В основе данной формулы лежит функция ВПР. Ее второй аргумент где указывается исходная таблица содержит функцию ДВССЫЛ. Данная функция имеет первый аргумент «Ссылка на ячейку», который преобразует входящий текст в ссылку на ячейку или диапазон. На самом первом рисунке ячейка E12 содержит значение «Неженат». Функция ДВССЫЛ пытается преобразовать этот текст в ссылку на ячейку или в имя диапазона. Если текст не преобразовывается в ссылку на ячейку (как в данном примере), тогда функция ДВССЫЛ проверяет нет ли в данной рабочей книге имен диапазонов ячеек с таким же названием. Если небыли бы созданы такие имена диапазонов, тогда функция вернула бы ошибку с кодом #ССЫЛКА!
В синтаксисе функции ДВССЫЛ имеется второй необязательный для заполнения аргумент – называется «A1». Значение ИСТИНА в данном аргументе значит, что ссылка на ячейку записана в формате A1, а значение ЛОЖЬ – формате R1C1. В случае названых имен диапазонов ячеек функция ДВССЫЛ вернет правильный результат в независимости от того, что указано во втором опциональном ее аргументе «A1»: ИСТИНА или ЛОЖЬ.
Функция ДВССЫЛ может также возвращать внешние ссылки на другие листы и даже другие рабочие книги Excel. Но при условии, что рабочая книга, на которую ссылается функция будет открыта. Иначе будет возвращена ошибка с кодом #ССЫЛКА!
Невозможно разорвать связи с другой книгой
Прежде чем разобрать причины ошибки разрыва связей, не лишним будет разобраться что такое вообще связи в Excel и откуда они берутся. Если все это Вам известно — можете пропустить этот раздел 🙂
Что такое связи в Excel и как их создать
Иногда при работе с различными отчетами приходится создавать связи с другими книгами(отчетами). Чаще всего это используется в функциях вроде ВПР (VLOOKUP) для получения данных по критерию из таблицы, расположенной в другой книге. Так же это может быть и простая ссылка на ячейки другой книги. В итоге ссылки в таких ячейках выглядят следующим образом:
=ВПР( A2 ;'[Продажи 2018.xlsx]Отчет’!$A:$F;4;0)
или
‘[Продажи 2018.xlsx]Отчет’!$A1
- [Продажи 2018.xlsx] — обозначает книгу, в которой итоговое значение. Такие книги так же называют источниками
- Отчет — имя листа в этой книге
- $A:$F и $A1 — непосредственно ячейка или диапазон со значениями
Если закрыть книгу, на которую была создана такая ссылка, то ссылка сразу изменяется и принимает более «длинный» вид:
=ВПР( A2 ;’C:UsersДмитрийDesktop[Продажи 2018.xlsx]Отчет’!$A:$F;4;0)
‘C:UsersДмитрийDesktop[Продажи 2018.xlsx]Отчет’!$A1
Предположу, что большинство такими ссылками не удивишь. Такие ссылки так же принято называть связыванием книг. Поэтому как только создается такая ссылка на вкладке Данные в группе Запросы и подключения активируется кнопка Изменить связи. Там же, как несложно догадаться, их можно изменить. В большинстве случаев ни использование связей, ни их изменение не доставляет особых проблем. Даже если в книге источники были изменены значения ячеек, то при открытии книги со связью эти изменения будут так же автоматом обновлены. Но если книгу-источник переместили или переименовали — при следующем открытии книги со ссылками на неё Excel покажет сообщение о недоступных связях в книге и запрос на обновление этих ссылок:
Если нажать Продолжить, то ссылки обновлены не будут и в ячейках будут оставлены значения на момент последнего сохранения. Происходит это потому, что ссылки хранятся внутри самой книги и так же там хранятся значения этих ссылок. Если же нажать Изменить связи, то появится окно изменения связей, где можно будет выбрать каждую связь и указать правильное расположение нужного файла:
Так же изменение связей доступно непосредственно из вкладки Данные
Как разорвать связи
Как правило связи редко нужны на продолжительное время, т.к. они неизбежно увеличивают размер файла, особенно, если связей много. Исключениями являются случаи, когда связи делаются на некие общие файлы, расположенные на сетевом диске и заполняемые разными подразделениями, а в итоговый файл связями просто забираются конкретные значения из этого файла. Чтобы разорвать связи необходимо перейти на вкладку Данные -группа Данные и подключения -Изменить связи:
Выделить нужные связи и нажать Разорвать связь. При этом все ячейки с формулами, содержащими связи, будут преобразованы в значения вычисленные этой формулой при последнем обновлении. Данное действие нельзя будет отменить — только закрытием книги без сохранения.
Так же связи внутри формул разрываются, если формулы просто заменить значениями -Копируем нужные ячейки -Правая кнопка мыши -Специальная вставка -Значения. Формулы в ячейках будут заменены результатами их вычислений, а все связи будут удалены.
Более подробно про замену формул значениями можно узнать из статьи: Как удалить в ячейке формулу, оставив значения?
Что делать, если связи не разрываются
Но иногда возникают ситуации, когда вроде все формулы во всех ячейках уже заменены на значения, но запрос на обновление каких-то связей все равно появляется. В этом случае есть парочка рекомендаций для поиска и удаления этих мифических связей:
- проверьте нет ли каких-либо связей в именованных диапазонах:
нажмите сочетание клавиш Ctrl + F3 или перейдите на вкладку Формулы (Formulas) —Диспетчер имен (Name Manager)
Читать подробнее про именованные диапазоны
Если в каком-либо имени есть ссылка с полным путем к какой-то книге(вроде такого ‘[Продажи 2018.xlsx]Отчет’!$A1 ), то такое имя надо либо изменить, либо удалить. Кстати, некоторые имена в итоге могут выдавать ошибку #ССЫЛКА! (#REF!) . К ним тоже стоит присмотреться.
Настоятельно рекомендую перед удалением имен создать резервную копию файла, т.к. неверное удаление таких имен может повлечь неправильную работу файла даже в случае, если сами ссылки возвращали в итоге ошибочное значение. - если удаление лишних имен не дает эффекта — проверьте условное форматирование:
вкладка Главная (Home) —Условное форматирование (Conditional formatting) —Управление правилами (Manage Rules) . В выпадающем списке проверить каждый лист и условия в нем:
Может случиться так, что условие было создано с использованием ссылки на другие книги. Как правило Excel запрещает это делать, но если ссылка будет внутри какого-то именованного диапазона — то диапазон такой можно будет применить в УФ, но после его удаления в самом УФ это имя все равно остается и генерирует ссылку на файл-источник. Такие условия можно удалять без сомнений — они все равно уже не выполняются как положено и лишь создают «пустую» связь. - Так же не помешает проверить наличие лишних ссылок и среди проверки данных(Что такое проверка данных). Как правило связи могут быть в проверке данных с типом Список. Но как их отыскать, если проверка данных распространена на множество ячеек? Проверять каждую? Это очень долго. Поэтому я предлагаю коротенький код, который отыщет все такие ссылки быстрее и сэкономит время):
Option Explicit ‘————————————————————————————— ‘ Author : The_Prist(Щербаков Дмитрий) ‘ Профессиональная разработка приложений для MS Office любой сложности ‘ Проведение тренингов по MS Excel ‘ https://www.excel-vba.ru ‘ info@excel-vba.ru ‘ WebMoney — R298726502453; Яндекс.Деньги — 41001332272872 ‘ Purpose: ‘————————————————————————————— Sub FindErrLink() ‘надо посмотреть в Данные -Изменить связи ссылку на файл-иточник ‘и записать сюда ключевые слова в нижнем регистре(часть имени файла) ‘звездочка просто заменяет любое кол-во символов, чтобы не париться с точным названием Const sToFndLink$ = «*продажи 2018*» Dim rr As Range, rc As Range, rres As Range, s$ ‘определяем все ячейки с проверкой данных On Error Resume Next Set rr = ActiveSheet.UsedRange.SpecialCells(xlCellTypeAllValidation) If rr Is Nothing Then MsgBox «На активном листе нет ячеек с проверкой данных», vbInformation, «www.excel-vba.ru» Exit Sub End If On Error GoTo 0 ‘проверяем каждую ячейку на предмет наличия связей For Each rc In rr ‘на всякий случай пропускаем ошибки — такое тоже может быть ‘но наши связи должны быть без них и они точно отыщутся s = «» On Error Resume Next s = rc.Validation.Formula1 On Error GoTo 0 ‘нашли — собираем все в отдельный диапазон If LCase(s) Like sToFndLink Then If rres Is Nothing Then Set rres = rc Else Set rres = Union(rc, rres) End If End If Next ‘если связь есть — выделяем все ячейки с такими проверками данных If Not rres Is Nothing Then rres.Select ‘ rres.Interior.Color = vbRed ‘если надо выделить еще и цветом End If End Sub
Чтобы правильно использовать приведенный код, необходимо скопировать текст кода выше, перейти в редактор VBA( Alt + F11 ) -создать стандартный модуль(Insert —Module) и в него вставить скопированный текст. После чего вызвать макросы( Alt + F8 ), выбрать FindErrLink и нажать выполнить.
Есть пара нюансов:
1. Прежде чем искать ненужную связь необходимо определить её ссылку: Данные -Изменить связи. Запомнить имя файла и записать в этой строке внутри кавычек:
Const sToFndLink$ = «*продажи 2018*»
Имя файла можно записать не полностью, все пробелы и другие символы можно заменить звездочкой дабы не ошибиться. Текст внутри кавычек должен быть в нижнем регистре. Например, на картинках выше есть связь с файлом «Продажи 2018.xlsx», но я внутри кода записал «*продажи 2018*» — будет найдена любая связь, в имени которой есть «продажи 2018».
2. Код ищет проверки данных только на активном листе
3. Код только выделяет все найденные ячейки(обычное выделение), он ничего сам не удаляет.
4. Если надо подсветить ячейки цветом — достаточно убрать апостроф(‘) перед строкой
rres.Interior.Color = vbRed ‘если надо выделить еще и цветом
Как правило после описанных выше действий лишних связей остаться не должно. Но если вдруг связи остались и найти Вы их никак не можете или по каким-то причинам разорвать связи не получается(например, лист со связью защищен)- можно пойти совершенно иным путем. Действует этот рецепт только для файлов новых форматов Excel 2007 и выше:
1. Обязательно делаем резервную копию файла, связи в котором никак не хотят разрываться
2. Открываем файл при помощи любого архиватора(WinRAR отлично справляется, но это может быть и другой, работающий с форматом ZIP)
3. В архиве перейти в папку xl -> externalLinks
4. Сколько связей содержится в файле, столько файлов вида externalLink1.xml и будет внутри. Файлы просто пронумерованы и никаких сведений о том, к какому конкретному файлу относится эта связь на поверхности нет. Чтобы узнать какой файл .xml к какой связи относится надо зайти в папку «_rels» и открыть там каждый из имеющихся файлов вида externalLink1.xml.rels. Там и будет содержаться имя файла-источника.
5. Если надо удалить только связь на конкретный файл — удаляем только те externalLink1.xml.rels и externalLink1.xml, которые относятся к нему. Если удалить надо все связи — удаляем все содержимое папки externalLinks
6. Закрываем архив
7. Открываем файл в Excel. Появится сообщение об ошибке вроде «Ошибка в части содержимого в Книге . «. Соглашаемся. Появится еще одно окно с перечислением ошибочного содержимого. Нажимаем закрыть.
После этого связи должны быть удалены.
Статья помогла? Поделись ссылкой с друзьями!
1 / 1 / 0 Регистрация: 21.11.2011 Сообщений: 43 |
|
1 |
|
Создание связей программно23.03.2012, 01:18. Показов 2893. Ответов 17
Здравствуйте. Мне нужно создать 10 excel файл и сделать связь остальных 9 с ним. Можно ли сделать через VBA связи(кодом) 2)
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
23.03.2012, 01:18 |
Ответы с готовыми решениями: Создание связей в JPA и таблиц на основе этих связей В моём скрине были созданны empoyee_id и manager_id как FK… создание связей Создание связей Разработайте базу данных «Электронная… Создание связей 17 |
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
|
23.03.2012, 09:32 |
2 |
Как сделать так что бы он сам при открытии не обнавлялся а только по нажатию кнопки Написать процедуру изъятия данных и назначить её кнопке
0 |
npqHuK 1 / 1 / 0 Регистрация: 21.11.2011 Сообщений: 43 |
||||
23.03.2012, 13:01 [ТС] |
3 |
|||
Вроде так работает.
0 |
2784 / 716 / 106 Регистрация: 04.02.2011 Сообщений: 1,443 |
|
23.03.2012, 13:39 |
4 |
С тем, что было сказано в топике кода Вам никто не напишет. Выкладывайте лучше пример ваших 9 файлов и набросок 10-го файла, как вы хотите его получить. Иначе про выбор цвета и т.д. никто не угадает (раз речь шла только о ф.и.о.) — здесь экстрасенсов нет. В общем случае файл 10 должен иметь отведенное место с именами и путями к 9 другим файлам. Макрос опочередно берет имя файла, открывает его, копипует из него значения, закрывает и так со всеми файлами, в каждом из которых надо определить количество строк для копирования. Чтобы потом знать, какие цифры брались из какого файла можно завести дополнительный столбец с именем файла. Как-то так, но лучше выложить примеры файлов для работы!
0 |
npqHuK 1 / 1 / 0 Регистрация: 21.11.2011 Сообщений: 43 |
||||
24.03.2012, 00:00 [ТС] |
5 |
|||
Как доделаю скину код……….может кому понадобится………осталось немножко. Добавлено через 5 минут Добавлено через 25 минут
Вот так в листах 1-9 у меня получатся значения а не ссылки.
0 |
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
|
24.03.2012, 10:27 |
6 |
Я копирую с листа значения которые приходят через связи и получаю СВЯЗЬ за место ЗНАЧЕНИЯ!!! А не проще сразу не делать связи,а брать значения?
0 |
1 / 1 / 0 Регистрация: 21.11.2011 Сообщений: 43 |
|
25.03.2012, 14:36 [ТС] |
7 |
Либо вы меня не понимаете либо я вас.
0 |
Alex77755 11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
||||||||||||
25.03.2012, 19:01 |
8 |
|||||||||||
Сообщение было отмечено как решение РешениеЯ говорю мне не надо открывать остальные 9 файлов А никто не говорит, что файлы надо открывать самому. Это должна сделать программа. 19 Листов….по 500 строк взять на всякий случай 500 вместо 19. Занять 9500 строк. 4% из которых будут нести информацию. В VBA не существует метода получения значения из закрытого файла рабочей
Функция GetValue имеет четыре аргумента:
Ниже приведен еще один пример. Эта процедура считывает 1200 значений
3 |
17991 / 7617 / 890 Регистрация: 25.12.2011 Сообщений: 11,351 Записей в блоге: 17 |
|
25.03.2012, 20:05 |
9 |
Если данные однотипные использовать ADO, но это сложнее Alex77755, тоже нашел. Забираю код в копилку.
0 |
1 / 1 / 0 Регистрация: 21.11.2011 Сообщений: 43 |
|
26.03.2012, 09:44 [ТС] |
10 |
Я начинал делать с открытия файлов……причем тоже делал книги невидимыми.но не на шел как через ВБА потом закрыть эксел в процессах.
0 |
Dragokas |
||||
26.03.2012, 11:00
#11 |
||||
Не по теме: npqHuK,
0 |
npqHuK 1 / 1 / 0 Регистрация: 21.11.2011 Сообщений: 43 |
||||
27.03.2012, 16:21 [ТС] |
12 |
|||
Что за глупость….абсолютно одинаковые по полям……..чуток разные по количеству строк но ТОт что =больше по кол-ву строк загружается через циклы за 6 сек а остальные с меньшим кол0вом строк грузятся 34+ секунд!!Что за вздор! ( Добавлено через 19 минут
Не обьясните случаем почему!?
0 |
693 / 99 / 10 Регистрация: 25.06.2011 Сообщений: 718 |
|
27.03.2012, 19:28 |
13 |
npqHuK, не проще все в одном цикле сделать
0 |
1 / 1 / 0 Регистрация: 21.11.2011 Сообщений: 43 |
|
29.03.2012, 11:18 [ТС] |
14 |
У меня другая проблемка……… Так вот при открытии файла Лист2 я вижу что все пустые ячейки стали со значением 0.как это исправить подскажите! Добавлено через 23 часа 40 минут
0 |
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
|
29.03.2012, 13:47 |
15 |
Сервис-параметры-вид. снять галку «нулевые значения»
0 |
1 / 1 / 0 Регистрация: 21.11.2011 Сообщений: 43 |
|
29.03.2012, 15:24 [ТС] |
16 |
а в 2010 как?! Добавлено через 34 минуты
0 |
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
|
29.03.2012, 15:36 |
17 |
1.=ЕСЛИ(формула=0;»»;формула)
0 |
1 / 1 / 0 Регистрация: 21.11.2011 Сообщений: 43 |
|
29.03.2012, 15:44 [ТС] |
18 |
Не понял вас малость……….как сделать тот же MsgBox только что бы когда он вылезал моё обновление продолжалось ане останавливалось
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
29.03.2012, 15:44 |
18 |