SQL-WHERE ТИП Формулы в Excel - PullRequest
       16

SQL-WHERE ТИП Формулы в Excel

1 голос
/ 01 декабря 2008

Допустим, у меня есть лист со столбцами Customer и CreatedDate с большим количеством строк с данными. Любой, кто знает, как настроить (с помощью VBA или формулы) второй лист, который отображает строки из первого листа на основе определенных операторов where, то есть все строки с клиентами, «созданные в этом месяце». (аналогично запросу select ... where на базу данных SQL).

Спасибо! / Niels

Ответы [ 4 ]

3 голосов
/ 01 декабря 2008

Вот пример использования ADO.

Dim cn As Object
Dim rs As Object

strFile = Workbooks(1).FullName
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile _
    & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

cn.Open strCon

strSQL = "SELECT * FROM [Sheet1$] WHERE CourseKey=484"

rs.Open strSQL, cn

Worksheets(2).Cells(2, 1).CopyFromRecordset rs

Дополнительная информация: http://support.microsoft.com/kb/246335

3 голосов
/ 01 декабря 2008

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

2 голосов
/ 01 декабря 2008

Вы можете создать сводную таблицу из ваших данных, а затем нарезать ее множеством способов.

0 голосов
/ 01 декабря 2008

В Excel нет точного эквивалента функциональности SQL select ... where, но взгляните на функцию VLOOKUP. Это может быть то, что вы ищете. Если этого недостаточно, вам, вероятно, придется использовать VBA:


Dim DataRange as Range
Dim RowNum as Integer
Dim NewRow as Integer
Dim TestMonth as Integer
Dim ThisMonth as Integer

Set DataRange = Range(Sheet1.Cells(1,1), Sheet1.Cells(100,2))

ThisMonth = Application.WorksheetFunction.Month(Application.WorksheetFunction.Today())

NewRow = 1
For RowNum from 1 to DataRange.Rows.Count
    TestMonth = Application.WorksheetFunction.Month(DataRange.Cells(RowNum, 1).Value)
    if TestMonth = ThisMonth Then
        Sheet2.Cells(NewRow, 1).Value = DataRange.Cells(RowNum, 2).Value
        NewRow = NewRow + 1
    End If
Next RowNum
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...