2015-06-11 5 views
1

В настоящее время в Excel VBA у меня есть простая функция, которая читает в наборе значений из первой строки рабочего листа, которую позже использует в уравнении.Изменение диапазона в 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 

ответ

0

Если вы хотите получить значение от D20, когда вы прошли диапазон D20: F50, просто лечить 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 
+0

Спасибо, что ответили. Извините, я был неясен - см. Редактирование. – beeba

Смежные вопросы