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