我需要将帐号编入一个数组,在列选择中显示为1。预期结果为 - {FD_002_17,FD_004_17}。我打算在名称范围中使用它。 Table of interest to subset
我尝试使用
=INDEX(B2:B6,MATCH(1,A2:A6),1)
但由于Match
未返回数组,因此失败。
答案 0 :(得分:1)
在Hugs提到的SO问题中使用帖子(https://stackoverflow.com/a/6755513/4050510)我想出了以下公式。
它是一个数组公式,您输入第一个单元格,然后使用所选单元格角落中的小手柄向下填充。
=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)));"")
答案 1 :(得分:0)
可以这样做。您可以将命名范围分配给公式,例如:
=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
要使用公式和隐藏工作表,请使用这些技术填充一系列单元格,然后将该动态范围分配给数据验证....