自动将VBA中的范围调整为第一个空白列

时间:2019-07-18 14:26:51

标签: excel vba

我有以下Excel电子表格:

       A                 B         C         D        E          F
1                     2019-03   2019-04   2019-05   2019-06   2019-07
2    
3   Revenue             500       600
4   COGS                -40       -30
5   Gross Profit        460       570
6   
7   OPEX                -10       -12
8   Interests           -20       -50
9
8   EBT                 430       508

公式:

B5 = SUM(B3:B4)
C5 = SUM(C3:C4)
B10 = B5+B7+B8
C10 = C5+C7+C8

电子表格显示公司每月的表现。

每次到达新月时,我都希望将上个月的值复制到新月。因此,我在VBA月份开发了以下2019-05

Sub test()
Sheet1.Range("C5:C14").Copy
Sheet1.Range("D5:D14").PasteSpecial
End Sub

到目前为止,所有这些都工作正常。


现在,我的问题是我必须每月手动调整VBA的范围,才能复制上个月的值。
因此,我想知道是否有一种方法可以告诉VBA哪个是上一个非空月份,然后将本月的值/公式复制到下个月。

3 个答案:

答案 0 :(得分:2)

您可以使用以下代码找到一行的最后使用的列

Sub Last_Used_Column()
'Find the last used column in a Row: row 1 in this example
    Dim LastCol As Long
    With ActiveSheet
        LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
    End With
    MsgBox LastCol
End Sub

您可以在代码中附加以上代码,并在需要的地方使用LastCol变量。

答案 1 :(得分:2)

获得最后一列的很多方法。

Dim rLastCell As Range

Set rLastCell = ws.Cells.Find(What:="*", After:=ws.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False)

MsgBox ("The last used column is: " & rLastCell.Column)

如果要查找特定行中使用的最后一列,可以使用:

Dim lColumn As Long

lColumn = ws.Cells(1, Columns.Count).End(xlToLeft).Column

使用范围(可靠性较差):

Dim lColumn As Long

lColumn = ws.UsedRange.Columns.Count

答案 2 :(得分:2)

类似的方法

Iterator