vba - Excel VBA : Variable as First Row of Selection?

标签 vba excel

我正在 Excel VBA 中创建一个函数。我正在尝试将变量设置为等于工作表选择中的第一个单元格。基本上相当于类似的东西

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)

除了我希望 "Range("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

结束功能

谢谢。

最佳答案

试试下面的代码

Dim SelectedRange As Range
Set SelectedRange = Selection

x = SelectedRange.Cells(1).Value
y = SelectedRange.Cells(2).Value
z = SelectedRange.Cells(3).Value

关于vba - Excel VBA : Variable as First Row of Selection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30810444/

相关文章:

vba - 将 Access 查询结果导出到 csv

vba - PowerPoint VBA - 在关闭时保留自定义 CommandBar 设置

python - xlwings支持 "Wrap Text"属性吗?

excel - 如何删除 VBA-Excel 中的重复行和倒序重复行

excel - 用户表单文本框必填字段 - 仅接受数字模式

vba - VBA中空字符串的条件

vba - 工作簿上的输入框打开

excel - 如何使用下拉列表向多个收件人发送电子邮件?

vba - 将焦点设置为 formField1

excel - 在 Excel 中将一系列数字转换为字母