2017-03-17 50 views

回答

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

​​

+0

啊!我看到这毕竟不是解决方案,因为它不会以数组*的形式返回答案*。抱歉。我会放弃它,因为它可能为某人提供灵感。 – LudvigH

+0

感谢您的回答。是的,它不返回数组。我想用它作为下拉式的动态数组。感谢您能帮助我。干杯! – Shana

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:

将这个在相关工作表的工作表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 

要使用公式和隐藏工作表,使用技术填补单元格区域,然后分配一个动态范围的数据验证....

+0

感谢您的回复。 Stil问题仍然存在,因为此公式仅返回一个值,而不是具有两个值的数组,例如该示例。 – Shana

+0

我保证这个公式能返回一个数组。这就是它特有的功能。如果您如上所述使用命名范围,并在命名范围内调用Index,则可以获得任何条目。如果您试图直接在单元格中输入它,则必须使用Ctrl-Shift-Enter。我不确定你在做什么。如果你显示你在做什么,我们可以看到问题。 – MacroMarc

+0

嗨@MacroMarc是的,你是对的。我试图使用'MyNamedRange'作为动态列表到下拉列表中,但它不返回任何值。你能帮我解决吗?谢谢 – Shana

相关问题