Excel中的SQL-WHERE TYPE公式

时间:2008-12-01 17:14:05

标签: excel excel-vba vba

假设我有一个包含Customer和CreatedDate列的工作表,其中包含许多带数据的行。任何知道如何设置(通过VBA或公式)第二张表格的人,根据某些where语句显示第一张表格中的行,即客户“本月创建”的所有行。 (类似于select ...其中查询SQL数据库)。

谢谢! /尼尔斯

4 个答案:

答案 0 :(得分:3)

您可以创建主数据表的副本(通过复制工作表,或使用横向和向下填充的=Sheet1!A1类型公式),然后使用自动过滤器将其缩小到您需要的行

答案 1 :(得分:3)

以下是使用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

答案 2 :(得分:2)

您可以从数据中创建数据透视表,然后以很多方式切片。

答案 3 :(得分:0)

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