繁体   English   中英

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

[英]How to use Excel's array-formulas for a UDF to read each cell correctly?

G'Day,

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

我做了一个简化的例子,向您展示我的意思。

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

在此处输入图片说明

不幸的是,我以为arrayformula可能会发现我有不同的单元格列出了这些动物,结果却像快照一样结束了。

在此处输入图片说明

所以我怎样才能让arrayformula识别出B列中有不同的细胞,因为我知道Quacks不能解决其他动物的问题。 :-)

这是另一个快照,显示了arrayformula旁边用于比较和代码的公式。

在此处输入图片说明

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

我愿意提出建议。

谢谢,彼得。

您需要使数组函数将数据读入数组,对其进行处理并创建输出数组。
然后,需要使用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

给定样本使用数组公式的目的对我来说确实很模糊,但是无论如何,如果您坚持要尝试-请尝试以下操作:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM