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

天儿真好,

我有一个更多的问题来帮助自己了解Excel的数组公式(Control + Shift + Enter)如何将每个单元格dynamic读入公式。

我做了一个简单的例子来向你展示我的意思。

我创造了一个小型的农场,里面有一些动物,按名字排列,并提供动物的声音。 在下一个专栏中,我创build了一个名为MakesSound的用户定义函数,该函数接受什么动物的input,并响应它所生成的动物的声音。 如下图所示。

在这里输入图像描述

不幸的是,我认为一个arrayformula可以拿起我有不同的单元格列出的动物,它结束像这个快照。

在这里输入图像描述

所以我怎么能问arrays式识别我在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 

我接受build议。

谢谢,彼得。

你需要让你的数组函数把数据读入一个数组,处理它并创build一个输出数组。
然后使用ctrl-shift-enter将数组函数input到多单元格数组公式(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 

对于给定的示例使用Array公式的目的对我来说确实是模糊的,但无论如何,如果你坚持 – 试试以下内容:

  1. select区域C3:C7 (如在最上面的屏幕上)。
  2. F2进行现场编辑并键入以下公式: =MakesSound(B2:B7)
  3. CTRL + SHIFT + ENTER而不是通常的ENTER – 这将定义一个ARRAY公式,并将导致{}括号内(但不要手动input)。

我不确定你的UDF是否可以正确地处理数组符号,但是对于通常的Excel公式来说,这可以按照预期的方式工作,例如try =LEFT(B2:B7,2)作为第二步的数组 – 这将返回2个开始字母来自每个动物的名字。

希望这有些帮助。 祝你好运!