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

时间:2018-10-29 09:18:56

标签: excel vba excel-vba excel-formula

我在使用“范围”实现VBA代码时遇到问题:

我正在使用2张纸。第一个是“导入”,另一个是“数据”,在这里我使用“导入”中的数据,并使用不同的公式来编辑/过滤我的数据。 “导入”表中的数据每周更改一次,因此行数(5000-10000行)。

我将范围设置为10000,以始终覆盖我的数据,但是当行低于10000时,它将N/A放在单元格上,每次都必须删除。

这是我在“数据”表上使用的数据(“数据”中的每一列均从“导入”中导入,另一列来自“导入”):

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

有什么方法可以使Range看到“导入”的每一列上有多少行,因此我可以避免所有的N / A?

3 个答案:

答案 0 :(得分: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 :(得分: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),"""")"

答案 2 :(得分: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)"