我有一个表(表1),包含一大堆井数据(版本,MD,HD等),我想创建另一个表(表2),它只显示井的数据感兴趣的。
我已经设置了使用下拉列表选择井的位置。然后,我希望表2中填入表1中显示的每个迭代的四个值....
我尝试使用vlookup但是当一个井有多个版本时遇到了问题。我也尝试使用高级过滤器。
答案 0 :(得分:0)
让我们使用辅助列来解决这个问题。首先,假设列A将用于表的左侧,以显示找到每个列的行号。
A5将具有以下公式:
=MATCH($C$1,K:K,0)
这显示了Well1首次匹配的行号。然后A6和复制下来将具有公式:
=A5+MATCH(B6,OFFSET(K1,A5,0,COUNT(M:M),1),0)
这使用OFFSET创建一个新范围,从紧接上一个Well1匹配的单元格开始,然后使用MATCH查找出现的行。
现在,A列将始终显示从中提取数据的行号。其余的只是使用INDEX函数从您想要的列中提取。例如,列C中的数据从列L中拉出迭代,并且可以通过公式拉出,在单元格C5中并复制到右侧/下方:
=INDEX(L:L,$A5)
答案 1 :(得分:0)
如果您的数据已正确规范化,那么使用数据透视表可能会更好。这将为您提供按Well ID过滤的选项。
答案 2 :(得分:0)
要使用高级过滤器,您需要创建工作表事件。将其放在您想要数据的工作表的代码中。
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A2")) Is Nothing Then
Dim dataRng As Range
Dim critRng As Range
Dim CpyToRng As Range
Dim cpytoarr() As Variant
With Worksheets("Sheet1")
Set dataRng = .Range(.Cells(1, 1), .Cells(1, 1).End(xlDown).End(xlToRight))
End With
With Me
.Range("CC1") = .Cells(1, 1).Value
.Range("CC2") = "'=" & .Cells(2, 1).Value
Set critRng = .Range("CC1:CC2")
Set CpyToRng = .Range(.Cells(6, 1), .Cells(6, 1).End(xlToRight))
End With
Debug.Print dataRng.Address
Debug.Print critRng.Address
Debug.Print CpyToRng.Address
dataRng.AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=critRng, CopyToRange:=CpyToRng, _
Unique:=False
critRng.ClearContents
End If
End Sub
这是如何运作的。这假设数据在Sheet1上并以“A1”开始,A列或最后一行没有空格:
在Sheet2上设置如下:
重要的是,sheet2上的标题行名称与sheet1上的标题相同。
现在,每当表2中A2的值发生变化时,您的下拉列表中的必要数据将显示在第6行下方。