在VBA中更改范围以选择表的第一行

时间:2015-06-11 19:46:49

标签: excel vba excel-vba range

目前,在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)

我想更改此设置,以便该函数仅从工作表中突出显示的选项中读取值。因此,如果我从第20行开始的数据中选择一个值表,它应该在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

1 个答案:

答案 0 :(得分:0)

如果您想要通过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是左上角的单元格。写上述内容的另一种方式是,

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