我想将范围的值分配给用户定义的数据类型。
我有一个在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条记录。
答案 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磁带我想卖给你......)