close
標題:

Excel 左上至右下的資料交換

發問:

 

此文章來自奇摩知識+如有不便請留言告知

我有12個sheet,每個sheet裡都有640x480的數字資料,已寫了如下的程式去將左上至右下的資料交換,即將整個方塊的資料旋轉180度,但是我是利用三個for去寫的,所以,中間資料複製的程式要執行 480x640x12,要花幾分鐘才能跑完,有更快的寫法嗎?再請高手指教,謝謝!Private Sub CommandButton1_Click() Application.ScreenUpdating = False For i = 1 To 12 With Sheets(i) For x = 0 To 640 - 1... 顯示更多 我有12個sheet,每個sheet裡都有640x480的數字資料,已寫了如下的程式去將左上至右下的資料交換,即將整個方塊的資料旋轉180度,但是我是利用三個for去寫的,所以,中間資料複製的程式要執行 480x640x12,要花幾分鐘才能跑完,有更快的寫法嗎?再請高手指教,謝謝! Private Sub CommandButton1_Click() Application.ScreenUpdating = False For i = 1 To 12 With Sheets(i) For x = 0 To 640 - 1 For y = 0 To 480 - 1 .Cells(481 + y, 1 + x) = .Cells(480 - y, 640 - x) Next y Next x .Rows("1:480").Delete End With Next i Application.ScreenUpdating = True End Sub

最佳解答:

Const X = 640 Const Y = 480 Dim i, AP, AR, r, c For i = 1 To 12 With Sheets(i) ReDim AP(1 To Y, 1 To X), AR(1 To Y, 1 To X) AP = .[A1].Resize(Y, X) For r = 1 To Y For c = 1 To X AR(r, c) = AP(Y - r + 1, X - c + 1) Next Next .[A1].Resize(Y, X) = AR End With Next 2013-06-06 09:48:18 補充: 改用陣列轉換的方式,速度會增快許多,程式碼改為: Private Sub CommandButton1_Click() Const X = 640 Const Y = 480 Dim i, AP, AR, r, c Application.ScreenUpdating = FalseFor i = 1 To 12 With Sheets(i) ReDim AP(1 To Y, 1 To X), AR(1 To Y, 1 To X) AP = .[A1].Resize(Y, X) For r = 1 To Y For c = 1 To X AR(r, c) = AP(Y - r + 1, X - c + 1) Next Next .[A1].Resize(Y, X) = AR End With Next Application.ScreenUpdating = TrueEnd Sub

其他解答:

哦!用ARRAY來做資料交換,速度快了十倍哩!謝謝你的幫忙!6524A8F25B63629D
arrow
arrow

    jpjzhf9 發表在 痞客邦 留言(0) 人氣()