問題一
Excel vba 只要copy一個範圍的值就好 有哪些寫法?
Range("B2:AE2").Copy Range("B" & xlocation & ":AE" & xlocation)
若不需要格式等資料只要copy 值就好 要怎麼寫呢?
可以用cells
或是陣列的方式改寫嗎?
謝謝
問題二
請問這個Excel VBA 要怎麼改寫 才能增加執行效率呢?
Sub runmen()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim xlocation As Integer
xlocation = Cells(1, 1)
Dim aoutmoney, xoutmoney, zoutmoney As Integer
aoutmoney = Cells(5, 5)
xoutmoney = Cells(6, 5)
zoutmoney = Cells(7, 5)
'以上參數範圍定義'
'''''''''''''''''''我是分隔線''''''''''''''''''''''''''''''''
'以下跑回圈 跑盈虧等屬性報表
For ioutmoney = aoutmoney To zoutmoney Step xoutmoney
Cells(2, 5) = ioutmoney
Application.Calculation = xlCalculationAutomatic
Range("B2:AE2").Copy
Cells(xlocation, 2).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.Calculation = xlCalculationManual
xlocation = xlocation + 1
Next ioutmoney
Application.Calculation = xlCalculationAutomatic
End Sub
dazzcarr wrote:
問題一
問題一
Cells(xlocation, 2).Resize(1, Range("B2:AE2").Count) = Range("B2:AE2").Value
問題二
Sub runmen()
Application.ScreenUpdating = False
Dim xlocation As Integer
xlocation = Cells(1, 1)
Dim aoutmoney, xoutmoney, zoutmoney As Integer
aoutmoney = Cells(5, 5)
xoutmoney = Cells(6, 5)
zoutmoney = Cells(7, 5)
'以上參數範圍定義'
'''''''''''''''''''我是分隔線''''''''''''''''''''''''''''''''
'以下跑回圈 跑盈虧等屬性報表
For ioutmoney = aoutmoney To zoutmoney Step xoutmoney
Cells(2, 5) = ioutmoney
Cells(xlocation, 2).Resize(1, Range("B2:AE2").Count) = Range("B2:AE2").Value
xlocation = xlocation + 1
Next ioutmoney
Application.ScreenUpdating = True
End Sub
只剩 Range("B2:AE2") 要計算
所以就把 Application.Calculation = xlCalculationManual 拿掉了
效率應該有好一點... 試試看
dazzcarr wrote:
To YS2000...(恕刪)
1.先檢查公式必須是自動計算狀態下,Range("B2:AE2")的值才會更新

2.可能 Range("B2:AE2")內的公式太複雜,計算速度趕不上貼的速度
在 Cells(2, 5) = ioutmoney 後加 Doevents 看看
---
Cells(2, 5) = ioutmoney
Doevents
Cells(xlocation, 2).Resize(1, Range("B2:AE2").Count) = Range("B2:AE2").Value
---
3.如果前面都不行,就只好把公式也複製過去,就不會發生來不及計算,不過可能會跑久一點
Sub runmen()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim xlocation As Integer
xlocation = Cells(1, 1)
Dim aoutmoney, xoutmoney, zoutmoney As Integer
aoutmoney = Cells(5, 5)
xoutmoney = Cells(6, 5)
zoutmoney = Cells(7, 5)
'以上參數範圍定義'
'''''''''''''''''''我是分隔線''''''''''''''''''''''''''''''''
'以下跑回圈 跑盈虧等屬性報表
For ioutmoney = aoutmoney To zoutmoney Step xoutmoney
Cells(2, 5) = ioutmoney
Cells(xlocation, 2).Resize(1, Range("B2:AE2").Count) = Range("B2:AE2").FormulaR1C1
xlocation = xlocation + 1
Next ioutmoney
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
試試看
dazzcarr wrote:
檔案在這裡https...(恕刪)
大概看一下,您的問題不在複製貼上,原因就如 ys2000這位高手所說的
YS2000 wrote:
2.可能 Range("B2:AE2")內的公式太複雜,計算速度趕不上貼的速度...(恕刪)
您的 run 工作表中的 b2:ae2 ,要從(母體、明細、績效圖、結算價)工作表取資料
而這些工作表中又要用到公式計算,您把複製那幾行先取消,程式跑一遍就知道了
效能差的原因就是因為 b2:ae2 取資料太慢
要改善的話
一、把(母體、明細、績效圖、結算價)工作表的內容,在程式一開始就先丟到2維陣列
可以一個一個試,建議先從母體,雖然有公式,但內容單純幾乎都是歷史資料,沒什麼變動
二、b2:ae2的內容(公式不需改變)
資料的取得,不要從工作表複製,全部用2維陣列在程式中計算
三、最後等迴圈跑完後,再從2維陣列中,一次把資料複製=>貼上
雖然說的很簡單,不過要這樣作是大工程喔…加油
ps. 這程式您寫的嗎?? 其實這行 => Dim xlocation As Integer,一開始就定義錯誤,不改的話會造成溢位錯誤
內文搜尋
X




























































































