Excel子集列使用公式的数组

我需要将帐号存入一个数组中,这个数组在列select上显示为1。 预期的结果是 – {FD_002_17,FD_004_17}。 我打算在名称范围内使用它。 子集的兴趣表

我试过使用

=INDEX(B2:B6,MATCH(1,A2:A6),1) 

但由于Match不返回数组,因此失败。

在Hugs提到的SO问题中使用post( https://stackoverflow.com/a/6755513/4050510 ),我提出了以下公式来满足您的需求。

它是一个数组公式,您可以在第一个单元格中input数组,然后使用所选单元格拐angular处的小手柄向下填充它。

=IFERROR(INDEX($B$2:$B$6;SMALL(IF($A$2:$A$6=1;ROW($B$2:$B$6)-MIN(ROW($B$2:$B$6))+1;"");ROW(A1)));"")

在这里输入图像描述

这是可能的。 您可以将命名的范围分配给一个公式,例如:

=INDEX(Sheet1!$B:$B, N(IF({1}, MODE.MULT(IF(Sheet1!$A$2:$A$6=1, ROW(Sheet1!$A$2:$A$6)*{1,1})))))

然后你可以引用你的命名范围,如: =INDEX(MyNamedRange, 2)

编辑:

您可以设置一个隐藏工作表,以在单元格范围内有一个过滤的值列表,否则使用VBA:

VBA:

把它放在相关工作表的工作表代码模块中:

 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Me.Range("A:A")) Is Nothing Then Exit Sub Dim ARange As Range, BRange As Range Dim i As Long, lastRow As Long, strCount As Long lastRow = Me.Range("A" & Me.Rows.Count).End(xlUp).Row Set ARange = Me.Range("A1:A" & lastRow) Set BRange = Me.Range("B1:B" & lastRow) Dim stringArr() As String For i = 1 To lastRow If ARange.Cells(i, 1).Value = 1 Then ReDim Preserve stringArr(0 To strCount) stringArr(strCount) = BRange.Cells(i, 1).Value strCount = strCount + 1 End If Next i Dim str As String str = Join(stringArr, ",") Dim dv As Validation Set dv = Me.Range("DVCell").Validation If Not dv Is Nothing Then dv.Modify _ Type:=xlValidateList, _ AlertStyle:=xlValidAlertStop, _ Operator:=xlBetween, _ Formula1:=str Else dv.Add _ Type:=xlValidateList, _ AlertStyle:=xlValidAlertStop, _ Operator:=xlBetween, _ Formula1:=str End If End Sub 

要使用公式和隐藏工作表,请使用这些技术来填充一定范围的单元格,然后将该dynamic范围分配给数据validation….