Excel VBA:variables作为第一行select?

我正在Excel VBA中创build一个函数。 我试图设置一个variables等于工作表上select的第一个单元格。 基本上相当于类似的东西

x = Worksheets("Data").Range("D2").Offset(i - 1, 0) y = Worksheets("Data").Range("E2").Offset(i - 1, 0) z = Worksheets("Data").Range("F2").Offset(i - 1, 0) 

除了我想要的“范围(”D2“)”E2和F2,而不是一个预先设定的单元格,而是指在表单上突出显示的第一,第二和第三个单元格。

我得到的具体代码是:

 Function VarunModel(Table As Range, Optional EndCondition As Integer = 0) As Variant Dim iNumCols As Integer, iNumRows As Integer Dim i As Integer Dim SelectedRange As Range Set SelectedRange = Selection iNumCols = Table.Columns.Count iNumRows = Table.Rows.Count maturity = Worksheets("KMV-Merton").Range("B2").Value For i = 1 To iNumRows equity(i) = SelectedRange.Cells(1).Value debt(i) = SelectedRange.Cells(2).Value riskFree(i) = Selection.Cells(3).Value Next i Dim equityReturn As Variant: ReDim equityReturn(2 To iNumRows) Dim sigmaEquity As Double Dim asset() As Double: ReDim asset(1 To iNumRows) Dim assetReturn As Variant: ReDim assetReturn(2 To iNumRows) Dim sigmaAsset As Double, meanAsset As Double Dim x(1 To 1) As Double, n As Integer, prec As Double, precFlag As Boolean, maxDev As Double For i = 2 To iNumRows: equityReturn(i) = Log(equity(i) / equity(i - 1)): Next i sigmaEquity = WorksheetFunction.StDev(equityReturn) * Sqr(260) sigmaAsset = sigmaEquity * equity(iNumRows) / (equity(iNumRows) + debt(iNumRows)) NextItr: sigmaAssetLast = sigmaAsset For iptr = 1 To iNumRows x(1) = equity(iptr) + debt(iptr) n = 1 prec = 0.00000001 Call NewtonRaphson(n, prec, x, precFlag, maxDev) asset(iptr) = x(1) Next iptr For i = 2 To iNumRows: assetReturn(i) = Log(asset(i) / asset(i - 1)): Next i sigmaAsset = WorksheetFunction.StDev(assetReturn) * Sqr(260) meanAsset = WorksheetFunction.Average(assetReturn) * 260 If (Abs(sigmaAssetLast - sigmaAsset) > prec) Then GoTo NextItr Dim disToDef As Double: disToDef = (Log(asset(iNumRows) / debt(iNumRows)) + (meanAsset - sigmaAsset ^ 2 / 2) * maturity) / (sigmaAsset * Sqr(maturity)) Dim defProb As Double: defProb = WorksheetFunction.NormSDist(-disToDef) VarunModel = defProb 

结束function

谢谢。

尝试下面的代码

 Dim SelectedRange As Range Set SelectedRange = Selection x = SelectedRange.Cells(1).Value y = SelectedRange.Cells(2).Value z = SelectedRange.Cells(3).Value 

尝试这个:

 Dim Row as integer Dim Col as Integer Row = 2 Col = 4 'column "D" x = Worksheets("Data").cells(row, col).Offset(i - 1, 0) col = col + 1 y = Worksheets("Data").cells(row, col).Offset(i - 1, 0) col = col + 1 z = Worksheets("Data").cells(row, col).Offset(i - 1, 0) 

请参阅下面的示例在Excel中使用select,您可以通过更改列索引来控制所需的列。 如果您只select一个单元格,它也将工作:

 Sub Solution() x = Selection.Cells(1, 0) 'By using the zero index on the column, it will get the left cell from the selected one. y = Selection.Cells(2, 0) Z = Selection.Cells(3, 0) End Sub