我目前有以下代码,这是由一位可爱的成员在这里制作的
Sub YearsNumberReduction()
Dim LastCol As Long
Dim DelCnt As Integer
DelCnt = Sheets("Panel").Range("E19").Value
With ThisWorkbook.Sheets("Current")
LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
If LastCol >= DelCnt Then
.Range(.Cells(1, LastCol - DelCnt + 1), .Cells(1, LastCol)).EntireColumn.Delete
End If
End With
此代码采用最后一列,并按E19中指定的次数删除该列。如何更改代码,因此我们可以添加列而不是从最后一行删除指定的次数?基本上扭转了VBA宏的作用。
我还有另一个问题。在我的Excel解决方案中,我不断添加年数并减少它们(这些年份是业务年度,每年都有利润,按收入成本计算)。在主要工作表上,我有10年。这是默认的年数。但是,当我根据我提到的功能添加或减少年份时,这不会改变。 10年的利润按= SUM计算(B29:B39)。如何更改范围(例如,如果我再添加一年,将在主电子表格中添加第11年和= SUM(B29:40),以获得利润概览?
当前添加列
Worksheets("Sheet1").Range("L1:L15").AutoFill Destination:=Worksheets("Sheet1").Range("L1").Resize(15, Worksheets("Panel").Range("E17") + 1), Type:=xlFillDefault
然而,这是从固定列而不是最后一列添加的。所以我将列扩展5,它将增加5,但如果我再次将它扩展5,它将不会延伸,因为它有一个固定点。所以我需要根据最后一栏进行更改。
修改
Year 1 Year 2 Year 3 Year 3 Year 3
Sales 100 115 132 132 152
Costs 30 32 33 33 35
Profit 70 84 99 99 99
第3年保持不变,成本不更新(= C3 * 1.05)它应该上升5%
答案 0 :(得分:0)
尝试以下方法。假设您可以使用A列查找上次使用的行:
Sub YearsNumberReduction()
Dim LastCol As Long
Dim DelCnt As Integer
DelCnt = Sheets("Panel").Range("E19").Value
Dim copyCol As Range
Dim DestRange As Range
Dim lastRow As Long
With ThisWorkbook.Sheets("Current")
lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
Set copyCol = .Range(.Cells(1, LastCol), .Cells(lastRow, LastCol))
Set DestRange = .Range(.Cells(1, LastCol), .Cells(lastRow, LastCol + DelCnt))
copyCol.AutoFill Destination:= DestRange, Type:=xlFillDefault
End With
End Sub