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

50

У меня довольно большой стол на листе excel:

Column_1 | Column_2 | Column_3

ValueA       ValueB     ValueC
....

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

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

Есть ли что-то подобное? Или что было бы лучшим способом реализовать себя?

Спасибо

  • 0
    Если вы можете сохранить лист, то у вас есть возможность использовать ADO и Jet / ACE для обработки книги в качестве базы данных и выполнения SQL на листе.
  • 0
    сводные таблицы ?
Показать ещё 1 комментарий
Теги:
excel-vba
excel
function

5 ответов

47
Лучший ответ

Вы можете использовать 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
  • 0
    Спасибо за это, похоже, именно то, что я ищу
  • 3
    не могли бы вы отметить, что это ответило на ваш вопрос, Ричард?
Показать ещё 5 комментариев
5

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

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

  • 0
    Хм, это, конечно, возможно, спасибо за предложение, но я бы предпочел не ссылаться "внешне", как я бы сделал здесь
  • 0
    Что вы подразумеваете под «внешне»?
Показать ещё 1 комментарий
1

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

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

Изображение 3748

1

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

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

= SUMIF (Продукты! $A $2: $A $9999, Записи! $A2, Продукты! $P $2: $9999)

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

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню