excel 插入新列后应用公式直到最后一行

kwvwclae  于 2023-03-09  发布在  其他
关注(0)|答案(2)|浏览(171)

我在将公式应用于列直到最后一行时遇到问题。以下代码将应用于Excel的最大行数限制(1,048,576行)。
下面是我的代码:

master.Columns("E:E").Insert Shift:=xlToRight 'New column 

lastRow = master.Range("E1").End(xlDown).Row

master.Range("E2:E" & lastRow).Formula = "=IFERROR(VLOOKUP(F2,Report!A:BS,71,0),""MISSING"")" 'Perform formula

With master.Range("E1")
     .Value = "Column Name" 
End With

但是,只有在使用如下代码插入新列时才会出现此问题:

master.Columns("E:E").Insert Shift:=xlToRight 'New column

当我不插入新列时,我使用下面的代码,这要快得多,而且只适用于最后一行。

Dim lastRow As Long

lastRow = master.Cells(Rows.Count, 1).End(xlUp).Row

With master.Range("J2:J" & lastRow)
    .Formula = "=IFERROR(VLOOKUP(F2,Report!A:N,14,0),""MISSING"")"
End With

With master.Range("J1")
     .Value = "Column Data" 
End With

我怀疑这是因为我编写的代码在插入一个新的空白行后无法理解列中最后一行的位置。我该如何解决这个问题呢?当我需要插入一个新列时,我使用的代码非常慢。我在网上到处寻找,只能找到类似于我展示的第二块代码的示例。在插入新列后使用xlUp而不是xlDown只会将范围应用到第二行。我需要将它应用到最后一行(相对于它周围的列)。

r3i60tvu

r3i60tvu1#

lastRow应始终基于填充的列,通常A列始终填充,因此您用途:

Dim lastRow as Long 'Integer won't cut it with most bigger data sets
lastRow = master.Range("A" & Rows.Count).End(xlUp).Row

如果您希望它基于E列,请在插入新列之前进行,而不是之后;)

du7egjpx

du7egjpx2#

正如您所发现的,您用来查找最后一行的技术只有在您选择的列中有数据时才有效。一个更好的方法可能是使用Find功能。下面是我用来获取LastRow的函数(但请注意,对于完全空的工作表,它返回第一行)

Function lastRow(rg As Variant) As Long
'Find the last row used in a worksheet - regardless of where the data starts and ends
'and regardless of whether the data is contiguous or jagged
'Note use of Variant for the input range parameter
'This allows both worksheets and ranges to passed into the function
    On Error Resume Next
    Dim lr As Long
    lr = rg.Cells.Find(What:="*" _
                    , Lookat:=xlPart _
                    , LookIn:=xlFormulas _
                    , searchorder:=xlByRows _
                    , searchdirection:=xlPrevious).row
    If Err.Number > 0 Then
        lr = 1  'cater for a completely empty sheet
    End If
    On Error GoTo 0
    lastRow = lr
End Function

相关问题