我需要將帳號獲取到列選擇中指示爲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