如何为自定义项使用Excel的数组公式来正确读取每个单元格?

如何为自定义项使用Excel的数组公式来正确读取每个单元格?,excel,array-formulas,vba,Excel,Array Formulas,Vba,G'Day 我还有一个问题想帮助自己理解Excel的数组公式Control+Shift+Enter如何将每个单元格动态读取到公式中 我做了一个简单的例子来告诉你我的意思 我创建了一个虚构的小农场,里面有一些动物,按名称列出,并提供动物发出的声音。在下一篇专栏文章中,我创建了一个名为MakesSound的用户定义函数,它接收动物的输入,并响应动物发出的声音。如下面的快照图片所示 不幸的是,我以为一个数组公式可以发现我有不同的细胞列出了动物,结果却像这个快照一样 那么,我怎样才能让数组公式识别出我在

G'Day

我还有一个问题想帮助自己理解Excel的数组公式Control+Shift+Enter如何将每个单元格动态读取到公式中

我做了一个简单的例子来告诉你我的意思

我创建了一个虚构的小农场,里面有一些动物,按名称列出,并提供动物发出的声音。在下一篇专栏文章中,我创建了一个名为MakesSound的用户定义函数,它接收动物的输入,并响应动物发出的声音。如下面的快照图片所示

不幸的是,我以为一个数组公式可以发现我有不同的细胞列出了动物,结果却像这个快照一样

那么,我怎样才能让数组公式识别出我在B列中有不同的细胞,因为我知道江湖郎中并不是其他动物的答案-

这里是另一个快照,显示了用于比较的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
我愿意接受建议

谢谢,
Peter。

对给定样本使用数组公式的目的对我来说真的很模糊,但无论如何,如果你坚持,请尝试以下方法:

在最上面的屏幕上选择区域C3:C7。 按F2键进行现场编辑并键入以下公式:=MakeSoundB2:B7 按CTRL+SHIFT+ENTER而不是通常的ENTER键-这将定义一个数组公式,并将在其周围产生{}个括号,但不要手动键入它们!。 我不确定您的UDF是否可以正确处理数组表示法,但对于通常的Excel公式,这与预期一样有效,例如try=LEFTB2:B7,2作为步骤2的数组-这将从每个动物名称返回2个起始字母


希望这能有所帮助。祝你好运

您需要让数组函数将数据读入数组,处理它并创建输出数组。然后,需要使用ctrl-shift-enter键在多单元格数组公式D3:D7中输入数组函数NNE

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

为什么不直接使用索引/匹配,甚至VLOOKUP呢?我现在正在探索数组公式,看看会产生什么影响。谢谢你的建议,brettdj。你说得对,Peter L,它处理得不对。它提出了价值观!。我希望它能处理这种数组处理。@user1924393如果答案有帮助的话,不要犹豫,你有足够的代表来支持它privilege@user1924393我也祝你知识进步好运,回到更激动人心的问题上来……简单地说,我从中得到的教训是将范围中的输入转换为任意大小或类型的2D数组,函数或用户定义函数UDF可以根据用户的意愿处理数组,完成后,as变量输出将相应地从数组转换回范围。我只是喜欢学习Excel!!:-