Excel VBA范围直到最后一个可用单元格

4
我在使用 "Range" 实现 VBA 代码时遇到了问题:
我使用了两个工作表。第一个名为“Import”,另一个是“Data”,我使用“Import”的数据,使用不同的公式来编辑/过滤我的数据。 “Import” 工作表中的数据每周更改一次,因此行数会有所变化(5000-10000 行)。
我将范围设置为 10000,以始终覆盖我的数据,但是当行数小于 10000 时,会在单元格中放置“N/A”,这需要每次删除。
以下是我在“Data”工作表上使用的内容(Data 的每一列导入 Import 的其他列):
Range("A2:A10000").Formula = "='Import'!RC"
Range("B2:B10000").Formula = "=VLOOKUP(RC[-1],'Import'!R1C[-1]:R10000C[43],45,FALSE)"`

在“导入”时,有没有办法让范围看到每列上有多少行,以避免所有的N/A?


首先,从“导入”中计算行数,然后从2到行数进行循环,并为每个单元格放置公式。 - BOB
3个回答

4
尝试一下,
dim lr as long

with worksheets("Import")
    lr = .cells(.rows.count, "A").end(xlup).row
end with

with worksheets("Data")
    .Range(.cells(2, "A"), .cells(lr, "A")).Formular1c1 = "='Import'!RC"
    .Range(.cells(2, "B"), .cells(lr, "B")).Formular1c1 = _
         "=VLOOKUP(RC[-1], 'Import'!C1:C45, 45, FALSE)"
end with

必须将A列的值带过来吗?似乎B列中的公式同样可以轻松实现以下功能:

with worksheets("Data")
    .Range(.cells(2, "B"), .cells(lr, "B")).Formular1c1 = "=RC45"
end with

1
我认为最好先查看最后一行,然后仅适用于相关行。但是您可以将VLOOKUP包装在IFERROR()函数中。因此,当不存在值时,它将显示#N/A为空单元格...
Range("A2:A10000").Formula = "='Import'!RC"

Range("B2:B10000").Formula = "=IFERROR(VLOOKUP(RC[-1],'Import'!R1C[-1]:R10000C[43],45,FALSE),"""")"

0

我强烈建议使用这种方法来避免一些意外错误,同时也更容易理解代码并为下一个挑战进行修改。

Dim tw As Workbook: Set tw = ThisWorkbook
Dim shImp As Worksheet: Set shImp = tw.Worksheets("Import")
Dim shData As Worksheet: Set shData = tw.Worksheets("Data")
Dim nrRows As Long

nrRows = shImp.Cells(shImp.Rows.Count, "A").End(xlUp).Row
shData.Range("A2:A" & nrRows).FormulaR1C1 = "=Import!RC"
shData.Range("B2:B" & nrRows).FormulaR1C1 = "=VLOOKUP(RC[-1], 'Import'!C1:C45, 45, FALSE)"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接