我有一些我正在修改的现有代码。此代码从预先存在的工作表中创建行的集合。它创建了一个大型的二维集合,每个列中都有不同的信息.有一个单独的类模块声明每个列的数据类型。
代码将二维集合依次循环遍历到新的工作表中。我以前从未使用过集合,并且希望将集合一次写到工作表上。当表有很多记录时,当前的代码需要相当长的时间。
有没有办法把整个集合转换成二维数组,或者这样我就可以一次写二维数组了?或者是否有一种方法可以将整个集合写入工作表,就像使用二维数组一样?我一直试图寻找这一点,但至今没有成功。任何一般性意见都将不胜感激!
下面是一些示例代码,并以粗体表示注释,以说明如何使用集合。
定义了类模块,命名为TableEntry
Public Item1 As String
Public Item2 As String
Public Item3 As String
Public Item4 As Integer
Public Item5 As Integer主例程-创建集合,填充集合,将集合写入工作表
Sub MainRoutine()
Dim table As Collection
Set table = New Collection
Call FillCollection(File As String, ByRef table As Collection)
Call WriteCollectionToSheet(ByRef table As Collection)子例程1-填充集合
Dim wb As Workbook
Set wb = Workbooks.Open(File)
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
Dim R As Range
Set R = ws.Range("A2")
Dim e As TableEntry
For i = 1 To 20
Set e = New TableEntry
e.Item1 = R.Offset(i + 1, 0).Offset(0, 0)
e.Item2 = R.Offset(i + 1, 0).Offset(0, 1)
e.Item3 = R.Offset(i + 1, 0).Offset(0, 2)
e.Item4 = R.Offset(i + 1, 0).Offset(0, 3)
e.Item5 = R.Offset(i + 1, 0).Offset(0, 4)
table.Add e
Next i
Next ws子例程2-将集合写到工作表
发布于 2013-08-14 11:04:40
我认为将字典打印到Excel电子表格中最简单的方法是使用WorksheetFunction.Transpose(Variant类型的Array)
以下代码
WorksheetFunction.Transpose(VariantArray)一次打印数组
Option Explicit“添加对的引用”>> Tools >> Reference >> Microsoft脚本运行时
Sub CollectionToArrayToSpreadSheet()
Cells.ClearContents
' think of this collection as
' key = cell.row
' item = cell.value
Dim dict As New Dictionary
dict.Add Key:=1, Item:="value1"
dict.Add Key:=2, Item:="value2"
dict.Add Key:=3, Item:="value3"
' THIS WAY
'Range("A1:A" & UBound(dict.Keys) + 1) = WorksheetFunction.Transpose(dict.Keys)
'Range("B1:B" & UBound(dict.Items) + 1) = WorksheetFunction.Transpose(dict.Items)
' OR
Range("A1").Resize(UBound(dict.Keys) + 1, 1) = WorksheetFunction.Transpose(dict.Keys)
Range("B1").Resize(UBound(dict.Items) + 1, 1) = WorksheetFunction.Transpose(dict.Items)
End Sub
更新:
在你的案子里.
如果这是您要做的(注意,table是一个集合)
Range("A1:A" & table.Count) = WorksheetFunction.Transpose(table)不幸的是,答案是否定的。
如果不对集合进行迭代,就不能将集合转到电子表格。
要加快这一进程,你可以做的是:
Application.ScreenUpdatingWorksheetFunction.Transpose()一次性将所有内容打印到工作表(使用答案的第一部分中的逻辑)后续行动:
在您的例子中,您可以这样重写Sub WriteCollectionToSheet(ByRef table As Collection) (代码看起来有点难看,但效率应该可以)
Sub WriteCollectionToSheet(ByRef table As Collection)
Dim dict1 As New Dictionary
Dim dict2 As New Dictionary
Dim dict3 As New Dictionary
Dim dict4 As New Dictionary
Dim dict5 As New Dictionary
Dim i As Long
For i = 1 To table.Count
dict1.Add i, table.Item(i).Item1
dict2.Add i, table.Item(i).Item2
dict3.Add i, table.Item(i).Item3
dict4.Add i, table.Item(i).Item4
dict5.Add i, table.Item(i).Item5
Next i
Range("A1:A" & UBound(dict1.Items) + 1) = WorksheetFunction.Transpose(dict1.Items)
Range("B1:B" & UBound(dict2.Items) + 1) = WorksheetFunction.Transpose(dict2.Items)
Range("C1:C" & UBound(dict3.Items) + 1) = WorksheetFunction.Transpose(dict3.Items)
Range("D1:D" & UBound(dict4.Items) + 1) = WorksheetFunction.Transpose(dict4.Items)
Range("E1:E" & UBound(dict5.Items) + 1) = WorksheetFunction.Transpose(dict5.Items)
End Sub有关VBA集合、迭代和打印到Sheet @ vba4all.com的更多详细信息
https://stackoverflow.com/questions/18227942
复制相似问题