Функция Excel для создания SQL-подобных запросов к данным листа? - PullRequest
54 голосов
/ 06 января 2012

У меня большая таблица на листе Excel:

Column_1 | Column_2 | Column_3

ValueA       ValueB     ValueC
....

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

=SQL_SELECT(A1:C1000, "SELECT * WHERE Column_1 = ValueH AND Column_3 = blah")

Существует ли что-то подобное? Или как лучше реализовать себя?

Спасибо

Ответы [ 5 ]

48 голосов
/ 07 января 2012

Вы можете использовать Get External Data (независимо от его имени), расположенную на вкладке «Данные» в Excel 2010, чтобы настроить connection в книге для запроса данных у себя.Используйте From Other Sources From Microsoft Query для подключения к Excel

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

Вот быстрый Sub для демонстрации доступа к объектам соединения

Sub DemoConnection()
    Dim c As Connections
    Dim wb As Workbook
    Dim i As Long
    Dim strSQL As String

    Set wb = ActiveWorkbook
    Set c = wb.Connections
    For i = 1 To c.Count
        ' Reresh the data
        c(i).Refresh 
        ' view the SQL query
        strSQL = c(i).ODBCConnection.CommandText
        MsgBox strSQL
    Next
End Sub
5 голосов
/ 06 января 2012

Если вы можете сохранить книгу, тогда у вас есть возможность использовать ADO и Jet / ACE для обработки книги как базы данных и выполнения SQL для листа.

Информация MSDN о том, как поразить Excelс помощью ADO можно найти здесь .

2 голосов
/ 03 июня 2017

Если вы хотите запустить формулу на листе с помощью функции, которая выполняет оператор SQL, используйте надстройку A-Tools

Пример, function BS_SQL("SELECT ..."):

enter image description here

1 голос
/ 13 июня 2013

Иногда SUM_IF может выполнить работу.

Предположим, у вас есть лист информации о продукте, в том числе уникальный productID в столбце A и цена за единицу в столбце P. И лист записей заказов на покупку с идентификаторами продуктов в столбце A, и вы хотите, чтобы столбец T вычислял единицу. цена за вход.

Следующая формула справится с записями в ячейках! T2 и может быть скопирована в другие ячейки в том же столбце.

=SUMIF(Products!$A$2:$A$9999,Entries!$A2, Products!$P$2:$9999)

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

0 голосов
/ 17 марта 2015

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

...