У меня довольно большой стол на листе 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")
Есть ли что-то подобное? Или что было бы лучшим способом реализовать себя?
Спасибо
Вы можете использовать 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
Если вы можете сохранить книгу, тогда у вас есть возможность использовать ADO и Jet/ACE для обработки книги как базы данных и выполнения SQL на листе.
Информацию о том, как удалить Excel с помощью ADO, можно найти здесь.
Если вы хотите запустить формулу на листе с помощью функции, выполняющей инструкцию SQL, то используйте Add-in A-Tools
Пример, function BS_SQL("SELECT ...")
:
Иногда SUM_IF может выполнить задание. Предположим, что у вас есть листок информации о продукте, включая уникальный идентификатор продукта в столбце A и цена за единицу в столбце P. И лист записей заказа на поставку с идентификаторами продукта в столбце A, и вы хотите, чтобы столбец T вычислил цену единицы товара для этой записи.
Следующая формула выполнит трюк в ячейках "Записи! T2" и может быть скопирована в другие ячейки в том же столбце.
= SUMIF (Продукты! $A $2: $A $9999, Записи! $A2, Продукты! $P $2: $9999)
Тогда у вас может быть другой столбец с количеством элементов для каждой записи и умножьте его на цену единицы, чтобы получить общую стоимость для записи.
Один быстрый способ сделать это - создать столбец с формулой, которая оценивает значение true для строк, которые вам интересны, и затем фильтровать значение TRUE в этом столбце.