[英]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
给定样本使用数组公式的目的对我来说确实很模糊,但是无论如何,如果您坚持要尝试-请尝试以下操作:
C3:C7
(在最上面的屏幕上)。 =MakesSound(B2:B7)
{}
括号(但不要手动输入!)。 我不确定您的UDF是否可以正确处理数组表示法,但是对于通常的Excel公式,它可以按预期工作,例如,将=LEFT(B2:B7,2)
用作步骤2的数组-它将返回2个起始字母从每个动物的名字。
希望对您有所帮助。 祝好运!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.