在VBA中更改范围以select表格的第一行

目前,在Excel VBA中,我有一个简单的函数,它读取工作表第一行中的一组值,稍后将其用于公式中。

equity(i) = Worksheets("Data").Range("D2").Offset(i - 1, 0) debt(i) = Worksheets("Data").Range("E2").Offset(i - 1, 0) riskFree(i) = Worksheets("Data").Range("F2").Offset(i - 1, 0) 

我想改变这个,以便函数只读取工作表上高亮select的值。 因此,如果我从第20行开始的数据中select一个数值表,它应该在D20,E20 F20等中读取,而不是现在设置的D2,E2和F2。 我努力了:

 equity(i) = Worksheets("Data").Range("D" & Rows.Count).end(xlUp).Offset(i - 1, 0) debt(i) = Worksheets("Data").Range("E" & Rows.Count).end(xlUp).Offset(i - 1, 0) riskFree(i) = Worksheets("Data").Range("F" & Rows.Count).end(xlUp).Offset(i - 1, 0) 

但没有运气。 我究竟做错了什么?

我到目前为止看起来是这样的

 Function VarunModel(Table As Range, Optional EndCondition As Integer = 0) As Variant Dim iNumCols As Integer, iNumRows As Integer Dim i As Integer iNumCols = Table.Columns.Count iNumRows = Table.Rows.Count maturity = Worksheets("KMV-Merton").Range("B2").Value For i = 1 To iNumRows equity(i) = Worksheets("Data").Range("D2").Offset(i - 1, 0) debt(i) = Worksheets("Data").Range("E2").Offset(i - 1, 0) riskFree(i) = Worksheets("Data").Range("F2").Offset(i - 1, 0) Next I 

如果您想要通过D20:F50范围内的D20值,只需将D20:F50范围视为其自己的子单元格; 像一个微型独立工作表。

 with Worksheets("Data") equity(i) = .Range("D20:F50").Range("A1").Value '◄ D20 debt(i) = .Range("D20:F50").Cells(1, 2).Value '◄ E20 riskFree(i) = .Range("D20:F50").Range("C3").Value '◄ F22 end with 

当你处理一系列隔离的单元格时,所有的范围和单元格引用都是相对于单元格范围的; 例如,A1是左上angular的单元格。 写上述的另一种方法是,

 with Worksheets("Data").Range("D20:F50") equity(i) = .Range("A1").Value '◄ D20 debt(i) = .Cells(1, 2).Value '◄ E20 riskFree(i) = .Range("C3").Value '◄ F22 end with