返回列表 上一主題 發帖

[發問] 誰能幫這幾乎重複動作的VBA瘦身 謝謝

本帖最後由 lcctno 於 2015-8-25 10:51 編輯

回復 7# don4831
先感謝您的用心與建議 辛苦您了
就是因為這檔案執行起來 真的很佔資源 且又費時 已勉強使用數年了 (因為我只會用函數寫) 所以才會貼文 想改請高手幫助我 改用VBA之工程寫法

TOP

回復 6# ikboy

奇怪  在我這端看起來很正常 並沒有亂碼???
且都能執行

TOP

透過工作管理員之處理程序可觀察EXCEL使用系統資源之情況。
我的環境:記憶體4G,可用2.9G,EXCEL用達299,000K時就會當。
只開【~test% -.xls】檔,不開其他檔,
(1)未執行前,EXCEL使用的系統資源:CPU使用率26%,記憶體用91,372K
(2)執行後,分析至6時,EXCEL使用的系統資源:CPU使用率61%,記憶體用209,336K
(3)分析至7時,EXCEL使用的系統資源:CPU使用率55%,記憶體用285,176K
(4)分析至8時,EXCEL使用的記憶體逾290,000K時,用ESC中斷作業。
公式相當耗資源,這支程式,幾乎所有的工作表都有公式,
如果不能強化系統資源,建議拆檔,將公式轉成程式和結果資料分開呈現。
[color=blue]KY[/color]

TOP

看到了問題是代碼中的中文字源於不同語系, 在您的檔案中亂碼了, 請手動更改
ar = Array("析1", "析2", "析3", "析4", "析5", "析6", "析7", "析8", "析9", "析10")

TOP

回復 4# ikboy

送上原檔 請您試試 不知道那�堨X問題 其中
[執行]之按鈕是我錄製的 可以正常執行7000列之資料 但執行7000列要花費很久的時間
[xx]之按鈕是您第一次寫的 執行錯誤(非程式碼錯誤)
[yy]之按鈕是您第二次寫的 執行錯誤(非程式碼錯誤)

還請您多照顧了 謝謝您

   
~test% -.zip (396.17 KB)

TOP

回復 3# lcctno


Sub ZZ()
Dim ar, br, MyRng
Myrng = sheets("Data" ).[L4] & “:” & sheets("Data" ).[M4]        Rem[起始列數]="Data"之L4     [結束列數]="Data"之M4      
ar = Array("析1", "析2", "析3", "析4", "析5", "析6", "析7", "析8", "析9", "析10")
For i = 0 To UBound(ar)
    Select Case i
    Case 0 To UBound(ar) - 1
        With Sheets(ar(i))
            .Rows(2).Copy .Rows(myrng)
            br = .Rows(myrng)
            .Rows(myrng) = br
        End With
    Case UBound(ar)
        With Sheets(ar(i))
            .Rows(2).Copy .Rows("201:301") Rem 此處如此類推
            br = .Rows("201:301")
            .Rows("201:301") = br
        End With
    End Select
Next
End Sub

TOP

回復 2# ikboy

感謝您的熱心幫助 但這樣執行只能比對300筆資料 我是想要能執行到10001
還有想要請教 可否能由外部之值 例如於 "Data" 之分頁內 加入2個輸入格 可以輸入  [起始列數]="Data"之L4     [結束列數]="Data"之M4 做區段之比對 這樣執行起來會省很多時間
在此先謝謝您的費心了

TOP

Sub ZZ()
Dim ar, br
ar = Array("析1", "析2", "析3", "析4", "析5", "析6", "析7", "析8", "析9", "析10")
For i = 0 To UBound(ar)
    Select Case i
    Case 0 To UBound(ar) - 1
        With Sheets(ar(i))
            .Rows(2).Copy .Rows("3:101")
            br = .Rows("3:4")
            .Rows("3:101") = br
        End With
    Case UBound(ar)
        With Sheets(ar(i))
            .Rows(2).Copy .Rows("201:301")
            br = .Rows("201:301")
            .Rows("201:301") = br
        End With
    End Select
Next
End Sub

TOP

        靜思自在 : 有願放在心裡,沒有身體力行,正如耕田不播種,皆是空過因緣。
返回列表 上一主題