Excel один ко многим vba

Содержание

  1. Создание связи между двумя таблицами в Excel
  2. Дополнительные сведения о связях между таблицами в Excel
  3. Примечания о связях
  4. Пример. Связывание данных логики операций со временем с данными по рейсам авиакомпании
  5. «Могут потребоваться связи между таблицами»
  6. Шаг 1. Определите, какие таблицы указать в связи
  7. Шаг 2. Найдите столбцы, которые могут быть использованы для создания пути от одной таблице к другой
  8. Сведения об объекте модели PowerPivot в Excel
  9. Определенные связи
  10. Только отдельные модели
  11. Работа с источниками данных OLAP
  12. Активация создания модели PowerPivot
  13. Добавление нового источника данных, не устаревшего
  14. Создание новой сводной таблицы Excel, отличной от OLAP
  15. Создание сводной диаграммы Excel, отличной от OLAP
  16. Вставка сводных таблиц Excel, отличных от OLAP, из другой книги
  17. Отмена создания модели PowerPivot
  18. Объектная модель модели PowerPivot
  19. Объект model
  20. Объект ModelChanges
  21. Коллекция ModelColumnChanges
  22. Объект ModelColumnChange
  23. Коллекция ModelColumnNames
  24. Объект ModelColumnName
  25. Объект ModelConnection
  26. Коллекция ModelMeasureNames
  27. Объект ModelMeasureName
  28. Коллекция ModelRelationships
  29. Объект ModelRelationship
  30. Коллекция ModelTables
  31. Объект ModelTable
  32. Коллекция ModelTableColumns
  33. Объект ModelTableColumn
  34. Коллекция ModelTableNames
  35. Коллекция ModelTableNameChanges
  36. Объект ModelTableNameChange
  37. Заключение
  38. См. также
  39. Поддержка и обратная связь

Создание связи между двумя таблицами в 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
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#1

17.11.2016 21:59:29

Доброго вечера, уважаемые форумчане!
Прошу вашей помощи в организации связи «один-ко-многим» между двумя таблицами через макрос. От создания сводных по нескольким таблицам (это также решило бы проблему) пока отказался, ввиду слабого знания материала и опасений «накосячить», а макрос есть макрос — из созданной им таблицы я всегда смогу отличную сводную построить.
Не воспринимайте, пожалуйста, как ТЗ — выложил все мысли по теме, может чем-то поможет…

В посте №24 — рабочий макрос.

Пример такой (описание файла-примера):

Детали по макросу (как примерно я это вижу):

Комментарии:

Примеры похожих проблем:

Инструкция по использованию спойлеров на форуме

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

  • Сложное объединение таблиц.xlsx (15.43 КБ)

Изменено: Jack Famous24.11.2016 09:31:50

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

SuperCat

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

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

Опять ТЗ строчим?

There is no knowledge that is not power

 

Jack Famous

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

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

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#3

17.11.2016 22:47:53

SuperCat, так и знал)))) да вот как ни напишу — всё как ТЗ выглядит))))

Вот то, что смог по теме в VBA)))

Изменено: Jack Famous18.11.2016 00:10:27

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

С.М.

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

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

#4

18.11.2016 02:51:45

Тренировка скрывания под спойлер

Изменено: С.М.18.11.2016 02:55:06

 

Jack Famous

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

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

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

С.М., наконец-то первый вариант по теме))))) спасибо вам большое — как обращаться с этим зверем?))) выделял и 1 и 2 таблицу, запускал макрос — ничего(((

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

Андрей VG

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

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

Excel 2016, 365

#6

18.11.2016 12:11:34

Доброе время суток

Цитата
Сложное объединение двух таблиц.

Несколько щелчков мышкой… в Power Query. И выясняется, что в результате есть ошибочка :)
Успехов.

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

  • Копия Копия Сложное объединение таблиц.xlsx (26.85 КБ)

Изменено: Андрей VG18.11.2016 12:12:23
(Файл не той системы приложил.)

 

Jack Famous

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

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

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

Андрей VG, здравствуйте!))) спасибо за пример, но пишет «указанного файла не существует»
По поводу Power Query — знаю, что так можно, но пока что боюсь DAX-формул (писал в шапке темы). Жду уроков от Николая Павлова…

Изменено: Jack Famous18.11.2016 12:15:52

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

Андрей VG

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

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

Excel 2016, 365

#8

18.11.2016 12:15:38

Цитата
Jack Famous написал:
«указанного файла не существует»

Вы слишком быстро пришли за примером. Обнаружил, что не ту версию файла прикрепил. Переложил, и тут вы — качать… Накладка, однако :)

 

Jack Famous

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

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

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

Андрей VG, спасибо большое)))) есть возможность рассказать, как эту динамическую связку организовывать? Я бы в динамике всё построил…

Изменено: Jack Famous18.11.2016 12:19:51

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

JeyCi

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

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

#10

18.11.2016 12:29:23

Цитата
Jack Famous написал: По поводу Power Query — знаю, что так можно, но пока что боюсь DAX-формул

не делайте непроверенных выводов!.. в PQ — язык другой (M-language), язык DAX в PP
p.s. см.  

#14 —> Расширенный редактор

Изменено: JeyCi18.11.2016 12:32:33

чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок — обратитесь к собеседнику на ВЫ — ответ на ваш вопрос получите — а остальное вас не касается (п.п.п. на форумах)

 

Максим Зеленский

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

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

Microsoft MVP

#11

18.11.2016 12:31:51

Можно чуть подсократить:

Код
let
    Источник = Excel.CurrentWorkbook(){[Name="помещения"]}[Content],
    #"Объединенные запросы" = Table.NestedJoin(Источник,{"№ типа"},типы,{"№ типа"},"NewColumn",JoinKind.LeftOuter),
    #"Развернутый элемент NewColumn" = Table.ExpandTableColumn(#"Объединенные запросы", "NewColumn", {"Формула"}, {"Формула"}),
    #"Сортированные строки" = Table.Sort(#"Развернутый элемент NewColumn",{{"№ пом.", Order.Ascending}, {"Формула", Order.Ascending}}),
    #"Переименованные столбцы1" = Table.RenameColumns(#"Сортированные строки",{{"Формула", "Материал"}}),
    #"Changed Type" = Table.TransformColumnTypes(#"Переименованные столбцы1",{{"№ пом.", Int64.Type}, {"№ типа", Int64.Type}})
in
    #"Changed Type"

F1 творит чудеса

 

Андрей VG

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

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

Excel 2016, 365

#12

18.11.2016 13:05:09

Цитата
Максим Зеленский написал: Можно чуть подсократить:

Конечно!

Код
let
    types = Excel.CurrentWorkbook(){[Name="типы"]}[Content],
    houses = Excel.CurrentWorkbook(){[Name="помещения"]}[Content],
    renHouses = Table.RenameColumns(houses, { {"№ типа", "typeName"} }),
    joined = Table.Join(renHouses, {"typeName"}, types, {"№ типа"})[[#"№ пом."], [#"№ типа"], [Формула]]
in
    Table.RenameColumns(joined, { {"Формула", "Материал"} })
 

С.М.

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

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

#13

18.11.2016 13:27:25

Цитата
Jack Famous написал #5:
С.М. , как обращаться с этим зверем?))) выделял и 1 и 2 таблицу, запускал макрос — ничего(((

Не надо ничего выделять, жмём кнопку :

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

  • Сложное объединение таблиц.1.xlsb (27 КБ)

 

Jack Famous

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

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

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

С.М., огромное спасибо!!! Буду разбираться с кодом)))
если можно закомментируйте, пожалуйста код — хочу понять, какие переменные участвуют, чтобы запихнуть их в диалоговые окна при запуске макроса…
JeyCi, благодарю за подсказку и коррекцию)))

Андрей VG

и

Максим Зеленский

, благодарою за вариант решения через PQ — в перспективе этот вариант, скорее всего станет основным, а пока буду учить матчасть))))

Изменено: Jack Famous18.11.2016 13:45:07

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

Максим Зеленский

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

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

Microsoft MVP

#15

18.11.2016 15:11:30

Андрей VG, нет предела совершенству  :D

Скрытый текст

Изменено: Максим Зеленский18.11.2016 15:12:10

F1 творит чудеса

 

Андрей VG

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

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

Excel 2016, 365

#16

18.11.2016 15:33:34

Максим, у меня PQL через раз ругается, что не может выполнить Join из-за одинаковых названий столбцов

Код
Table.Join(houses, {"№ типа"}, types, {"№ типа"})

, поэтому и пришлось делать «лишнюю» операцию. Причём, если соединение по двум и более столбцам, тогда без вопросов — отрабатывает как и должно быть. Один из глюков PQL — может в последних и поправили.

 

странно, у меня не ругается…

 

Максим Зеленский

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

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

Microsoft MVP

#18

18.11.2016 16:46:01

я думаю, в этом дело:

Цитата
An Expression.Error is thrown if a column with the same name to appear in both tables of the join unless the column is selected by both key1 and key2 and the join is an inner join.

F1 творит чудеса

 

Jack Famous

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

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

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

Максим Зеленский, Андрей VG, подскажите, а эти формулы только руками вбивать или есть что-то вроде мастера функций, как в Excel — тогда дело за синтаксисом и практикой))

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

JeyCi

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

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

#20

18.11.2016 18:24:47

Цитата
Jack Famous написал: а эти формулы только руками вбивать или

Jack Famous

вы кнопки в надстройке нажимайте и смотрите, что получается, а в расширенном редакторе — весь код целиком увидеть можно… вопрос в том в какой последовательности какие кнопки (в зависимости от того, какие шаги по коду совершить хотите)… последовательность — это уже вопрос алгоритмизации… для получения нужного на выходе… вы не стесняйтесь знакомиться с надстройкой  ;) , если чётко себе представляете алгоритм, который вам надо закодировать [решение порождает человек, простые шаги может пройти по кнопкам на ленте PQ]… сложные моменты придётся править руками, когда захотите выполнять ювелирную работу (как с макрорекодером) — что вызвало проблему, чтобы самому прийти к такому выводу??особенно после прохождения по моему линку в #10 и ответа Максима там…

Изменено: JeyCi18.11.2016 18:30:27

чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок — обратитесь к собеседнику на ВЫ — ответ на ваш вопрос получите — а остальное вас не касается (п.п.п. на форумах)

 

С.М.

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

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

#21

18.11.2016 20:05:07

Цитата
Jack Famous написал:
С.М. , Буду разбираться с кодом)))
если можно закомментируйте, пожалуйста код — хочу понять, какие переменные участвуют

Вот:

 

Jack Famous

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

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

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

JeyCi, надо пробовать — спасибо за напутствие!))
С.М., большое спасибо вам!)) Попробую что-нибудь сделать с этим ;)  наверняка куча вопросов будет  :D

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

Jack Famous

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

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

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

С.М., посидел, посмотрел — из переменных, которые смог: разглядеть только типы, помещения и таблица. Первые 2 — в виде именованных диапазонов, а таблица и есть таблица)) не могли бы вы изменить сам принцип работы макроса? Сейчас он решает одну конкретную задачу — ни влево, ни в право, к тому же он вставляет не значения столбца, а самостоятельно индексирует третий столбец справочника. То есть, если мне нужно вставлять какой-либо другой столбец — это очень замороченная процедура получится…
Прошу вас попробовать сделать нечто похожее, как я начал в #3. То есть, выбираем ключевые поля в обоих таблицах через диалоговые окна, выбираем, какой столбец справочника переносить в целевую таблицу (размножением строк) и всё. Номеров типов и слоёв ведь тоже может не быть, поэтому макрос должен считать всё самостоятельно, ориетируясь не на числа, а только на то, сколько строк переносимого столбца справочника соответствуют одному и тому же значению ключа справочника

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

Jack Famous

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

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

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#24

24.11.2016 09:41:44

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

В модуле

В Class1 раздела Class Modules

Инструкция к макросу

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

  • Объединение таблиц.xlsb (24.13 КБ)

Изменено: Jack Famous24.11.2016 10:25:06

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

Jack Famous

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

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

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

Отдельная благодарность Андрей VG, Максим Зеленский и JeyCi — с их подсказок удалось довольно простым способом осуществить подобную связь в динамически обновляемом виде через запросы в Power Query — теперь, связав 2 и более таблицы через запросы по ключевым полям и удалив в этих запросах всё лишнее, можно готовый итоговый запрос выгрузить в книгу и строить сводную по нему. При изменении/дополнении/удалении данных в справочниках — всё динамически обновляется и в сводной.
Теперь я серьёзно настроен на изучение Power BI в целом — спасибо, мастера!  8)

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

Максим Зеленский

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

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

Microsoft MVP

#26

29.11.2016 15:40:57

Цитата
Jack Famous написал:
можно готовый итоговый запрос выгрузить в книгу

Можно и не выгружать

F1 творит чудеса

 

Jack Famous

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

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

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

Максим Зеленский, да — добавить в модель данных и готово))) подскажите, пожалуйста аналоги функций СУММЕСЛИМН и СЧЁТЕСЛИМН для Power Query. Или это только через DAX в Power Pivot? А то таблички посвязывал по ключевым полям (6 штук), а этого капец как не хватает…

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

Андрей VG

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

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

Excel 2016, 365

#28

29.11.2016 21:21:22

Доброе время суток

Цитата
Jack Famous написал:
аналоги функций СУММЕСЛИМН и СЧЁТЕСЛИМН для Power Query

Смотря что вы под этим подразумеваете. В общем случае — фильтрация по критериям и группировка (плоская сводная таблица).

 

Jack Famous

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

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

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

Андрей VG, доброй ночи!
Вы мне всегда подсказывали по поводу сводных и Power Pivot — надеюсь, что и тут поможете… Прикрепил файл-пример со связкой 3х таблиц через Power Query — как вышло и чего не хватает.
ЖЁЛТЫМ выделены ключевые поля
ЗЕЛЁНЫМ выделены поля с формулами
СИРЕНЕВЫМ выделены пользовательские столбцы с формулами в Power Query
ОРАНЖЕВЫМ выделено то, чего не смог достичь внутри запросов в Power Query

Изменено: Jack Famous30.11.2016 00:24:07

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

Jack Famous

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

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

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

SergeyKorotun

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

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

Ранг: Обитатель

Сообщений: 301


Репутация:

15

±

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


Excel 2007

FULL OUTER JOIN
1. В результат включается внутреннее соединение (INNER JOIN) первой и второй таблиц.
2. В результат добавляются те записи первой таблицы, которые не вошли во внутреннее соединение на шаге 1. Для таких записей поля, соответствующие второй таблице, заполняются значениями NULL.
3. В результат добавляются те записи второй таблицы, которые не вошли во внутреннее соединение на шаге 1. Для таких записей поля, соответствующие первой таблице, заполняются значениями NULL.

ВПР или ИНДЕКС реализуют LEFT OUTER JOIN
Если фильтром скрыть строки с #Н/Д, то получится INNER JOIN
А как реализовать FULL OUTER JOIN?

Пример в прикрепленном файле.

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

qwerty6.xlsm
(11.6 Kb)

 

Ответить

_Boroda_

Дата: Воскресенье, 17.11.2013, 23:45 |
Сообщение № 2

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

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

Сообщений: 16618


Репутация:

6465

±

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


2003; 2007; 2010; 2013 RUS

Сводной таблицей пойдет?


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

SergeyKorotun

Дата: Понедельник, 18.11.2013, 00:37 |
Сообщение № 3

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

Ранг: Обитатель

Сообщений: 301


Репутация:

15

±

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


Excel 2007

подойдет, но я наверно плохо объяснил.
Изначально на листах есть только три столбца: id_1, id_2, «начислено» на одном листе и id_1, id_2, «уплачено» на втором. Остальные столбцы добавлены уже мной в процессе попытки решить задачу. Сходу не разобрался как создана сводная таблица, но результаты там задвоены.
Берем первую строку со значениями на 1 листе (1 a 10) и (1 а) ищем на втором листе, такая строка есть, значит на 3 лист добавляем всю строку с первого листа (1 a 10) и в следующий столбец заносим значение из соответствующей строки 2 листа — это 15 и на 3 листе получим (1 a 10 15). Еще как то надо пометить строку на 2 листе как использованную. В SQL это внутреннее соединение.
Берем следующую строку на 1 листе (1 b) и выполнили бы те же действия, если бы (1 b) нашли во второй таблице. Но поскольку (1 b) там нет, то на 3 лист в новую строку заносим значения с 1 листа (1 b 25), а 4-й столбец не заполняем. В SQL это левостороннее соединение.
И так обрабатываем все строки с 1 листа.
После этого пробегаемся по неиспользованным строкам на 2-м листе и заносим их на 3 лист, но значение из 1 и 2 столбца заносим в 1 и 2 столбец 3-го листа, а значение 3 столбца из 2-го листа заносим в 4 столбец 3-го листа (чтобы уплата не попала в начисление). Значение 3 столбца оставляем пустым.
Если снова не понятно излагаю, может еще раз прочитать определение FULL OUTER JOIN в СТ
PS Может быть там где написано «оставляем пустым» заменить на «заносим нуль», чтобы позже не было проблем с выполнением арифметических операций.

Сообщение отредактировал SergeyKorotunПонедельник, 18.11.2013, 00:42

 

Ответить

AndreTM

Дата: Понедельник, 18.11.2013, 07:38 |
Сообщение № 4

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

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

Сообщений: 1762


Репутация:

498

±

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


2003 & 2010

А я всё же считаю, что проще в данном случае сделать через ADO.
Поскольку текст запроса можно сначала программно собрать в текстовую переменную, то количество ключевых полей значения не имеет. Пример реализации FULL OUTER JOIN — см. в файле. Единственное — если надо получить записи в результате именно в том виде, что вы хотите (сначала INNER JOIN, затем OUTER), то можно добавить в запросы поле для сортировки, которое затем исключить в объединенной выборке…


Skype: andre.tm.007
Donate: Qiwi: 9517375010

 

Ответить

SergeyKorotun

Дата: Пятница, 22.11.2013, 13:21 |
Сообщение № 5

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

Ранг: Обитатель

Сообщений: 301


Репутация:

15

±

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


Excel 2007

Пример реализации FULL OUTER JOIN — см. в файле.

Тест показал, что [vba]

Код

Select Distinct * from ((select * from t1 left join t2 on t1.id=t2.id …) union (select * from t1 right join t2 on t1.id=t2.id …))

[/vba] не всегда есть аналогом FULL OUTER JOIN
Например, если в [vba]

Код

(t1 left join t2 on t1.id=t2.id …)

[/vba] условия t1.id=t2.id … не будут обеспечивать связь один к одному, то Distinct удалит не только одну из задвоенных записей, включенные в выборку и по left join и по right join, но и удалит нужные записи, полученные в результате соединения один ко многим.

Сообщение отредактировал SergeyKorotunПятница, 22.11.2013, 13:24

 

Ответить

_Boroda_

Дата: Пятница, 22.11.2013, 14:28 |
Сообщение № 6

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

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

Сообщений: 16618


Репутация:

6465

±

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


2003; 2007; 2010; 2013 RUS

консолидацией по динамическим диапазонам


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

AndreTM

Дата: Пятница, 22.11.2013, 15:39 |
Сообщение № 7

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

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

Сообщений: 1762


Репутация:

498

±

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


2003 & 2010

условия t1.id=t2.id … не будут обеспечивать связь один к одному

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


Skype: andre.tm.007
Donate: Qiwi: 9517375010

Сообщение отредактировал AndreTMПятница, 22.11.2013, 18:34

 

Ответить

SergeyKorotun

Дата: Суббота, 23.11.2013, 17:21 |
Сообщение № 8

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

Ранг: Обитатель

Сообщений: 301


Репутация:

15

±

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


Excel 2007

консолидацией по динамическим диапазонам

Не могу продублировать вашу консолидирующую таблицу. У вас в настройках чекер стоит только возле «подписи верхней строки». Мне, чтобы добиться аналогичного результата, пришлось установить еще два чекера («значения левого столбца» и «создавать связи с исходными данными»). Но тогда появляются скрытые строки с данными, из которых собраны консолидирующие строки. Смотрите «Лист5».

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

qwerty7.xlsm
(13.0 Kb)

 

Ответить

_Boroda_

Дата: Суббота, 23.11.2013, 20:22 |
Сообщение № 9

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

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

Сообщений: 16618


Репутация:

6465

±

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


2003; 2007; 2010; 2013 RUS

Не знаю, куда делась галка про левый столбец, но она должна быть. А вот связи создавать не нужно.
Все это повесить на макрос и не морочиться
[vba]

Код

Range(«A1»).Consolidate Sources:=Array(«нач», «упл»), Function:=xlSum, TopRow:=True, LeftColumn:=True, CreateLinks:=False

[/vba]


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

Связи в эксель

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

Описание проблемы

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

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

При нарушении связи, ячейки со ссылками на другие книги будут содержать ошибки #ССЫЛКА.

Как разорвать связь

Один из способов решения данной проблемы — разрыв связи. Если в файле только одна связь, то сделать это довольно просто:

  1. Перейдите на вкладку Данные.
  2. Выберите команду Изменить связи в разделе Подключения.
  3. Нажмите Разорвать связь.

ВАЖНО! При разрыве связи все формулы ссылающиеся на книгу-источник будут преобразованы в значения! Отмена данной операции невозможна!

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

Для удобства, можно воспользоваться макросом, который разорвет связи со всеми книгами. Макрос входит в состав надстройки VBA-Excel. Чтобы им воспользоваться необходимо:

  1. Перейти на вкладку VBA-Excel.
  2. В меню Связи выбрать команду Разорвать все связи.

Код на VBA

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

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

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

  1. Выделите диапазон данных.
  2. Перейдите на вкладку VBA-Excel (доступна после установки).
  3. В меню Связи выберите команду Разорвать связи в выделенных ячейках.

Создание связи между двумя таблицами в 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 создает формулу, которая включает в себя имя исходной книги, заключенную в скобки [], имя листа с восклицательным знаком на конце и ссылку на ячейку.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Формула для создания связи ВПР между двумя таблицами в Excel

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

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

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

Чтобы создать переключатель между таблицами можно использовать имена диапазонов ячеек и функцию ДВССЫЛ. После чего нужно составить формулу. Необходимо сначала создать два именных диапазона:

  1. Женат – для таблицы «Женатые сотрудники».
  2. Неженат – для таблицы «Неженатые сотрудники».

Чтобы присвоить отдельные имена для каждого из диапазонов этих двух таблиц сделайте следующее:

  1. Выделите диапазон ячеек A3:D10.
  2. Выберите инструмент: «ФОРМУЛЫ»-«Определенные имена»-«Присвоить имя». Появится окно «Создание имени» как показано на рисунке:
  3. В поле «Имя:» введите значение – Женат. И нажмите ОК.
  4. Выделите диапазон ячеек из второй таблицы F3:I10.
  5. Снова выберите инструмент «Присвоить имя» на вкладке «ФОРМУЛЫ» и заполните поле «Имя:» значением – Неженат, как на рисунке:
  6. Нажмите Ок.

Для точности и удобства ввода входных значений в ячейке… используется выпадающий список создан инструментом: «ДАННЫЕ»-«Работа с данными»-«Проверка данных»-«Тип данных:»-«Список».

Выпадающий список состоит только из двух значений: «Женат» «Неженат». Точно такие же как названия имен диапазонов ячеек, созданных ранее. Значение ячейки 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 ) -создать стандартный модуль(InsertModule) и в него вставить скопированный текст. После чего вызвать макросы( 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


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

Здравствуйте.
Перерыл интернет но так и не понял.
Вопрос такой:
1)
У меня есть 9 excel файлов.
Во всех 9 одинаковые поля.
Допустим так
1)Имя 2)Фамилия 3)Отчество
Все это оформлено с выпадаюшими списками и так далее(множество всяких визаульных примочек)

Мне нужно создать 10 excel файл и сделать связь остальных 9 с ним.
Что бы не открывать каждый а просто открыть 10 и увидеть все что есть в 9 остальных.
При этом мне не надо открывать остальные 9.Просто запустить один файлик.

Можно ли сделать через VBA связи(кодом)
Или как сделать что бы остальные 9 отображались в 10.
При этом в каждый из 9 файлов могут добавлять записи и что бы они корректно отображались в 10.
Что бы допустим в 1 файле 15 строк,он их внесет в мой 10 файлик соответственно там будет 15 записей.Во 2 еше 5 итого получается всего уже должно быть 20 записей.Нокак он будет расчитывать где закончались записи первого файла и начались записи второго.
Надо что бы он аккуратно выстраивал их независимо сколько записей в остальных и добавляются они или нет.

2)
Как сделать так что бы он сам при открытии не обнавлялся а только по нажатию кнопки.
Что бы я открыл 10 файл там старые записи я нажал обновить и появились все вновь добавленные записи.



0



Programming

Эксперт

94731 / 64177 / 26122

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

Сообщений: 116,782

23.03.2012, 01:18

Ответы с готовыми решениями:

Создание связей в JPA и таблиц на основе этих связей
Как начинающий ознакомление с 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

Visual Basic
1
ThisWorkbook.Worksheets(2).Range("A" & i).FormulaLocal = "='T:1[1.xlsx]Z'!A" & i

Вроде так работает.
Но есть проблемы…….
1)При копировании через связь он пустые ячейки забивает нулями…там где в ячейке выбор цвета он ставит ноль….
Что делать!?



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 минут
У меня шас проблемка……..
я сделал так…..
Я для каждого файла завел Лист в главной книге в которой все будет собираться.
Далее через связи в эти листы скидывается информация.
Далее я уже работаю с листами этой книги и мне не прихходится открывать каждый файл.
Но есть проблема…….
Я копирую с листа значения которые приходят через связи и получаю СВЯЗЬ за место ЗНАЧЕНИЯ!!!
Пришлось для каждого Листа делать еше один лист.
Так как что бы получить значение нужно Range().VAlue = Range().Value (это я очень приблезительно написал) .
И вот в новых листах которых тоже 9 штук я буду делать все оставшиеся пируэта и далее переносить в основной 10 и соответственно получу Все файлы.
Итого:
19 Листов….по 500 строк
и Главный лист ……со всеми записями……..их правдо не много получится штук 15 но всеж.
Что бы могли добавлять записи новые в файлы и они считывались пришлось хотябы 500 строк вять.

Добавлено через 25 минут

Visual Basic
1
2
3
4
5
6
Dim i as Integer
 
For i = 1 to 9
 ThisWorkbook.Worksheet("Лист" & i).UsedRange.Value = _
   ThisWorkbook.Worksheet("Лист" & i).UsedRange.Value
Next i

Вот так в листах 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

Либо вы меня не понимаете либо я вас.
Я говорю мне не надо открывать остальные 9 файлов они хранятся в другом месте на другом диске….Вообшем не важно где они хранятся….Мне надо что бы я заПУстил 10 файл и Вся информация из 9 других перешла в него.
Кроме как связями я не нашел как сделать.
Пишут везде что надо обязательно открывать файл что бы скопировать из него информацию.
Если вы знаете как скопировать информацию из одной Книги в другую не открывая ее(книгу из которой копируется) то скажите.



0



Alex77755

11482 / 3773 / 677

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

Сообщений: 11,145

25.03.2012, 19:01

8

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

Решение

Я говорю мне не надо открывать остальные 9 файлов

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

19 Листов….по 500 строк
и Главный лист ……со всеми записями……..их правдо не много получится штук 15 но всеж.
Что бы могли добавлять записи новые в файлы и они считывались пришлось хотябы 500 строк вять.

взять на всякий случай 500 вместо 19. Занять 9500 строк. 4% из которых будут нести информацию.
потом что? сортировать? пропускать пустоты.
вот когда-то скопипастил пример. Пару раз применял. Потом стал делать программмы с открытием.
Открывать же будет программа в невидимом режиме. Ты и знать не будешь, что файлы открывались

В VBA не существует метода получения значения из закрытого файла рабочей
книги. Однако вы можете воспользоваться возможностью управления ссылками на
файлы, которая предоставляется в Excel. В настоящем разделе описана функция VBA
(GetValue, показанная ниже), которая получает значение из закрытой книги.
Эта задача выполняется в результате вызова макроса XLM.
Код 1

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private Function GetValue(path, file, sheet, ref)
Dim arg As String
If Right(path, 1) <> "" Then path = path & ""
If Dir(path & file) = "" Then
GetValue = "Файл не найден"
Exit Function
End If
arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
Range(ref).Range("A1").Address(, , xlR1C1)
GetValue = ExecuteExcel4Macro(arg)
End Function

Функция GetValue имеет четыре аргумента:
¦ path – путь к закрытому файлу (например, «d:files»);
¦ file – название рабочей книги (например, «budget.xls»);
¦ sheet – название рабочего листа (например, «Лист1»);
¦ ref – ссылка на ячейку (например, «C4»).
Следующая процедура демонстрирует, как используется функция GetValue.
В этой процедуре отображается значение ячейки А1 листа Лист1 файла 99Budget.xls
(папка XLFilesBudget на диске c:.
Код 1

Visual Basic
1
2
3
4
5
6
7
Sub TestGetValue()
p = "c:XLFilesBudget"
f = "99Budget.xls"
s = "Лист1"
a = "A1"
MsgBox GetValue(p, f, s, a)
End Sub

Ниже приведен еще один пример. Эта процедура считывает 1200 значений
(100 строк и 12 столбцов) из закрытого файла и помещает эти значения на активный
рабочий лист.
Код 1

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub TestGetValue2()
p = "c:XLFilesBudget"
f = "99Budget.xls"
s = "Sheet1"
Application.ScreenUpdating = False
For r = 1 To 100
For c = 1 To 12
a = Cells(r, c).Address
Cells(r, c) = GetValue(p, f, s, a)
Next c
Next r
Application.ScreenUpdating = True
End Sub



3



Эксперт WindowsАвтор FAQ

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

Я начинал делать с открытия файлов……причем тоже делал книги невидимыми.но не на шел как через ВБА потом закрыть эксел в процессах.
И close делал…..он как висел в процессах так и висит.
Получалось так…..я нажимаю кнопочку обновить и так как книга висит в процессах он ее еше раз вызывает через кнопку обновить и она становилась уже видимой.



0



Dragokas

26.03.2012, 11:00

 

#11

Не по теме:

npqHuK,

Visual Basic
1
2
3
Private Sub Workbook_BeforeClose(Cancel As Boolean)
application.quit
End Sub



0



npqHuK

1 / 1 / 0

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

Сообщений: 43

27.03.2012, 16:21

 [ТС]

12

Что за глупость….абсолютно одинаковые по полям……..чуток разные по количеству строк но ТОт что =больше по кол-ву строк загружается через циклы за 6 сек а остальные с меньшим кол0вом строк грузятся 34+ секунд!!Что за вздор! (
Помогите

Добавлено через 19 минут
щас кодом покажу……..
Это грузится быстрее чем..

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
For i = 1 To 500
If ThisWorkbook.Worksheets("Екатеринбург2").Range("A" & i).Value <> "0" Then
ThisWorkbook.Worksheets("Екатеринбург2").Range("A" & i, "AL" & i).Copy Destination:=ThisWorkbook.Worksheets("Главная").Range("A" & i + 4, "AL" & i + 4)
A = A + (i + 4)
ElseIf IsEmpty(ThisWorkbook.Worksheets("Главная").Range("A" & i)) Then Exit For
End If
Next i
 
 
'Подсчет занятых строк
For i = 5 To 500
If IsEmpty(ThisWorkbook.Worksheets("Главная").Range("A" & i)) Then
A = i
Exit For
End If
Next i
 
 
Вот это   
For i = 1 To 500
If ThisWorkbook.Worksheets("Воронеж2").Range("A" & i).Value <> "0" Then
ThisWorkbook.Worksheets("Воронеж2").Range("A" & i, "AL" & i).Copy Destination:=ThisWorkbook.Worksheets("Главная").Range("A" & i + 4, "AL" & i + 4)
A = A + (i + 4)
ElseIf IsEmpty(ThisWorkbook.Worksheets("Главная").Range("A" & i)) Then Exit For
End If
Next i
 
 
'Подсчет занятых строк
For i = 5 To 500
If IsEmpty(ThisWorkbook.Worksheets("Главная").Range("A" & i)) Then
A = i
Exit For
End If
Next i

Не обьясните случаем почему!?



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

У меня другая проблемка………
При создание связей заполянются нулями пустые ячейки как это убрать что они оставались пустыми
Например:
Лист1 —-связь—-> Лист2

Так вот при открытии файла Лист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;»»;формула)
2.условное форматирование. Если = 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

Понравилась статья? Поделить с друзьями:
  • Excel один period payback
  • Excel огэ информатика скачать
  • Excel огэ информатика презентация
  • Excel огэ информатика как делать
  • Excel ограничить область таблицы