如何在Excel中从哪里选择?从数据库返回行

时间:2019-07-11 12:49:22

标签: excel select excel-formula row where-clause

我想在Excel中从满足某些条件的表中返回行。

ProdGroup   Width (mm)  Diameter (mm)   Date
Prod1           1120            1000   2016-01-11
Prod2           600             1000   2017-10-18
Prod1           930             800    2015-04-11
Prod3           1250            1200   2016-04-18
Prod2           840             1000   2019-06-27
Prod2           840              900   2018-03-21

我想等同于:“ SELECT * FROM Table WHERE ProdGroup =” Prod2“ AND Diameter = 1000” 在Excel中。我的想法是,将值输入两个单元格,并根据在两个单元格中的写入内容返回行。

我尝试使用= INDEX()函数,但仅设法搜索仅匹配1个条件的行。而且,我只成功返回了一行。

=INDEX(B2:D6,MATCH(A10,A2:A6,0),1)

这只给我一个IN参数。使用Prod2,这将仅返回一行。

使用输入“ Prod2”和1000:

ProdGroup         Diameter
Prod2             1000

我想要这样的结果:

Prod2           600             1000            2017-12-18
Prod2           840             1000            2019-06-27

我不知道该怎么做。有人可以帮忙吗?

亲切的问候 pbdude

3 个答案:

答案 0 :(得分:1)

这是一个选择:

enter image description here

I2中的公式:

=IFERROR(INDEX(A$1:A$7,SMALL(IF((($A$2:$A$7=$F$2)*($C$2:$C$7=$G$2))>0,ROW($A$2:$A$7),""),ROW(1:1))),"")

通过 Ctrl Shift Enter

确认

向右拖动...

答案 1 :(得分:0)

答案 2 :(得分:0)

如果要查找自动化示例,则可以使用宏。这样可以避免您将公式拖到下面并增加数据的完整性,因为这样可以减少出现错误的可能性,并消除公式不包含整个数据单元格范围或键入错误的可能性。

如果您不熟悉VBA ...

  • 将工作簿另存为.xlsm文件(启用宏的工作簿)
  • 按alt + F11打开VBE窗口
  • 在屏幕左侧的项目浏览器中右键单击您的文件名
  • 选择“插入”>“模块”
  • 在新创建的模块中,将此代码粘贴到下面。
  • 您可以通过转到“开发人员”>“宏”来运行宏,或者从中选择“选项”并分配您选择的键盘快捷键。

要针对您的特定数据对此进行自定义,只需在“设置变量”部分中用特定的表名和命名范围替换引号内的文本即可。

在下面的示例中,我为将用作过滤器参数的单元格使用了命名范围。我还将要过滤的数据格式化为表格。表名称是t_ProductSizes。

此片段显示过滤的结果和活动单元格的命名范围。

enter image description here

Sub FilterTable_ByCellReference()

'~~> Declare the variables
Dim t As ListObject
Dim p As String
Dim w As String
Dim dm As String
Dim dt As String

'~~> Set the variables
'~~> Replace the text inside the quotation marks with your table names and named ranges.

Set t = ActiveSheet.ListObjects("t_ProductSizes")
p = Range("filter_product") 'named range
w = Range("filter_width") 'named range
dm = Range("filter_diameter") 'named range
dt = Range("filter_date") 'named range

'~~> Check your variables if you like (view the immediate window)
Debug.Print "t = " & t.Name
Debug.Print "p = " & p
Debug.Print "w = " & w
Debug.Print "dm = " & dm
Debug.Print "dt = " & dt

'~~> Remove existing filters.
    t.Range.AutoFilter Field:=1

'~~> Filter the table based on the values specified in the filter cells.
'~~> Only filter the corresponding column if the cell is not blank.

    With t.Range

        If p <> "" Then

            .AutoFilter Field:=1, _
                Criteria1:=p

        End If

        If w <> "" Then

            .AutoFilter Field:=2, _
                Criteria1:=w

        End If

        If dm <> "" Then

            .AutoFilter Field:=3, _
                Criteria1:=dm

        End If

        If dt <> "" Then

            .AutoFilter Field:=4, _
                Criteria1:=DateValue(dt)

        End If

    End With


'~~> Clear the variables from memory.
Set t = Nothing
p = vbNullString
w = vbNullString
dm = vbNullString
dt = vbNullString

End Sub