我需要将帐号获取到列选择中指示为1的数组中。预期的结果是 - {FD_002_17,FD_004_17}。我打算在名称范围内使用它。 Table of interest to subset使用公式将Excel子集列添加到数组中
我尝试使用
=INDEX(B2:B6,MATCH(1,A2:A6),1)
但这未能按Match
不返回数组。
我需要将帐号获取到列选择中指示为1的数组中。预期的结果是 - {FD_002_17,FD_004_17}。我打算在名称范围内使用它。 Table of interest to subset使用公式将Excel子集列添加到数组中
我尝试使用
=INDEX(B2:B6,MATCH(1,A2:A6),1)
但这未能按Match
不返回数组。
在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)));"")
这是可能做到这一点。
=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:
将这个在相关工作表的工作表codemodule:
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
要使用公式和隐藏工作表,使用技术填补单元格区域,然后分配一个动态范围的数据验证....
啊!我看到这毕竟不是解决方案,因为它不会以数组*的形式返回答案*。抱歉。我会放弃它,因为它可能为某人提供灵感。 – LudvigH
感谢您的回答。是的,它不返回数组。我想用它作为下拉式的动态数组。感谢您能帮助我。干杯! – Shana