【发布时间】:2014-01-14 18:03:33
【问题描述】:
我的问题与此线程How to Consolidate Data from Multiple Excel Columns All into One Column 类似但更复杂。
这里是excel示例
Date Measure1 A B Date Measure2 A B C Date.....
11/11/11 1234 1 2 11/12/12 5678 1 3 3 12/12/12 ...
12/11/12 234 34 234 12/12/13 345 342 23 33 12/12/13 ...
........
Excel 中有数百列。一个日期列,后跟一个度量列,然后是其他一些列。 现在我只想要日期列、度量名称列和值列。 结果excel文件应该像
Date Measure Name Value
11/11/11 Measure1 1234
11/12/12 Measure2 5678
12/12/12 ....
....
12/11/12 Measure1 234
12/12/13 Measure2 123
我如何通过 VBA 实现它?由于我有数千个这样的文件,VBA 似乎是整合这些文件并加载到数据库中的最佳方式。
我总是得到
Run-time error '1004'
Application -defined or object -defined eror"
在
w.Sheets("DataSort").Range("A1").Resize(k, UBound(Arr2, 2)) = Arr2
这是我的代码
Sub convertExcel()
Dim Arr1, Arr2()
Dim Rnum As Integer, Cnum As Integer, Tnum As Integer
Dim i As Integer, j As Integer, k As Integer
'Rnum = row number; Cnum = column number; Tnum as total number
Application.ScreenUpdating = False
Set w = Workbooks.Open("FileNAME~~~~")
Rnum = w.Sheets("Data").Cells(Rows.Count, 1).End(xlUp).Row
Cnum=208
Tnum = Rnum * Cnum / 2
w.Sheets.Add.Name = "DataSort"
Arr1 = Range("A1:GZ" & Rnum)
ReDim Arr2(1 To Tnum, 1 To 3)
For j = 2 To Cnum
If w.Sheets("Data").Cells(1, j) = "Date" Then
For i = 2 To Rnum
If Arr1(i, j) <> "" Then
k = k + 1:
Arr2(k, 1) = Arr1(i, j)
Arr2(k, 2) = Arr1(1, j)
Arr2(k, 3) = Arr1(i, j + 1)
End If
Next
End If
Next
w.Sheets("DataSort").Range("A1").Resize(k, UBound(Arr2, 2)) = Arr2
w.Close True
Application.ScreenUpdating = True
End Sub
【问题讨论】:
-
你目前使用的代码是什么?这个网站不是一个代码编写服务,展示你迄今为止的努力对于获得更好和更有用的答案大有帮助。
-
@enderland 我的代码是手动读取列索引和测量名称的第一行。但是我的迭代目前不起作用。由于这些测量是保密的,所以我没有有价值的代码可以展示。
-
你将很难获得别人看不到的代码的帮助..
-
对于每个
Measurex,日期的计数是相同的还是从Measure到Measure不一样? -
在 BK201 所说的之上,日期和度量列之间的列间隔是常数吗?