如何使用Excel的UDF数组公式正确读取每个单元格?

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)