8

节日,

我有一个更多的问题要帮助自己理解 Excel 的数组公式(Control+Shift+Enter)如何将每个单元格动态地读入公式中。

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

我创建了一个虚构的小型农场,里面有一些动物,按名称列出,并提供动物发出的声音。在下一列中,我创建了一个名为 MakesSound 的用户定义函数,该函数接受它是什么动物的输入并响应它发出的动物的声音。如下图所示。

在此处输入图像描述

不幸的是,我认为一个数组公式可以发现我有不同的单元格列出了动物,并且它以这个快照结束。

在此处输入图像描述

那么我如何让数组公式识别我在 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

我愿意接受建议。

谢谢,彼得。

4

2 回答 2

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
于 2013-02-03T14:39:12.933 回答
3

对给定示例使用数组公式的目的对我来说真的很模糊,但无论如何,如果你坚持 - 请尝试以下操作:

  1. 选择区域C3:C7(如在最上面的屏幕上)。
  2. 按下F2可现场编辑并键入以下公式:=MakesSound(B2:B7)
  3. CTRL+ SHIFT+ENTER而不是通常的ENTER- 这将定义一个 ARRAY 公式并在{}其周围产生括号(但不要手动输入它们!)。

我不确定您的 UDF 是否可以正确处理数组表示法,但对于通常的 Excel 公式,这可以按预期工作,例如尝试=LEFT(B2:B7,2)作为第 2 步的数组之一 - 这将返回每个动物名称的 2 个起始字母。

希望这对您有所帮助。祝你好运!

于 2013-02-02T11:41:15.510 回答