EXCEL 有多個工作表(如範本有清單、AA、BB、CC),並且AA、BB、CC工作表有超過50筆的資料
問題如下
針對工作表AA、BB、CC,資料從第2列開始,並且每個工作表內的資料筆數都不一樣
當資料筆數超過30列時,就刪除前面的30筆舊資料,如Range("A2:D31"),但TOTAL欄位是不動的
並且將工作表AA、BB、CC底下的資料(第31筆)往上做移動 (如剪下/貼上)
我上網找到一些資料如下針對單一工作表動作,但執行上有些問題,能幫幫我嗎?或是有其他簡單的程式碼可做到,附上測試檔案圖片,謝謝
Sub Cut()
Dim lDataRows As Long
lDataRows = Range("$A$2:$D$30").Rows.Count
Dim vEndCell As Variant
Set vEndCell = Range("$A" & Worksheets("表格名稱").Rows.Count).End(xlUp)
If (vEndCell.Row > 30) Then
Worksheets("表格名稱").Range(Range("$A$" & (vEndCell.Row - lDataRows + 1)), Range("$D$" & vEndCell.Row)).Cut
Worksheets("表格名稱").Range("$A$2").PasteSpecial XlPasteType:=xlPasteValues
End If
End Sub!
TOTAL 是 B、C、D 三欄計算而得,看起來是可以直接刪除掉,不刪的原因應該是怕刪掉後後面預留的 TOTAL 計算會越來越少。其實只要設為表格就可避免這個問題。 設為表格後問題就簡單了,只要確定資料超過 30 列直接刪 2-31 列就解決了。
Sub Cut()
Rows("2:31").Select
Selection.Delete
End Sub
除了剪下貼上
也可以試試「刪除儲存格(上移)」
Range("A2:D31").Select
Selection.Delete Shift:=xlUp
結合haiyen_lee大的想法, 加上自動補足100行, 加上用陣列儲存固定的sheet名稱, 大概會長這樣吧
Sub gg()
For Each a In Array("bb", "CC", "aa")
Set s = Sheets(a)
If s.Range("a1").End(xlDown).Row > 31 Then
s.Range("2:31").Delete
cc = s.Range("a2").End(xlDown).Row
If cc < 100 Then
For i = 1 To 100 - cc
x = cc + i
s.Range("e" & x).Formula = "=b" & x & "+c" & x & "+d" & x
Next i
End If
End If
Next a
End Sub
試試這個.......
與1-30刪除的方法不同的是,這是從後面將31-100區域往上搬移蓋回去
另外多工作表執行的寫法,就參考其他大大內容自行增加嘍~
Sub test()
Set s = Sheets("AA") '指定工作表AA
If s.Range("A1").End(xlDown).Row > 31 Then
s.Range("A2:D101").Value = s.Range("A32:D131").Value '直接將30以後區間複製上移
End If
End Sub
用隱藏的方式,把 2 ~ 31列 隱藏就可以了。