Excel子集列使用公式到数组

时间:2017-03-17 18:15:34

标签: arrays excel indexing match

我需要将帐号编入一个数组,在列选择中显示为1。预期结果为 - {FD_002_17,FD_004_17}。我打算在名称范围中使用它。 Table of interest to subset

我尝试使用

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

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

2 个答案:

答案 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)));"")

enter image description here

答案 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  

要使用公式和隐藏工作表,请使用这些技术填充一系列单元格,然后将该动态范围分配给数据验证....