我想在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
答案 0 :(得分:1)
这是一个选择:
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)
本文介绍了您需要的内容,您需要根据需要进行操作https://www.get-digital-help.com/2009/09/28/extract-all-rows-from-a-range-that-meet-criteria-in-one-column-in-excel/
答案 2 :(得分:0)
如果要查找自动化示例,则可以使用宏。这样可以避免您将公式拖到下面并增加数据的完整性,因为这样可以减少出现错误的可能性,并消除公式不包含整个数据单元格范围或键入错误的可能性。
如果您不熟悉VBA ...
要针对您的特定数据对此进行自定义,只需在“设置变量”部分中用特定的表名和命名范围替换引号内的文本即可。
在下面的示例中,我为将用作过滤器参数的单元格使用了命名范围。我还将要过滤的数据格式化为表格。表名称是t_ProductSizes。
此片段显示过滤的结果和活动单元格的命名范围。
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