将值分配给用户定义的数据类型

时间:2011-02-09 16:42:49

标签: vba excel-vba user-defined-types excel

我想将范围的值分配给用户定义的数据类型。

我有一个在excel表中存储的一周内多次测量的数据集。我已经为数据集的范围创建了一个变量。然后我创建了一个带有日期和单一类型的用户定义数据类型。现在我想将范围的值分配给用户定义的数据类型。

数据集:

02/11/2011  3.8

02/11/2011  2.4

02/11/2011  8.9

02/12/2011  5.7

02/12/2011  4.6

02/12/2011  2.6

我已经让用户定义了数据类型:

Type phData
    Dy As Date
    ph As Single
End Type

并创建了一个phData类型的变量,并将大小与范围匹配:

Dim dailyData() As tradeData
Dim nrec as Integer
nrec = dataRng.Rows.Count
ReDim dailyData(nrec)

并定义了Excel电子表格中数据集的范围:

Dim dataRng As Range
Set dataRng = Range("A2", Range("A2").End(xlDown).End(xlToRight))

现在我想将范围内的值分配给phData类型。我可以使用以下方式一次分配一个值:

 dailyData(1).Dy= dataRng(1).Value

但我需要更高效的东西,因为我有大约4,000条记录。

2 个答案:

答案 0 :(得分:1)

我不知道有什么方法可以做到这一点,不涉及循环。

但是,如果首先将范围数据读入数组,它会更快:

Dim theData
theData = dataRng.Value

现在,您可以遍历2-D数组“theData”并从中填充UDT数组。

答案 1 :(得分:1)

试试这个:

Dim rngData As Range
Dim varDummy As Variant
Dim DailyData() As phData
Dim iDailyData As Long

Set rngData = Range("A2", Range("A2").End(xlDown).End(xlToRight)) ' or whatever

varDummy = rngData ' Reads in whole range at once into array. (Must be Variant.)
                   ' Much quicker than reading one cell at a time.

ReDim DailyData(1 To UBound(varDummy, 1))

' Parse data into your user-defined type array.
For iDailyData = LBound(DailyData) To UBound(DailyData)
    With dailyData(iDailyData)
        .Dy = CDate(varDummy(iDailyData, 1))
        .ph = CSng(varDummy(iDailyData, 2))
    End With
Next iDailyData

在发布之前没有测试代码......

查看这篇旧的但仍然非常有用的文章:http://www.avdf.com/apr98/art_ot003.html - 请记住,您不再受Excel 5& 7限制(除非您使用Excel 5或7,在这种情况下我有一些很酷的MC Hammer磁带我想卖给你......)