基本上有2個問題:傳遞數組和範圍Excel的的.sort算法
爲Excel的的.sort功能:當我不知道一個給定的表多少個鍵(頭)是如何添加鍵將會有?我想要傳遞一些預定義的數組,包含如何對給定的選擇進行排序的信息,以excel的.sort算法...我如何正確地做到這一點?
問題描述:
我有,該目錄的第一行中報頭的片材。標題是不同的名稱,第一行中可能存在可變數量的標題。標題描述了表格中下面幾行中列出的度量標準的不同詳細信息(一個度量標準/行)。
我需要編寫一個代碼,以便我可以排序某些綁定在一起的行,而不是整個工作表。例如,我可能需要對第28-35行進行排序。這將通過變量inRange傳遞給此程序。不過,我也希望能夠配置排序優先級,以及每次運行宏時如何對每列進行排序。(請注意,一個行只能改變作爲整體的位置,行內的各個細胞不能改變位置)
我已經其描述了標題中的下列全局陣列:
headRow - 包含的陣列按列順序列出標題名稱
prLst - 包含確定每個標題的優先級的整數數組(輸入爲字符串)。整數在數組中的位置是它們描述的列號。
colIsString - 包含布爾值,確定給定列中列出的項目是字符串還是整數。 True =字符串,False =整數。同樣,陣列中布爾值的位置是他們描述的列號。
sortOrder - 包含指定排序方向的布爾值。 「真」 - 上升。 「假」 - 下降。再次,陣列中的布爾值的位置的位置是它們所描述的列數***
與已經etablished陣列中的數據,我有下面的代碼喂這些陣列的.sort:
Dim numHdrs, finalNumHdrs, count As Integer, newArray As Variant
For numHdrs = 1 To UBound(headRow)
If colIsString(numHdrs) = True Then
sortOrder(numHdrs) = xlAscending
ElseIf colIsString(numHdrs) = False Then
sortOrder(numHdrs) = xlDescending
End If
Next numHdrs
newArray = CombineArrays(headRow, prLst, sortOrder)
For finalNumHdrs = 1 To UBound(headRow)
If headRow(finalNumHdrs) And prLst(finalNumHdrs) And sortOrder(finalNumHdrs) <> "N/A" Then
'ActiveSheet.Sort.SortFields.Add Key(headRow(finalNumHdrs)):= finalNumHdrs
'ActiveSheet.Sort.SortFields.Add Order(finalNumHdrs):=sortOrder(finalNumHdrs)
End If
Next finalNumHdrs
With ActiveSheet.Sort
.SetRange inRange
.Apply
End With
我無法適當地加入了排序字段,用我有數組中的數據:
'ActiveSheet.Sort.SortFields.Add Key(headRow(finalNumHdrs)):= finalNumHdrs
'ActiveSheet.Sort.SortFields.Add Order(finalNumHdrs):=sortOrder(finalNumHdrs)
這顯然是不正確的。所以我創建了一個函數來連接headRow,prLst,和sortOrder以使其更容易進入。排序:
Function CombineArrays(arr1 As Variant, arr2 As Variant, arr3 As Variant)
Dim arr4 As Variant
ReDim arr4(1 To UBound(arr2), 1 To 2)
Dim i, j As Integer
For i = 0 To UBound(arr1)
arr4(arr2(i), 1) = arr1(i)
arr4(arr2(i), 2) = arr3(i)
Next i
CombineArrays = arr4
End Function
由於ARR2被指定給定列的排序優先級,我需要養活它在ARR2指定密鑰號這樣的方式的.sort。如果在arr2 = 3時,key3:= arr4(3,1),order3:= arr4(3,2)。我假設我的元素到arr4的順序並不重要。 (如,如果我加入arr4(3,1之前arr4(4,1)),他們仍然會在適當的順序列出)
這可以歸結爲兩個問題:
爲Excel的功能的.sort :當我不知道給定工作表有多少個鍵(標題)時,如何添加鍵?
我正確嗎?
***注意:如果我早些時候聽說過他們,我會使用集合對象。但是,由於我是VBA新手,這就是我如何創建程序。考慮到我已經編寫的代碼返回並將所有數組更改爲集合對象,這將非常困難。
注意:這是一個更大的計劃,其說明可以在這裏找到的部分:Sorting Groups of Rows Excel VBA Macro
你的問題是如此漫長和折衷細緻,以至於很難理解。你爲什麼不給我們展示一張照片 - 並相應地將文本縮短一千字。也請告訴我們廣告的代碼,並避免不完整的句子。 –
我同意。它太冗長了。而「這裏是我迄今爲止的代碼」實際上並沒有列出任何代碼,只是代碼的設計方案......請重寫。 – aevanko
我添加了一個新的描述,並列出了頂部列出的問題。希望這更清楚。 – H3lue