Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 使用公式将Excel子集列转换为数组_Arrays_Excel_Indexing_Match - Fatal编程技术网

Arrays 使用公式将Excel子集列转换为数组

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;

我需要将帐号放入一个数组中,该数组在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;行($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中为下拉列表分配数组的不同方法失败。