2013-08-01 28 views
2

我有145個類別的重複列表,每個類別有15列數據。 我通過將類別數量減少到24並添加相應數據來整合此列表。如何將選定範圍複製到給定數組中?

例如, 如果最初我有分類A B C D E F G和我合併,我會在A中添加所有的值,比如F,以獲得新的類別。

另一個問題是所有這145個類別在60個時間段內重複。所以我必須分別合併每個時間段的數據。我想要使​​用數組。我想要使用數組。

Sub CategoriesToSectors() 
Dim k As Integer 
Dim j As Integer 
Dim p As Integer 
Dim Destination As Range 
' p is just a filler/dummy variable until I later decide which categories go into which sector 


Dim CategoryData(144, 14) As Long 
Dim SectorData(23, 14) As Long 

k = 0 
' k should go Upto 60 
' I first copy the data from a range in the first worksheet into the array CategoryData 
' Then I move 145 rows down for the next time-period's data and repeat this whole process 
While k < 60 
Sheets("ReformattedData").Select 
Range("B1:P145").Select 
ActiveCell.CurrentRegion.Offset(k * 145, 0).Select 
CategoryData = Selection.Value 

For j = 0 To 14 
SectorData(0, j) = CategoryData(1, j) + CategoryData(6, j) + CategoryData(8, j) +   CategoryData(13, j) 
For p = 1 To 23 
SectorData(p, j) = CategoryData(15, j) + CategoryData(19, j) + CategoryData(31, j) + CategoryData(44, j) 
Next p 
Next j 
' paste consolidated sectordata array one below another in SectorData worksheet 
Sheets("SectorData").Select 
Range("B2").Select 
Set Destination = ActiveCell.Offset(k * 25, 0) 
Destination.Resize(UBound(SectorData, 1), UBound(SectorData, 2)).Value = SectorData 


Wend 


End Sub 

正如你所看到的,我正在做的是首先嚐試將第一個範圍塊複製到CategoryData數組中。然後,我將數據組合到扇區數組中 - 我剛剛使用重複的值來測試它 - 帶p的for循環不應該存在。我最終將使用24個不同的語句來創建SectorData數組。

然後我將Consolidated數據粘貼到另一張紙上。我回到第一個工作表並將我的選擇向下移動到下一個範圍塊(第一個單元下面的145個單元格),然後選擇這些數據並重復。

這似乎並不奏效 - 輸入數據到第一個數組的錯誤 - CategoryData。

幫助將不勝感激。

謝謝

+1

在什麼行不錯誤發生,是什麼錯誤消息? –

+0

錯誤發生在這裏:CategoryData = Selection.Value 沿線的東西不能分配數組。 – user2643068

回答

5

爲了一個範圍複製到一個數組VBA,你必須使用一個Variant:

Dim CategoryData() As Variant 
'or just CategoryData As Variant (no brackets) 
'then the following will work 
CategoryData = Selection.Value 

一旦你轉,你可以檢查UBound爲CategoryData數據。

這裏有一個有用的討論at cpearson

只要尺寸相同,您可以將Range設置爲數組(在您的示例中爲SectorData),而不將它作爲Variant。

+0

兩件事:首先,我嘗試使用變體,我仍然得到相同的錯誤。其次,我的數組大小與數據集完全一致。雖然我可以使用for循環爲數組賦值,但這需要太長的時間,並且將整個範圍複製到數組中會更容易。 – user2643068

+0

創建一個小的獨立程序來測試。嘗試瀏覽你的代碼。按F9設置斷點。這很可能是因爲這個賦值只能執行一次,並且你有循環。國際海事組織必須將其分爲兩個程序,第二個程序可以每次重新定義(重新聲明)CategoryData。 –

0

試試這個:

Sub RangeToArray() 
    Dim NewArray As Variant 
    Dim SourceRange As Range 
    Set SourceRange = Selection.CurrentRegion 
    NewArray = SourceRange.Value 
    Stop 'to check the result in Immediate Window 
End Sub 
相關問題