Querying access from excel

Note: Microsoft Access doesn’t support importing Excel data with an applied sensitivity label. As a workaround, you can remove the label before importing and then re-apply the label after importing. For more information, see Apply sensitivity labels to your files and email in Office.

This article shows you how to move your data from Excel to Access and convert your data to relational tables so that you can use Microsoft Excel and Access together. To summarize, Access is best for capturing, storing, querying, and sharing data, and Excel is best for calculating, analyzing, and visualizing data.

Two articles, Using Access or Excel to manage your data and Top 10 reasons to use Access with Excel, discuss which program is best suited for a particular task and how to use Excel and Access together to create a practical solution.

When you move data from Excel to Access, there are three basic steps to the process.

three basic steps

Note: For information on data modeling and relationships in Access, see Database design basics.

Step 1: Import data from Excel to Access

Importing data is an operation that can go a lot more smoothly if you take some time to prepare and clean your data. Importing data is like moving to a new home. If you clean out and organize your possessions before you move, settling into your new home is much easier.

Clean your data before you import

Before you import data into Access, in Excel it’s a good idea to:

  • Convert cells that contain non-atomic data (that is, multiple values in one cell) to multiple columns. For example, a cell in a «Skills» column that contains multiple skill values, such as «C# programming,» «VBA programming,» and «Web design» should be broken out to separate columns that each contain only one skill value.

  • Use the TRIM command to remove leading, trailing, and multiple embedded spaces.

  • Remove non-printing characters.

  • Find and fix spelling and punctuation errors.

  • Remove duplicate rows or duplicate fields.

  • Ensure that columns of data do not contain mixed formats, especially numbers formatted as text or dates formatted as numbers.

For more information, see the following Excel help topics:

  • Top ten ways to clean your data

  • Filter for unique values or remove duplicate values

  • Convert numbers stored as text to numbers

  • Convert dates stored as text to dates

Note: If your data cleaning needs are complex, or you don’t have the time or resources to automate the process on your own, you might consider using a third-party vendor. For more information, search for «data cleansing software» or «data quality» by your favorite search engine in your Web browser.

Choose the best data type when you import

During the import operation in Access, you want to make good choices so that you receive few (if any) conversion errors that will require manual intervention. The following table summarizes how Excel number formats and Access data types are converted when you import data from Excel to Access, and offers some tips on the best data types to choose in the Import Spreadsheet Wizard.

Excel number format

Access data type

Comments

Best practice

Text

Text, Memo

The Access Text data type stores alphanumeric data up to 255 characters. The Access Memo data type stores alphanumeric data up to 65,535 characters.

Choose Memo to avoid truncating any data.

Number, Percentage, Fraction, Scientific

Number

Access has one Number data type that varies based on a Field Size property (Byte, Integer, Long Integer, Single, Double, Decimal).

Choose Double to avoid any data conversion errors.

Date

Date

Access and Excel both use the same serial date number to store dates. In Access, the date range is larger: from -657,434 (January 1, 100 A.D.) to 2,958,465 (December 31, 9999 A.D.).

Because Access does not recognize the 1904 date system (used in Excel for the Macintosh), you need to convert the dates either in Excel or Access to avoid confusion.

For more information, see Change the date system, format, or two-digit year interpretation and Import or link to data in an Excel workbook.

Choose Date.

Time

Time

Access and Excel both store time values by using the same data type.

Choose Time, which is usually the default.

Currency, Accounting

Currency

In Access, the Currency data type stores data as 8-byte numbers with precision to four decimal places, and is used to store financial data and prevent rounding of values.

Choose Currency, which is usually the default.

Boolean

Yes/No

Access uses -1 for all Yes values and 0 for all No values, whereas Excel uses 1 for all TRUE values and 0 for all FALSE values.

Choose Yes/No, which automatically converts underlying values.

Hyperlink

Hyperlink

A hyperlink in Excel and Access contains a URL or Web address that you can click and follow.

Choose Hyperlink, otherwise Access may use the Text data type by default.

Once the data is in Access, you can delete the Excel data. Don’t forget to backup the original Excel workbook first before deleting it.

For more information, see the Access help topic Import or link to data in an Excel workbook.

Automatically append data the easy way

A common problem Excel users have is appending data with the same columns into one large worksheet. For example, you may have an asset tracking solution that started out in Excel but now has grown to include files from many workgroups and departments. This data may be in different worksheets and workbooks, or in text files that are data feeds from other systems. There is no user interface command or easy way to append similar data in Excel.

The best solution is to use Access, where you can easily import and append data into one table by using the Import Spreadsheet Wizard. Furthermore, you can append a lot of data into one table. You can save the import operations, add them as scheduled Microsoft Outlook tasks, and even use macros to automate the process.

Step 2: Normalize data by using the Table Analyzer Wizard

At first glance, stepping through the process of normalizing your data may seem a daunting task. Fortunately, normalizing tables in Access is a process that is much easier, thanks to the Table Analyzer Wizard.

the table analyzer wizard

1. Drag selected columns to a new table and automatically create relationships

2. Use button commands to rename a table, add a primary key, make an existing column a primary key, and undo the last action

You can use this wizard to do the following:

  • Convert a table into a set of smaller tables and automatically create a primary and foreign key relationship between the tables.

  • Add a primary key to an existing field that contains unique values, or create a new ID field that uses the AutoNumber data type.

  • Automatically create relationships to enforce referential integrity with cascading updates. Cascading deletes are not automatically added to prevent accidentally deleting data, but you can easily add cascading deletes later.

  • Search new tables for redundant or duplicate data (such as the same customer with two different phone numbers) and update this as desired.

  • Back up the original table and rename it by appending «_OLD» to its name. Then, you create a query that reconstructs the original table, with the original table name so that any existing forms or reports based on the original table will work with the new table structure.

For more information, see Normalize your data using the Table Analyzer.

Step 3: Connect to Access data from Excel

After the data has been normalized in Access and a query or table has been created that reconstructs the original data, it’s a simple matter of connecting to the Access data from Excel. Your data is now in Access as an external data source, and so can be connected to the workbook through a data connection, which is a container of information that is used to locate, log on to, and access the external data source. Connection information is stored in the workbook and can also be stored in a connection file, such as an Office Data Connection (ODC) file (.odc file name extension) or a Data Source Name file (.dsn extension). After you connect to external data, you can also automatically refresh (or update) your Excel workbook from Access whenever the data is updated in Access.

For more information, see Import data from external data sources (Power Query).

Get your data into Access

This section walks you through the following phases of normalizing your data: Breaking values in the Salesperson and Address columns into their most atomic pieces, separating related subjects into their own tables, copying and pasting those tables from Excel into Access, creating key relationships between the newly created Access tables, and creating and running a simple query in Access to return information.

Example data in non-normalized form

The following worksheet contains non-atomic values in the Salesperson column and the Address column. Both columns should be split into two or more separate columns. This worksheet also contains information about salespersons, products, customers, and orders. This information should also be split further, by subject, into separate tables.

Salesperson

Order ID

Order Date

Product ID

Qty

Price

Customer Name

Address

Phone

Li, Yale

2349

3/4/09

C-789

3

$7.00

Fourth Coffee

7007 Cornell St Redmond, WA 98199

425-555-0201

Li, Yale

2349

3/4/09

C-795

6

$9.75

Fourth Coffee

7007 Cornell St Redmond, WA 98199

425-555-0201

Adams, Ellen

2350

3/4/09

A-2275

2

$16.75

Adventure Works

1025 Columbia Circle Kirkland, WA 98234

425-555-0185

Adams, Ellen

2350

3/4/09

F-198

6

$5.25

Adventure Works

1025 Columbia Circle Kirkland, WA 98234

425-555-0185

Adams, Ellen

2350

3/4/09

B-205

1

$4.50

Adventure Works

1025 Columbia Circle Kirkland, WA 98234

425-555-0185

Hance, Jim

2351

3/4/09

C-795

6

$9.75

Contoso, Ltd.

2302 Harvard Ave Bellevue, WA 98227

425-555-0222

Hance, Jim

2352

3/5/09

A-2275

2

$16.75

Adventure Works

1025 Columbia Circle Kirkland, WA 98234

425-555-0185

Hance, Jim

2352

3/5/09

D-4420

3

$7.25

Adventure Works

1025 Columbia Circle Kirkland, WA 98234

425-555-0185

Koch, Reed

2353

3/7/09

A-2275

6

$16.75

Fourth Coffee

7007 Cornell St Redmond, WA 98199

425-555-0201

Koch, Reed

2353

3/7/09

C-789

5

$7.00

Fourth Coffee

7007 Cornell St Redmond, WA 98199

425-555-0201

Information in its smallest parts: atomic data

Working with the data in this example, you can use the Text to Column command in Excel to separate the «atomic» parts of a cell (such as street address, city, state, and postal code) into discrete columns.

The following table shows the new columns in the same worksheet after they have been split to make all values atomic. Note that the information in the Salesperson column has been split into Last Name and the First Name columns and that the information in the Address column has been split into Street Address, City, State, and ZIP Code columns. This data is in «first normal form.»

Last Name

First Name

Street Address

City

State

ZIP Code

Li

Yale

2302 Harvard Ave

Bellevue

WA

98227

Adams

Ellen

1025 Columbia Circle

Kirkland

WA

98234

Hance

Jim

2302 Harvard Ave

Bellevue

WA

98227

Koch

Reed

7007 Cornell St Redmond

Redmond

WA

98199

Breaking data out into organized subjects in Excel

The several tables of example data that follow show the same information from the Excel worksheet after it has been split into tables for salespersons, products, customers, and orders. The table design isn’t final, but it’s on the right track.

The Salespersons table contains only information about sales personnel. Note that each record has a unique ID (SalesPerson ID). The SalesPerson ID value will be used in the Orders table to connect orders to salespeople.

Salespersons

Salesperson ID

Last Name

First Name

101

Li

Yale

103

Adams

Ellen

105

Hance

Jim

107

Koch

Reed

The Products table contains only information about products. Note that each record has a unique ID (Product ID). The Product ID value will be used to connect product information to the Order Details table.

Products

Product ID

Price

A-2275

16.75

B-205

4.50

C-789

7.00

C-795

9.75

D-4420

7.25

F-198

5.25

The Customers table contains only information about customers. Note that each record has a unique ID (Customer ID). The Customer ID value will be used to connect customer information to the Orders table.

Customers

Customer ID

Name

Street Address

City

State

ZIP Code

Phone

1001

Contoso, Ltd.

2302 Harvard Ave

Bellevue

WA

98227

425-555-0222

1003

Adventure Works

1025 Columbia Circle

Kirkland

WA

98234

425-555-0185

1005

Fourth Coffee

7007 Cornell St

Redmond

WA

98199

425-555-0201

The Orders table contains information about orders, salespersons, customers, and products. Note that each record has a unique ID (Order ID). Some of the information in this table needs to be split into an additional table that contains order details so that the Orders table contains only four columns — the unique order ID, the order date, the salesperson ID, and the customer ID. The table shown here has not yet been split into the Order Details table.

Orders

Order ID

Order Date

SalesPerson ID

Customer ID

Product ID

Qty

2349

3/4/09

101

1005

C-789

3

2349

3/4/09

101

1005

C-795

6

2350

3/4/09

103

1003

A-2275

2

2350

3/4/09

103

1003

F-198

6

2350

3/4/09

103

1003

B-205

1

2351

3/4/09

105

1001

C-795

6

2352

3/5/09

105

1003

A-2275

2

2352

3/5/09

105

1003

D-4420

3

2353

3/7/09

107

1005

A-2275

6

2353

3/7/09

107

1005

C-789

5

Order details, such as the product ID and quantity are moved out of the Orders table and stored in a table named Order Details. Keep in mind that there are 9 orders, so it makes sense that there are 9 records in this table. Note that the Orders table has a unique ID (Order ID), which will referred to from the Order Details table.

The final design of the Orders table should look like the following:

Orders

Order ID

Order Date

SalesPerson ID

Customer ID

2349

3/4/09

101

1005

2350

3/4/09

103

1003

2351

3/4/09

105

1001

2352

3/5/09

105

1003

2353

3/7/09

107

1005

The Order Details table contains no columns that require unique values (that is, there is no primary key), so it is okay for any or all columns to contain «redundant» data. However, no two records in this table should be completely identical (this rule applies to any table in a database). In this table, there should be 17 records — each corresponding to a product in an individual order. For example, in order 2349, three C-789 products comprise one of the two parts of the entire order.

The Order Details table should, therefore, look like the following:

Order Details

Order ID

Product ID

Qty

2349

C-789

3

2349

C-795

6

2350

A-2275

2

2350

F-198

6

2350

B-205

1

2351

C-795

6

2352

A-2275

2

2352

D-4420

3

2353

A-2275

6

2353

C-789

5

Copying and pasting data from Excel into Access

Now that the information about salespersons, customers, products, orders, and order details has been broken out into separate subjects in Excel, you can copy that data directly into Access, where it will become tables.

Creating relationships between the Access tables and running a query

After you have moved your data to Access, you can create relationships between tables and then create queries to return information about various subjects. For example, you can create a query that returns the Order ID and the names of the salespersons for orders entered between 3/05/09 and 3/08/09.

In addition, you can create forms and reports to make data entry and sales analysis easier.

Need more help?

You can always ask an expert in the Excel Tech Community or get support in the Answers community.

Содержание

  1. Copy data from Excel
  2. Try it!
  3. SQL запросы в Microsoft Excel
  4. Создание SQL запроса в Excel
  5. Способ 1: использование надстройки
  6. Способ 2: использование встроенных инструментов Excel
  7. Способ 3: подключение к серверу SQL Server
  8. Как выполнить запрос Access из Excel
  9. Как макрос работает
  10. Код макроса
  11. Как этот код работает
  12. Как использовать

Copy data from Excel

Try it!

Take advantage of the streamlined editing, powerful querying, and helpful reporting capabilities in Access by copying data from an Excel spreadsheet. Put your data into an existing table or into a new, blank table.

Before you copy data, make sure it’s consistent and structured so that it copies cleanly.

Clean up your data

All data in a column should be the same type and should have a similar format. For example, make sure all phone numbers include an area code but no country prefix, all addresses include city and state but no country, and all prices include cents—even if you list .00.

Remove any subheadings, summary or comment rows, and blank rows.

Note: If necessary, add these back later using Access query and report grouping and totaling.

If you’re pasting the data into an existing Access table, make sure that your spreadsheet has the same number of columns—in the same order—as the Access table. (On the other hand, if you’re planning to create a new Access table with this data, name and order the columns however you prefer.)

Tip: It’s good database practice to list each discrete piece of information in its own column. For example, separate first name and last name into different columns, and separate street address, city, state, and postal code.

Add Excel data to a new table

Select and copy the data in Excel that you want to add to the table.

In Access, select Home > Paste.

To indicate whether the first row of your data contains column headings, select Yes or No.

If you’d like to, rename the table and fields.

Add Excel data to an existing table

Select and copy the data in Excel that you want to add to the table.

In Access, open the table you want to paste the data into.

At the end of the table, select an empty row.

Select Home > Paste > Paste Append.

When you copy Excel data into an Access database, your original data in Excel remains unchanged.

Источник

SQL запросы в Microsoft Excel

SQL – популярный язык программирования, который применяется при работе с базами данных (БД). Хотя для операций с базами данных в пакете Microsoft Office имеется отдельное приложение — Access, но программа Excel тоже может работать с БД, делая SQL запросы. Давайте узнаем, как различными способами можно сформировать подобный запрос.

Создание SQL запроса в Excel

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

Способ 1: использование надстройки

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

    После того, как вы скачали файл надстройки xltools.exe, следует приступить к его установке. Для запуска инсталлятора нужно произвести двойной щелчок левой кнопки мыши по установочному файлу. После этого запустится окно, в котором нужно будет подтвердить согласие с лицензионным соглашением на использование продукции компании Microsoft — NET Framework 4. Для этого всего лишь нужно кликнуть по кнопке «Принимаю» внизу окошка.

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

Далее пишется текст команды, которую вы хотите применить к выбранным объектам. Команды составляются при помощи специальных операторов. Вот основные операторы SQL:

  • ORDER BY – сортировка значений;
  • JOIN – объединение таблиц;
  • GROUP BY – группировка значений;
  • SUM – суммирование значений;
  • DISTINCT – удаление дубликатов.

Кроме того, в построении запроса можно использовать операторы MAX, MIN, AVG, COUNT, LEFT и др.

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

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

Способ 2: использование встроенных инструментов Excel

Существует также способ создать SQL запрос к выбранному источнику данных с помощью встроенных инструментов Эксель.

  1. Запускаем программу Excel. После этого перемещаемся во вкладку «Данные».
  2. В блоке инструментов «Получение внешних данных», который расположен на ленте, жмем на значок «Из других источников». Открывается список дальнейших вариантов действий. Выбираем в нем пункт «Из мастера подключения данных».
  3. Запускается Мастер подключения данных. В перечне типов источников данных выбираем «ODBC DSN». После этого щелкаем по кнопке «Далее».
  4. Открывается окно Мастера подключения данных, в котором нужно выбрать тип источника. Выбираем наименование «MS Access Database». Затем щелкаем по кнопке «Далее».
  5. Открывается небольшое окошко навигации, в котором следует перейти в директорию расположения базы данных в формате mdb или accdb и выбрать нужный файл БД. Навигация между логическими дисками при этом производится в специальном поле «Диски». Между каталогами производится переход в центральной области окна под названием «Каталоги». В левой области окна отображаются файлы, расположенные в текущем каталоге, если они имеют расширение mdb или accdb. Именно в этой области нужно выбрать наименование файла, после чего кликнуть на кнопку «OK».
  6. Вслед за этим запускается окно выбора таблицы в указанной базе данных. В центральной области следует выбрать наименование нужной таблицы (если их несколько), а потом нажать на кнопку «Далее».
  7. После этого открывается окно сохранения файла подключения данных. Тут указаны основные сведения о подключении, которое мы настроили. В данном окне достаточно нажать на кнопку «Готово».
  8. На листе Excel запускается окошко импорта данных. В нем можно указать, в каком именно виде вы хотите, чтобы данные были представлены:
    • Таблица;
    • Отчёт сводной таблицы;
    • Сводная диаграмма.

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

После того, как все настройки импорта указаны, жмем на кнопку «OK».

  • Как видим, таблица из базы данных перемещена на лист. Затем перемещаемся во вкладку «Данные» и щелкаем по кнопке «Подключения», которая размещена на ленте в блоке инструментов с одноименным названием.
  • После этого запускается окно подключения к книге. В нем мы видим наименование ранее подключенной нами базы данных. Если подключенных БД несколько, то выбираем нужную и выделяем её. После этого щелкаем по кнопке «Свойства…» в правой части окна.
  • Запускается окно свойств подключения. Перемещаемся в нем во вкладку «Определение». В поле «Текст команды», находящееся внизу текущего окна, записываем SQL команду в соответствии с синтаксисом данного языка, о котором мы вкратце говорили при рассмотрении Способа 1. Затем жмем на кнопку «OK».
  • После этого производится автоматический возврат к окну подключения к книге. Нам остается только кликнуть по кнопке «Обновить» в нем. Происходит обращение к базе данных с запросом, после чего БД возвращает результаты его обработки назад на лист Excel, в ранее перенесенную нами таблицу.
  • Способ 3: подключение к серверу SQL Server

    Кроме того, посредством инструментов Excel существует возможность соединения с сервером SQL Server и посыла к нему запросов. Построение запроса не отличается от предыдущего варианта, но прежде всего, нужно установить само подключение. Посмотрим, как это сделать.

    1. Запускаем программу Excel и переходим во вкладку «Данные». После этого щелкаем по кнопке «Из других источников», которая размещается на ленте в блоке инструментов «Получение внешних данных». На этот раз из раскрывшегося списка выбираем вариант «С сервера SQL Server».
    2. Происходит открытие окна подключения к серверу баз данных. В поле «Имя сервера» указываем наименование того сервера, к которому выполняем подключение. В группе параметров «Учетные сведения» нужно определиться, как именно будет происходить подключение: с использованием проверки подлинности Windows или путем введения имени пользователя и пароля. Выставляем переключатель согласно принятому решению. Если вы выбрали второй вариант, то кроме того в соответствующие поля придется ввести имя пользователя и пароль. После того, как все настройки проведены, жмем на кнопку «Далее». После выполнения этого действия происходит подключение к указанному серверу. Дальнейшие действия по организации запроса к базе данных аналогичны тем, которые мы описывали в предыдущем способе.

    Как видим, в Экселе SQL запрос можно организовать, как встроенными инструментами программы, так и при помощи сторонних надстроек. Каждый пользователь может выбрать тот вариант, который удобнее для него и является более подходящим для решения конкретно поставленной задачи. Хотя, возможности надстройки XLTools, в целом, все-таки несколько более продвинутые, чем у встроенных инструментов Excel. Главный же недостаток XLTools заключается в том, что срок бесплатного пользования надстройкой ограничен всего двумя календарными неделями.

    Источник

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

    Что делает макрос: Вот отличный макрос для тех из вас, кто часто копирует и вставляет результаты запросов Microsoft Access в Excel. В этом макросе вы используете DAO (Data Access Object), чтобы открыть и запустить запрос Access в фоновом режиме и вывода результатов в Excel.

    Как макрос работает

    В этом макросе вы указываете Excel базу данных Access и извлекаете данные из существующего запроса доступа. Затем вы сохраняете этот запрос в Recordset объекта, который вы можете использовать для заполнения таблиц Excel.
    Необходимо установить ссылку на библиотеку объектов Microsoft Access.
    В дополнение к библиотеке объектов доступа, необходимо установить ссылку на Microsoft DAO XX библиотеки объектов, где XX это номер версии. Обратите внимание, что вы можете увидеть несколько версий этой библиотеки в диалоговом окне Reference. Как правило, нужно выбрать последнюю версию Microsoft DAO. Установите флажок рядом с записью.

    Код макроса

    Как этот код работает

    1. Шаг 1 объявляет необходимые переменные. Переменная объекта MyDatabase выставляет ваш Access к приложению базы данных через библиотеку объектов DAO. MyQueryDef также является объектной переменной, которая служит контейнером памяти для целевого запроса. MyRecordset является Объект набора записей, содержащий результаты извлечения данных. В дополнение к этим, i целочисленная переменная используется для добавления заголовков столбцов.
    2. Шаг 2 определяет базу данных, которая содержит ваш целевой запрос, а также какой запрос будет запущен. Присвоение запроса объекту QueryDef позволяет вам по существу открыть запрос.
    3. Шаг 3 буквально запускает запрос в памяти. Результаты запроса затем сохраняются в MyRecordset объекте. После того, как результаты находятся в наборе записей, вы можете вывести данные в Excel.
    4. Шаг 4 готовится к выводу набора записей путем очистки области вывода. Это гарантирует отсутствие остатка предыдущих данных.
    5. На этом шаге используется метод CopyFromRecordset в Excel, чтобы получить возвращенный набор данных в электронные таблицы. В этом примере макрос копирует данные из объекта MyRecordset в Лист1 в ячейке А7.
    6. Наконец, вы перечисляете все поля в наборе записей, чтобы автоматически получить имя каждого заголовка и вводите его в Excel.

    Как использовать

    Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:

    1. Активируйте редактор Visual Basic, нажав ALT + F11.
    2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
    3. Выберите Insert➜Module.
    4. Введите или вставьте код.

    Источник

    1. Что делает макрос
    2. Код макроса
    3. Как работает макрос
    4. Как использовать
    5. Скачать файл

    Ссылка на это место страницы:
    #zadacha

    Если вы часто копируете и вставляете результаты запросов Microsoft Access в Excel вам пригодится этот макрос. В этом макросе используется DAO (Data Access Object), чтобы открыть и запустить запрос Access в фоновом режиме и вывести результаты в Excel.

    В этом макросе вы указываете Excel базу данных Access и извлекаете данные из существующего запроса. Затем вы сохраняете этот запрос в Recordset объекта, который вы можете использовать для заполнения таблиц Excel. Необходимо установить ссылку на библиотеку объектов Microsoft Access. В дополнение к библиотеке объектов доступа, необходимо установить ссылку на Microsoft DAO XX библиотеки объектов, где XX это номер версии. Обратите внимание, что вы можете увидеть несколько версий этой библиотеки в диалоговом окне Reference. Как правило, нужно выбрать последнюю версию Microsoft DAO. Установите флажок рядом с записью. 

    Ссылка на это место страницы:
    #formula

    1. Sub VipolnitZaprosAccessIzExcel()
    2. Dim MyDatabase As DAO.Database
    3. Dim MyQueryDef As DAO.QueryDef
    4. Dim MyRecordset As DAO.Recordset
    5. Dim i As Integer
    6. Set MyDatabase = DBEngine.OpenDatabase _
    7. ("C:TempYourAccessDatabse.accdb")
    8. Set MyQueryDef = MyDatabase.QueryDefs("Ваше имя запроса")
    9. Set MyRecordset = MyQueryDef.OpenRecordset
    10. Sheets("Лист1").Select
    11. ActiveSheet.Range("A6:K10000").ClearContents
    12. ActiveSheet.Range("A7").CopyFromRecordset MyRecordset
    13. For i = 1 To MyRecordset.Fields.Count
    14. ActiveSheet.Cells(6, i).Value = MyRecordset.Fields(i - 1).Name
    15. Next i
    16. End Sub

    Ссылка на это место страницы:
    #kak

    1. Шаг 1 объявляет необходимые переменные. Переменная объекта MyDatabase привязывает Access к приложению базы данных через библиотеку объектов DAO. MyQueryDef также является объектной переменной, которая служит контейнером памяти для целевого запроса. MyRecordset является объектом набора записей, содержащий результаты извлечения данных. В дополнение к этим переменным i целочисленная переменная используется для добавления заголовков столбцов. 

    2. Шаг 2 определяет базу данных, которая содержит ваш целевой запрос, а также какой запрос будет запущен. Присвоение запроса объекту QueryDef позволяет вам открыть запрос. 

    3. Шаг 3 буквально запускает запрос в памяти. Результаты запроса затем сохраняются в MyRecordset. После того как результаты помещены в переменную, вы можете вывести данные в Excel. 

    4. Шаг 4 готовится к выводу набора записей путем очистки листа Excel. Это гарантирует отсутствие остатка предыдущих данных. 

    5. На этом шаге используется метод CopyFromRecordset в Excel, чтобы получить набор данных в электронной таблице. В этом примере макрос копирует данные из объекта MyRecordset на Лист1 в ячейку А7. 

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

    Ссылка на это место страницы:
    #touse

    Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:

    1. Активируйте редактор Visual Basic, нажав ALT + F11
    2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта. 
    3. Выберите Insert➜Module
    4. Введите или вставьте код во вновь созданном модуле. 

    Ссылка на это место страницы:
    #file

    Файлы статей доступны только зарегистрированным пользователям.

    1. Введите свою почту

    2. Нажмите Зарегистрироваться

    3. Обновите страницу
    Вместо этого блока появится ссылка для скачивания материалов.

    Привет! Меня зовут Дмитрий. С 2014 года Microsoft Cretified Trainer. Вместе с командой управляем этим сайтом. Наша цель — помочь вам эффективнее работать в Excel. 

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

    Подписывайтесь на нас в соц.сетях:

     

    Ram-zes

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

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

    Есть таблица Excel, данные которой загружаются в запрос на выборку Access
    В запросе можно указать разные способы загрузки данных:
    1. Загружаются данные всего листа:  SELECT [Лист1$].* FROM [Лист1$] IN » [Excel 12.0;HDR=Yes;IMEX=1;DATABASE=С:База данныхФайл.xlsx];
    2. Загружаются данные заданных полей:  SELECT [Лист1$].[Поле1], [Лист1$].[Поле2],[Лист1$].[Поле3]  FROM [Excel 12.0;HDR=YES;IMEX=1;DATABASE= С:База данныхФайл.xlsx].[Лист1$]

    Нужен третий вариант: загрузка данных именованного диапазона или заданного диапазона, например A3:K20. Подскажите, можно ли загружать напрямую из Excel в ЗАПРОС Access данные диапазона? Если да, то как?
    Знаю как загружать именованный диапазон в Access с помощью сводных таблиц, но нужна загрузка в запрос

    Изменено: Ram-zes12.01.2015 17:58:10

     

    B.Key

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

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

    попробуйте просто указать имя именованного диапазона …….С:База данныхФайл.xlsx].[tbl]
    где tbl имя диапазона

     

    Ram-zes

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

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

    B.Key, так не получается…
    Сборка по теме с учетом моих экспериментов:
    1. Данные всего листа
    SELECT [Лист1$].* FROM [Лист1$] IN » [Excel 12.0XML;HDR=Yes;IMEX=1;DATABASE=С:База данныхФайл.xlsx];

    2. Данные заданных полей (поля должны стоять в первой строке)
    SELECT [Лист1$].[Поле1], [Лист1$].[Поле2],[Лист1$].[Поле3] FROM [Excel 12.0XML;HDR=YES;IMEX=1;DATABASE= С:База данныхФайл.xlsx].[Лист1$]

    3. Данные по заданному диапазону
    SELECT * FROM [Лист1$A6:A11] IN » [Excel 12.0XML;HDR=Yes;IMEX=1;DATABASE=С:База данныхФайл.xlsx];

    4. Данные по именованному диапазону
    SELECT * FROM [имя диапазона] IN » [Excel 12.0XML;HDR=Yes;IMEX=1;DATABASE=С:База данныхФайл.xlsx];

    Изменено: Ram-zes15.01.2015 16:34:17

     

    LVL

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

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

    Загрузка в запрос — не правильная постановка задачи (формулировка). Если я правильно понял, то вам нужно использовать значения из именованного диапазона в запросе на выборку в базе Access. Тогда я бы сделал так:
    Сначала создаем связанную таблицу в этой базе (линкуем данные), а потом в самой базе выполняем нужный запрос с использованием этой таблицы без заморочек. После выполнения запроса связанную таблицу удаляем.

     

    Ram-zes

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

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

    Да, использовать значения…

    LVL, обмен данными идет постоянно — это не разовая акция. Поэтому, как я понимаю, при удалении связанной таблицы, данные перестанут загружаться в запрос.
    Изначально я так и делал, как вы описали (делал связанные таблицы в Access и обращался к ним запросами), но мои эксперименты показали, что если сразу обращаться к данным в файле  Excel из запроса с помощью SQL, то скорость обмена данными выше, а заморочек меньше. Если Вы линкуете, то перегружаете базу дополнительными таблицами, мне кажется — это лишнее промежуточное звено, особенно если нужно получать данные не с одного, а с нескольких таких файлов

     

    LVL

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

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

    #6

    15.01.2015 14:19:58

    Цитата
    Ram-zes пишет: обмен данными идет постоянно — это не разовая акция

    В чем проблема, не удаляйте связанную таблицу

    Цитата
    Ram-zes пишет: мои эксперименты показали, что если сразу обращаться к данным в файлеExcel из запроса с помощью SQL, то скорость обмена данными выше

    Доля правды в этом есть, вернее даже не так… Варианта 2:
    1. Работаете с таблицами посредством SQL (в данном случае прилинковывая таблицу)
    2. Формируете запрос с ограничениями сразу в нем (WHERE и т.д.)

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

     

    LVL

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

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

    Перечитал ещё раз тему… Хочу уточнить — где находятся данные и куда их нужно вернуть? Я предполагал, что данные находятся в базе Access и вы хотите получать их с помощью запроса в файл Excel, при этом в тексте запроса использовать ограничения указанные в файле Excel… Я правильно вас понял?

     

    Antubas

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

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

    #8

    15.01.2015 14:28:51

    Цитата
    Ram-zes пишет: Если Вы линкуете, то перегружаете базу дополнительными таблицами

    DAO.Recordset не спасет? Если в него записать SQL запрос условием отбора, после обнулить и закрыть.

     

    Ram-zes

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

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

    Вообще коммуникация очень сложная… Но если коротко то примерно так:
    Есть файл Excel, куда вносится первичная информация (одно из полей Отдел). Информация поступает в Access и там идет нарезка этой информации на отделы, т.е. в Access есть запросы, которые и делают эту нарезку, скажем на 10 отделов (ну понятно, что в каждом запросе стоит свое условие — название отдела). C этих запросов информация отправляется в другие файлы Excel — по отделам. Там вносится необходимая информация. Затем в Access работают другие запросы, которые уже обращаются к этим файлам Excel и получают информацию в базу, есть консолидирующий запрос, который после, отправляет все данные в исходный файл.
    При сохранении файлов Excel информация попадает в Access. При обновлении данных в Excel информация закачивается из Access. Ну вот как-то так.

    Изменено: Ram-zes15.01.2015 14:36:16

     

    LVL

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

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

    Задумчивая схема…
    Т.е. всетаки обмен идет между Access и Excel — это я и хотел уточнить…
    А теперь — в каком именно моменте возникает проблема?

     

    Ram-zes

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

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

    Antubas, может DAO.Recordset и спасет… Но мне об этом не ведомо. Я не профессиональный IT и к сожалению об DAO.Recordset пока ничего не знаю. Можете показать пример кода, я попробую

     

    Ram-zes

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

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

    LVL, ну сейчас с запросами и получением (обменом) информации между файлами проблем нет. Есть другая проблема:

    Почему при обновлении данных в файле Excel открывается другой файл, связанный с ним через запрос Access?

    Есть файл данные_1.xlsx. Он связан с файлом данные_2.xlsx через запрос Access. Все файлы находятся в локальной сети. Подключение к базе данных Access в Excel идет по ссылке на сетевой диск Data Source=P:База…
    При обновлении файла данные_1.xlsx на компьютере_1 происходит запуск на этом же компьютере файла данные_2.xlsx (в режиме для чтения), если он одновременно открыт на компьютере_2.
    Если файл данные_2.xlsx закрыт, то обновление в файле данные_1.xlsx происходит без открытия связанного файла
    Из-за чего так происходит и что сделать, что бы при обновлении файла данные_1.xlsx не запускался файл данные_2.xlsx

    Можно ли решить эту проблему через настройку свойств подключения в Excel? В частности в настройке прав доступа:
    Права доступа (Read — только чтение; ReadWrite — чтение и запись; Share Deny None — никому не отказывать ни в чтении, ни в записи; Share Deny Read — запретить всем работу в режиме чтения; Share Deny Write — запретить всем работу в режиме записи; Share Exclusive — запретить всем работу в режиме чтения/записи; Write — только запись).

    Изменено: Ram-zes15.01.2015 14:43:28

     

    Ram-zes

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

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

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

     

    Antubas

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

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

    #14

    15.01.2015 14:51:53

    Цитата
    Ram-zes пишет: пример кода
    Код
    Function status()
       Dim db As Database
       Dim rst As DAO.Recordset
       Dim strSQL As String
       Set db = CurrentDb
       strSQL = "SELECT [Лист1$].* FROM [Лист1$] IN '' [Excel 12.0;HDR=Yes;IMEX=1;DATABASE=С:База данныхФайл.xlsx];"
       Set rst = db.OpenRecordset(strSQL)
       rst.MoveFirst
       While Not rst.EOF
          rst.Fields("Столбец").Value
          rst.MoveNext
       Wend
       Set rst = Nothing
       rst.Close
    End Function
    

    Примерно так

     

    Ram-zes

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

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

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

     

    Ram-zes

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

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

    Antubas, а вставляем этот код в SQL запрос? Я правильно понимаю, что вместо моего кода нужно вставить ваш?

     

    Antubas

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

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

    Может выложите примерчик с Excel и Access файлом, или сходите на

    http://www.cyberforum.ru/ms-access/

    там помогут с Access.

     

    Antubas

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

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

    #18

    15.01.2015 15:03:51

    Цитата
    Ram-zes пишет: вставляем этот код в SQL запрос?

    В VBA, лучше всего дайте файлы с примерами )

     

    LVL

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

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

    #19

    15.01.2015 15:04:20

    Цитата
    Ram-zes пишет: Access не берет более 255 столбцов…

    Вы создаете таблицы в Access с таким количеством полей?

     

    Ram-zes

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

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

    LVL, а куда деваться? Если нужно такое количество полей: 01.01 | 02.01 | 03.01 и т.д.

    Antubas, с VBA не работаю, к сожалению…

    Изменено: Ram-zes15.01.2015 15:08:07

     

    Antubas

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

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

    У Вас база Access типа «Клиент»-«Сервер», или же Вы Access используете просто для операции БД?

    Изменено: Antubas15.01.2015 15:08:14

     

    Ram-zes

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

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

    видимо просто для операции БД

     

    Ram-zes

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

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

    В принципе, выложить можно, но мне нужно ее подготовить для этого, только завтра

     

    Antubas

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

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

    #24

    15.01.2015 15:11:44

    Цитата
    Ram-zes пишет: операции БД

    А почему бы тогда Вам не тратить время на Access и сделать все эти деления и обновления в самом Excel?

    Цитата
    только завтра

    no problem

    Изменено: Antubas15.01.2015 15:21:55

     

    Ram-zes

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

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

    Вопрос в совместном доступе в Excel — не просто это сделать (ну мне не просто). Потребуется VBA. Ну или я не знаю адекватного способа

    Изменено: Ram-zes15.01.2015 15:21:11

     

    Ram-zes

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

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

    В общем решение оказалось простым. Нужен офис 2010 на всех компах и в свойствах подключения в правах доступа нужно указать: Share Deny None

     

    zin-renat

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

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

    #27

    24.07.2015 11:37:14

    Добрый день. Ситуация такая. Имеется запрос из внешней базы данных MS SQL Server 2012, результат которого выводится в книгу Excel.

    Код
    select * from packs where packs.prday = 10
    

    Как вместо цифры 10 подставить значение из ячейки листа Excel без использования VBA?

     

    JeyCi

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

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

    #28

    24.07.2015 12:05:22

    попробуйте так — при обновлении запроса должно выскочить окно — там и указать ячейку или др (см вроде бы в свойствах выходной таблицы — параметры)…

    Код
    select * from packs where packs.prday = [?]
    

    или заново сформируйте параметрический (!) запрос через ms query…

    см пост№23 здесь

    p.s. и все запросы сваливать в эту ветку, наверно, не надо — лучше см.

    Правила форума

    — чуть что, я вас предупредила…

    Изменено: JeyCi24.07.2015 12:10:08

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

    Skip to content

    На чтение 3 мин. Просмотров 3.2k.

    Что делает макрос: Вот отличный макрос для тех из вас, кто часто копирует и вставляет результаты запросов Microsoft Access в Excel. В этом макросе вы используете DAO (Data Access Object), чтобы открыть и запустить запрос Access в фоновом режиме и вывода результатов в Excel.

    Содержание

    1. Как макрос работает
    2. Код макроса
    3. Как этот код работает
    4. Как использовать

    Как макрос работает

    В этом макросе вы указываете Excel базу данных Access и извлекаете данные из существующего запроса доступа. Затем вы сохраняете этот запрос в Recordset объекта, который вы можете использовать для заполнения таблиц Excel.
    Необходимо установить ссылку на библиотеку объектов Microsoft Access.
    В дополнение к библиотеке объектов доступа, необходимо установить ссылку на Microsoft DAO XX библиотеки объектов, где XX это номер версии. Обратите внимание, что вы можете увидеть несколько версий этой библиотеки в диалоговом окне Reference. Как правило, нужно выбрать последнюю версию Microsoft DAO. Установите флажок рядом с записью.

    Код макроса

    Sub VipolnitZaprosAccessIzExcel()
    'Шаг 1: Объявляем переменные
    Dim MyDatabase As DAO.Database
    Dim MyQueryDef As DAO.QueryDef
    Dim MyRecordset As DAO.Recordset
    Dim i As Integer
    'Шаг 2: Определить базу данных и запрос
    Set MyDatabase = DBEngine.OpenDatabase _
    ("C:TempYourAccessDatabse.accdb")
    Set MyQueryDef = MyDatabase.QueryDefs("Ваше имя запроса")
    'Шаг 3: Откройте запрос
    Set MyRecordset = MyQueryDef.OpenRecordset
    'Шаг 4: Очистить предыдущее содержимое
    Sheets("Лист1").Select
    ActiveSheet.Range("A6:K10000").ClearContents
    'Шаг 5: Скопируйте набор записей в Excel
    ActiveSheet.Range("A7").CopyFromRecordset MyRecordset
    'Шаг 6: Добавить имена заголовков столбцов в электронную таблицу
    For i = 1 To MyRecordset.Fields.Count
    ActiveSheet.Cells(6, i).Value = MyRecordset.Fields(i - 1).Name
    Next i
    End Sub
    

    Как этот код работает

    1. Шаг 1 объявляет необходимые переменные. Переменная объекта MyDatabase выставляет ваш Access к приложению базы данных через библиотеку объектов DAO. MyQueryDef также является объектной переменной, которая служит контейнером памяти для целевого запроса. MyRecordset является Объект набора записей, содержащий результаты извлечения данных. В дополнение к этим, i целочисленная переменная используется для добавления заголовков столбцов.
    2. Шаг 2 определяет базу данных, которая содержит ваш целевой запрос, а также какой запрос будет запущен. Присвоение запроса объекту QueryDef позволяет вам по существу открыть запрос.
    3. Шаг 3 буквально запускает запрос в памяти. Результаты запроса затем сохраняются в MyRecordset объекте. После того, как результаты находятся в наборе записей, вы можете вывести данные в Excel.
    4. Шаг 4 готовится к выводу набора записей путем очистки области вывода. Это гарантирует отсутствие остатка предыдущих данных.
    5. На этом шаге используется метод CopyFromRecordset в Excel, чтобы получить возвращенный набор данных в электронные таблицы. В этом примере макрос копирует данные из объекта MyRecordset в Лист1 в ячейке А7.
    6. Наконец, вы перечисляете все поля в наборе записей, чтобы автоматически получить имя каждого заголовка и вводите его в Excel.

    Как использовать

    Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:

    1. Активируйте редактор Visual Basic, нажав ALT + F11.
    2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
    3. Выберите Insert➜Module.
    4. Введите или вставьте код.

    Like this post? Please share to your friends:
  • Querying a database in excel
  • Question word order перевод
  • Query postgresql from excel
  • Question word order worksheets
  • Question word order worksheet