天儿真好,
我还有一个问题,就是帮助自己了解Excel的数组公式(Control + Shift + Enter)如何将每个单元格动态地读入公式。
我做了一个简化的例子来向你展示我的意思。
我创建了一个小型的虚构农场,里面有一些动物,按名字列出并会提供动物的声音。在下一篇专栏文章中,我创建了一个名为MakesSound的用户定义函数,它接受动物的输入并响应动物的声音。如下面的快照图所示。
不幸的是,我认为arrayformula可以拿起我有不同的单元格列出动物,它的结尾就像这个快照。
所以我怎么能要求arrayformula识别我在B列中有不同的细胞,因为我知道Quacks不是其他动物的答案。 : - )
这是另一个快照,显示了arrayformulas旁边的公式,用于比较和我使用的代码。
Public Function MakesSound(AnimalName As String) As Variant
Select Case AnimalName
Case Is = "Duck"
MakesSound = "Quack!"
Case Is = "Cow"
MakesSound = "Moo!"
Case Is = "Bird"
MakesSound = "Tweet!"
Case Is = "Sheep"
MakesSound = "Ba-Ba-Ba!"
Case Is = "Dog"
MakesSound = "Woof!"
Case Else
MakesSound = "Eh?"
End Select
End Function
我愿意接受建议。
谢谢, 彼得。
答案 0 :(得分:11)
你需要让你的数组函数将数据读入一个数组,处理它并创建一个输出数组。
然后使用ctrl-shift-enter将数组函数输入到多单元数组公式(D3:D7)中。
Public Function MakesSound(AnimalName As Range) As Variant
Dim Ansa() As Variant
Dim vData As Variant
Dim j As Long
vData = AnimalName.Value2
ReDim Ansa(1 To UBound(vData), 1 To 1)
For j = 1 To UBound(vData)
Select Case vData(j, 1)
Case Is = "Duck"
Ansa(j, 1) = "Quack!"
Case Is = "Cow"
Ansa(j, 1) = "Moo!"
Case Is = "Bird"
Ansa(j, 1) = "Tweet!"
Case Is = "Sheep"
Ansa(j, 1) = "Ba-Ba-Ba!"
Case Is = "Dog"
Ansa(j, 1) = "Woof!"
Case Else
Ansa(j, 1) = "Eh?"
End Select
Next j
MakesSound = Ansa
End Function
答案 1 :(得分:3)
对于给定的样本使用数组公式的目的对我来说真的很模糊,但无论如何,如果你坚持 - 尝试以下方法:
C3:C7
(与最上面的屏幕一样)。=MakesSound(B2:B7)
{}
括号(但不要手动输入!)。我不确定您的UDF是否可以正确处理数组表示法,但对于通常的Excel公式,这可以按预期工作,例如尝试=LEFT(B2:B7,2)
作为第2步的数组 - 这将从每个动物名称返回2个起始字母。
希望这在某种程度上有所帮助。祝你好运!