Excel新的数据types

例如,我有两个值,每个值都表示为均值和标准差。 现在第一个在单元格A1和A2,第二个在单元格A4和A5,代表每个的平均值和stddev。 我将在B和C列每一个计算使用:

=NORM.INV(RAND();$A$1;$A$2) =NORM.INV(RAND();$A$4;$A$5) 

现在在DI列将做两个术语的一些操作,在E1中,我将得到D列中所有点的平均值,E2是D列中所有点的stddev。

我想封装一切使用VBA,但我宁愿有意思和STDDEV,这是两个双打在一个单元格。

如何创build支持两个数字的数据types – 理想情况下,我想读取它像(mean,stddev)。

示例单元格A1是(21.0,3.2),如何从具有A1作为input的函数获取每个值?

最简单的方法是使用拆分function

 Function ToArray(ByVal rng As Range, Optional ByVal sDelimit As String = ",") As Double() Dim sNumbers() As String Dim dNumbers() As Double, i As Integer sNumbers = Split(rng, sDelimit) ReDim Preserve dNumbers(UBound(sNumbers)) For i = LBound(sNumbers()) To UBound(sNumbers()) dNumbers(i) = CDbl(sNumbers(i)) Next ToArray = dNumbers End Function 

您可以在Excel工作表中使用它:

 =NORM.INV(RAND();ToArray($A$1)) 

你可以像这样创build一个类:

一个类就像一个模块一样创build。 默认情况下,它将创build一个名为“Class1”的模块。 第一份工作是去属性选项卡,并将其重命名为明智的。 “标准”命名约定是clsYourClassName,但是我个人使用c前缀而不是cls。 这个类模块是你的vba类的构造函数。

这个类有两个属性:

 Option Explicit Private dMean As Double Private dStddev As Double Public Property Get Mean() As Double Mean = dMean End Property Public Property Let Mean(p As Double) dMean = p End Property Public Property Get Stddev() As Double Stddev = dStddev End Property Public Property Let Stddev(p As Double) dStddev = p End Property Public Sub Assign(a As Double, b As Double) Mean = a Stddev = b End Sub 

然后你需要实例化你的类并赋值。

我假设Cells(1, 1).Value值是类似于(21.0,3.2)

 Option Explicit Sub test() Dim mc As cMyClass Set mc = New cMyClass() mc.Assign(Cells(1, 1).Value) ' do things Set mc = Nothing End Sub 

[编辑]

正如我写的,我假设Cells(1,1).Value的值是类似于(21.0,3.2)的值。 如果不是,只有一个string将被返回,我们需要parsing它,如:

 Public Sub Assign(str As String) Dim ar() As String = Split(str, ",") If UBound(ar) = 2 Then Mean = CDbl(ar(0)) Stddev = CDbl(ar(1)) End If End Sub