標題:
[發問]
如何用VBA讓公式複制到工作表有資料的最後一列
[打印本頁]
作者:
PJChen
時間:
2018-5-13 22:15
標題:
如何用VBA讓公式複制到工作表有資料的最後一列
想請問二種VBA寫法:
1.
A至C欄有公式
目前資料至第11列,資料會不斷增加
如何用VBA讓A~C欄自動把公式複制到工作表有資料的最後一列?
2.
E欄為等差數列
同1所述,如何讓數列自動複制到有資料的最後一列?
[attach]28712[/attach]
作者:
iamaraymond
時間:
2018-5-13 22:50
回復
1#
PJChen
請問一下針對第二個問題:
您是希望E欄一直持續加1,也就是488,489,490...
還是就483~487一直循環?
不是很懂複製的意思?
作者:
PJChen
時間:
2018-5-13 23:22
回復
2#
iamaraymond
數列的部份,不管那個數字是什麼,就從空白的上一個數字持續+1即可
例如:
現在的例子,有資料的部份到第11列,就針對A至C欄,自動偵測沒公式的地方開始複第到第11列,等蒫數列亦相同.
作者:
iamaraymond
時間:
2018-5-13 23:54
回復
3#
PJChen
不知道這樣符不符合您的需求
Sub test()
lastRow1 = Cells(Rows.Count, "F").End(xlUp).Row
lastRow2 = Cells(Rows.Count, "A").End(xlUp).Row
If lastRow2 <> lastRow1 Then
Range("A" & lastRow2 & ":" & "C" & lastRow2).AutoFill Destination:=Range("A" & lastRow2 & ":C" & lastRow1)
For i = lastRow2 To lastRow1 - 1
Cells(i + 1, "E") = Cells(i, "E") + 1
Next
End If
End Sub
複製代碼
作者:
PJChen
時間:
2018-5-14 22:05
回復
4#
iamaraymond
首先感謝您幫忙寫這個程式
我在程式中加入一些其他功能,然後把程式與要執行自動複制公式的檔分開,也改了檔名(自動複制.xlsx,不過應該沒影響),測試了10多次一直出現問題(但不是您的程式問題),最終發現在檔案自動開啟時,執行程式沒問題,但若是檔案先打開了,就無法執行自動填寫公式,這樣又試了幾次仍然找不出原因,懇請幫忙看下問題出在哪?
另外我把填數列的功能暫停,也請教您,若是填數列的功能,想改為從1:1的下一列(也就是標題列的下一列)開始,自動從1填到有資料(以G欄為準)的最後一列,該如何修改?
[attach]28713[/attach]
作者:
iamaraymond
時間:
2018-5-14 22:34
本帖最後由 iamaraymond 於 2018-5-14 22:38 編輯
回復
5#
PJChen
想先確認一下您的問題:
您是說當執行VBA指令裡的程式時
1.若此時"自動複製"關著,則可以執行往下自動填滿
2.若此時"自動複製"開著,就沒有動作
所以您希望當"自動複製"開著時,也可以往下自動填滿?
不知道我的理解正不正確
您的第二個問題是希望"自動複製"的E2=1,E3=2,一直到目前最後一列E11嗎?
作者:
PJChen
時間:
2018-5-14 23:15
回復
6#
iamaraymond
當執行VBA指令裡的程式時
1.若此時"自動複製"關著,則可以執行往下自動填滿...Yes
2.若此時"自動複製"開著,就沒有動作...Yes (事先開啟,未透過VBA打開時)
所以您希望當"自動複製"開著時,也可以往下自動填滿? ...YES (我希望無論事先已開啟or經由VBA開啟,一按VBA執行鈕,它就能執行"
自動複制公式
"的功能
您的第二個問題是希望"自動複製"的E2=1,E3=2,一直到目前最後一列E11嗎?...YES
For Each Wb In Workbooks
If UCase(Wb.Name) = UCase("自動複制.xlsx") Then
Msg = True '檔案已開啟
Exit For
End If
Next
'*****************************************
If Msg = True Then '檔案已開啟
Set Wb = Workbooks("自動複制.xlsx")
Else '檔案尚未打開時
Set Wb = Workbooks.Open("W:\00_科毅\出貨文件連結\自動複制.xlsx")
End If
複製代碼
作者:
iamaraymond
時間:
2018-5-14 23:27
回復
7#
PJChen
這樣嗎?
With Wb.Sheets("訂單出貨")
lastRow1 = .Cells(Rows.Count, "G").End(xlUp).Row '以G欄的資料列為基準
lastRow2 = .Cells(Rows.Count, "A").End(xlUp).Row '以A欄的資料列為基準
lastRow3 = .Cells(Rows.Count, "BL").End(xlUp).Row '以BL欄的資料列為基準
lastRow4 = .Cells(Rows.Count, "BP").End(xlUp).Row '以BP欄的資料列為基準
If lastRow2 <> lastRow1 Then
.Range("A" & lastRow2 & ":" & "C" & lastRow2).AutoFill Destination:=.Range("A" & lastRow2 & ":C" & lastRow1) '當A欄最後一列不等於G欄時,A:C自動往下填滿
For i = 2 To lastRow1
.Cells(i, "E") = i - 1
Next
End If
If lastRow3 <> lastRow1 Then
.Range("BL" & lastRow3 & ":" & "BN" & lastRow3).AutoFill Destination:=.Range("BL" & lastRow3 & ":BN" & lastRow1) '當BL欄最後一列不等於G欄時,自動往下填滿
End If
If lastRow4 <> lastRow1 Then
.Range("BP" & lastRow4 & ":" & "CX" & lastRow4).AutoFill Destination:=.Range("BP" & lastRow4 & ":CX" & lastRow1) '當BP欄最後一列不等於G欄時,自動往下填滿
End If
End With
複製代碼
作者:
PJChen
時間:
2018-5-14 23:54
回復
8#
iamaraymond
感謝...這樣完全正常了。
作者:
iamaraymond
時間:
2018-5-15 00:01
回復
9#
PJChen
其實只是幫您加個"."而已XD
用with的時候要使用"."才可以使用該物件
作者:
PJChen
時間:
2018-5-15 19:38
回復
10#
iamaraymond
一直不知道問題出在哪!謝謝您,幫忙解決.
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)