Arrays 使用公式将Excel子集列转换为数组
我需要将帐号放入一个数组中,该数组在select列上显示为1。预期结果为{FD_002_17,FD_004_17}。我计划在一个名称范围内使用它。 我试着用Arrays 使用公式将Excel子集列转换为数组,arrays,excel,indexing,match,Arrays,Excel,Indexing,Match,我需要将帐号放入一个数组中,该数组在select列上显示为1。预期结果为{FD_002_17,FD_004_17}。我计划在一个名称范围内使用它。 我试着用 =INDEX(B2:B6,MATCH(1,A2:A6),1) 但是这失败了,因为Match不返回数组。使用Hugs提到的问题中的post(),我根据您的需要提出了以下公式 这是一个数组公式,您可以在第一个单元格中输入,然后使用选定单元格角落中的小手柄向下填充 =IFERROR(索引($B$2:$B$6;小(如果($A$2:$A$6=1;
=INDEX(B2:B6,MATCH(1,A2:A6),1)
但是这失败了,因为Match
不返回数组。使用Hugs提到的问题中的post(),我根据您的需要提出了以下公式
这是一个数组公式,您可以在第一个单元格中输入,然后使用选定单元格角落中的小手柄向下填充
=IFERROR(索引($B$2:$B$6;小(如果($A$2:$A$6=1;行($B$2:$B$6))MIN(行($B$2:$B$6))+1;“”);行(A1));“”)
这是可能的。可以将命名范围指定给公式,例如:
=INDEX(Sheet1!$B:$B,N(IF({1},MODE.MULT)(IF(Sheet1!$A$2:$A$6=1,ROW(Sheet1!$A$2:$A$6)*{
然后您可以引用命名范围,如:=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
要使用公式和隐藏表,请使用这些技术填充一系列单元格,然后将该动态范围指定给数据验证 啊!!我认为这毕竟不是一个解决方案,因为它不会返回数组的答案。很抱歉我将把它放在这里,因为它可能会给某人带来灵感。谢谢你的回答。是的,它不返回数组。我想将其用作下拉列表的动态数组。如果你能帮我,我将不胜感激。干杯谢谢你的回复。问题仍然存在,因为这个公式只返回一个值,而不是像示例中那样返回两个值的数组。我保证这个公式确实返回一个数组。这就是它的作用。如果您如前所述使用命名范围,并调用命名范围上的索引,则可以获得任何条目。如果要在单元格中直接输入,则必须使用Ctrl-Shift-enter。我不知道你在做什么。如果你展示你在做什么,我们可以看到问题。嗨@MacroMarc是的,你是对的。我试图将MyNamedRange
用作下拉列表中的动态列表,但它不返回任何值。你能帮我吗?数据验证列表只能包含一系列单元格或逗号分隔的列表(在“数据验证”对话框中键入)。它们不能很好地处理由公式构造(如我的公式构造)产生的数组。您可以使用公式设置单元格范围,但在您的情况下,您尝试将范围过滤到数组中。这行不通。请参阅我编辑的AnswerThank@MacroMarc,这解释了为什么我尝试在exccel中为下拉列表分配数组的不同方法失败。