標題:
執行VBA上的問題(sorting不完全)
[打印本頁]
作者:
m09903020
時間:
2012-4-24 19:19
標題:
執行VBA上的問題(sorting不完全)
問題: 執行時sorting不完全...必須按很多次執行才排序完成。 邏輯上語法上都檢查過3便了,應該是沒問題! 所以現在我不知道是什麼問題...以往沒寫過VBA遇到這種問題..所以上來貴版求救
小的在下我今天寫了一個小sorting 排序三筆資料 5 4 3 2 1
5 4 3 2 1
5 4 3 2 1
由小排到大在某些特定cell中(也就是原本的15個格子), 以下是我的程式碼,
Sub sorting_order()
Dim temp As Integer
For i = 2 To 4
For j = 7 To 10
If (Worksheets("Sheet1").Cells(i, j).Value > Worksheets("Sheet1").Cells(i, j + 1).Value) Then
temp = Worksheets("Sheet1").Cells(i, j + 1).Value
Worksheets("Sheet1").Cells(i, j + 1).Value = Worksheets("Sheet1").Cells(i, j).Value
Worksheets("Sheet1").Cells(i, j).Value = temp
End If
Next
Next
End Sub
這只是小小的三筆排序測試, 因為我需要幾千筆的排序 若按完執行不知何時可完整完成排序則會無解= =。
請貴人高抬貴手,謝謝。
作者:
register313
時間:
2012-4-24 20:20
本帖最後由 register313 於 2012-4-24 21:30 編輯
回復
1#
m09903020
Sub sorting_order()
C = [G2].End(xlToRight).Column - [G2].Column + 1
For Each G In Range([G2], [G2].End(xlDown))
G.Resize(1, C).Sort Key1:=G, Order1:=xlAscending, Header:=xlGuess, Orientation:=xlLeftToRight
Next
End Sub
複製代碼
Sub sorting_order()
C = [G2].End(xlToRight).Column - [G2].Column + 1
'C=G2向右最後一欄之欄號-G2欄號+1=11-7+1=5欄
For Each G In Range([G2], [G2].End(xlDown))
'迴圈:共有幾列要排序 第1圈:G=G2,第2圈:G=G3...
G.Resize(1, C).Sort Key1:=G, Order1:=xlAscending, Header:=xlGuess, Orientation:=xlLeftToRight
'G2擴大5欄作排序 排序鍵G2 遞增排序 無標題 依列排序
'G3擴大5欄作排序 排序鍵G3 遞增排序 無標題 依列排序
Next
End Sub
複製代碼
作者:
GBKEE
時間:
2012-4-24 20:25
回復
1#
m09903020
Option Explicit
Sub sorting_order()
Dim temp As Integer, i As Integer, y As Integer, j As Integer
For i = 2 To 4
For y = 7 To 9 '***** 有有4欄 要跑3 次 ****
For j = 7 To 9 '原本有4欄 第4欄不必跑
'For j = 7 To 10
If (Worksheets("Sheet1").Cells(i, j).Value > Worksheets("Sheet1").Cells(i, j + 1).Value) Then
'If j < 10 Then
temp = Worksheets("Sheet1").Cells(i, j + 1).Value
Worksheets("Sheet1").Cells(i, j + 1).Value = Worksheets("Sheet1").Cells(i, j).Value
Worksheets("Sheet1").Cells(i, j).Value = temp
'End If
End If
Next
Next
Next
End Sub
Sub Ex()
Dim temp As Integer, i As Integer, y As Integer, j As Integer, Ar
For i = 2 To 4
Ar = Application.Transpose(Application.Transpose(Range(Cells(i, 7), Cells(i, 10)).Value))
'將 整列的數值轉至再轉至(為一維陣列) 導入 陣列
'工作表函數 Small 可在一維陣列中傳回 指定排序第幾個的 最小值
For y = 7 To 10
Cells(i, y) = Application.Small(Ar, y - 6) '將 陣列 值由最小開始排列
Next
Next
End Sub
複製代碼
作者:
m09903020
時間:
2012-4-24 21:15
回復
3#
GBKEE
謝謝版大的意見,
作者:
m09903020
時間:
2012-4-24 21:17
回復
2#
register313
謝謝R大的意見,我剛試run了您的程式發現可以跑,跟我之前假設的EXCEL編譯問題無關
可以麻煩你寫點註記嗎? 您的程式蠻精簡的我看不懂 ^^"
作者:
m09903020
時間:
2012-4-26 02:02
回復
2#
register313
非常謝謝,我能應用在龐大的數量中了!
作者:
GBKEE
時間:
2012-4-26 05:52
回復
2#
register313
Sub sorting_order()
Dim G As Range
For Each G In Range([G2], [G2].End(xlDown)).CurrentRegion.Rows
G.Sort Key1:=G, Order1:=xlAscending, Header:=xlGuess, Orientation:=xlLeftToRight
Next
End Sub
複製代碼
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)