Pet*_*lor 7 excel vba excel-vba array-formulas
天儿真好,
我有一个问题,更多的是帮助自己了解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
Run Code Online (Sandbox Code Playgroud)
我愿意接受建议.
谢谢,彼得.
Cha*_*ams 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
Run Code Online (Sandbox Code Playgroud)