Arrays VBA:在循环中使用定义的数组/范围
我对VBA还很陌生,所以我现在很挣扎,代码也很笨拙。 在我的代码中,我试图为一个研究项目识别不相关的股票。其思想是,我的宏生成一个相关矩阵,对股票名称进行限定,然后逐行循环,以返回基础样本中最不相关的股票。然而,我目前不知道我的代码中是否只存在引用问题,或者是否存在任何基本问题。Arrays VBA:在循环中使用定义的数组/范围,arrays,vba,Arrays,Vba,我对VBA还很陌生,所以我现在很挣扎,代码也很笨拙。 在我的代码中,我试图为一个研究项目识别不相关的股票。其思想是,我的宏生成一个相关矩阵,对股票名称进行限定,然后逐行循环,以返回基础样本中最不相关的股票。然而,我目前不知道我的代码中是否只存在引用问题,或者是否存在任何基本问题。 任何帮助都将不胜感激 在下面找到脚本的相关部分: Sub Test() Dim Names As Variant Dim Ref As Variant Set Names = Worksheets("Correl
任何帮助都将不胜感激 在下面找到脚本的相关部分:
Sub Test()
Dim Names As Variant
Dim Ref As Variant
Set Names = Worksheets("Correlation Matrix").Range(Cells(1, 3), Cells(1, Stocks))
For i = 1 To Stocks
Worksheets("Correlation Matrix").Activate
Ref = Worksheets("Correlation Matrix").Range(Cells(i + 1, 3), Cells(i + 1, Stocks)).Value
Worksheets("Main").Activate
Worksheets("Main").Cells("O" & i + 4).FormulaArray = "=Index(" & Names.Address & ",MATCH(MIN(ABS(" & Ref.Address & " - 0),ABS(" & Names.Address & "- 0),0))"
Next i
End Sub
相关矩阵工作表如下所示:
Disney Microsoft Apple sp500
Disney 1 0.764790855 0.737566223 0.832602399
Microsoft 0.764790855 1 0.754724823 0.827980429
Apple 0.737566223 0.754724823 1 0.90982066
sp500 0.832602399 0.827980429 0.90982066 1
将变量标注为范围对象。Variant是一种全面数据类型,没有.Name属性 见下文。我还更改了Names变量,因为.Names指的是命名范围
Sub Test()
Dim theNames As Range
Dim Ref As Range
Set theNames = Worksheets("Correlation Matrix").Range(Cells(1, 3), Cells(1, Stocks))
For i = 1 To Stocks
'Worksheets("Correlation Matrix").Activate - no need to activate sheet
Set Ref = Worksheets("Correlation Matrix").Range(Cells(i + 1, 3), Cells(i + 1, Stocks)).Value
'Worksheets("Main").Activate - no need to activate sheet
Worksheets("Main").Cells("O" & i + 4).FormulaArray = "=Index(" & theNames.Address & ",MATCH(MIN(ABS(" & Ref.Address & " - 0),ABS(" & theNames.Address & "- 0),0))"
Next i
End Sub
考虑这种方法: 在相关矩阵中,我们只需要查看1对角线上方或下方的数字。所有其他值都只是镜像,查看它们会浪费时间 我们试着看一个三角形的坐标: A (1) B (2) C (3) D (4) E (5) 1 Disney Microsoft Apple sp500 2 Disney 1 0.764790855 0.737566223 0.832602399 3 Microsoft 0.764790855 1 0.754724823 0.827980429 4 Apple 0.737566223 0.754724823 1 0.90982066 5 sp500 0.832602399 0.827980429 0.90982066 1 这张照片
Disney / Apple
并选择单元格A4。Stocks变量在哪里定义?您好,Tomalak,Stocks在代码的前面部分中定义。这只是我样本中的股票数量。如果你展示相关矩阵工作表的布局也会有所帮助。像我现在做的那样,在问题中编辑类似的内容!类似的内容在评论部分不起作用。非常感谢注意Set Ref=worksheetcorrelationmatrix.RangeCellsi+1,3,Cellsi+1,Stocks.Value。。。是一个RangeCells,Cells问题。嗨,Scott,尝试实施建议的更改,但似乎不起作用unfortunately@BigBen-击中了我在最初的答复中遗漏的那一点。将单元格限定为它们所属的工作表对象。非常感谢建议的更改。重新运行宏并正确生成两个名称ad Ref;问题似乎在我插入的数组公式中的某个地方:WorksheetsMain.CellsO&i+4.FormulaArray==Index&theNames.Address&,MATCHMINABS&Ref.Address&-0,ABS&theNames.Address&-0,0
Sub LeastCorrelated(NumStocks As Integer)
Dim corrMatrix As Worksheet
Dim minimumCell As Range, cell As Range
Dim r As Integer, c As Integer
Dim stock1 As String, stock2 As String
Set corrMatrix = Worksheets("Correlation Matrix")
Set minimumCell = corrMatrix.Cells(2, 2) ' the top-left cell containing "1"
For r = 3 To NumStocks + 1
For c = 2 To r - 1
Set cell = corrMatrix.Cells(r, c)
If cell.Value < minimumCell.Value Then Set minimumCell = cell
Next
Next
minimumCell.Select
stock1 = corrMatrix.Cells(1, minimumCell.Column).Value
stock2 = corrMatrix.Cells(minimumCell.Row, 1).Value
Debug.Print stock1 & " / " & stock2
End Sub
LeastCorrelated 4
Disney / Apple