希望有人能够帮助我: 我试图从一个工作表上的长数据集中计算样本协方差,使用第二个工作表中的信息来选择每个样本。 第一个包含数据集的工作表,名为" C1%Norm"看起来像这样:
| A | B | C | D | E | F |
1 |throw|temp |depth| s | c | sp |
2 60 0,3 0,456 0,123 ... ...
.. ... ... ... ... ... ...
189 61 0,42 ... ... ... ...
.. ... ... ... ... ... ...
375 62 0,35 ... ... ... ...
..
第二个工作表包含每个" throw"的限制。或者要使用的样品,名为" Mapeo Lances"看起来像这样:
| A | B | C |
1 |throw|lim i|lim s|
2 60 2 188
3 61 189 374
4 62 375 ...
基本上需要做的是计算样本协方差,例如" temp"和"深度"使用第2行和第188行(第一张工作表)之间的数据作为样本,然后使用第189-374行的数据作为样本,等等......
我写了这段代码: Sub covariances()
Dim i As Integer
Dim limi As Integer
Dim lims As Integer
Dim test As String
i = 2
Sheets("Mapeo Lances").Select
While i < Cells(Rows.count, 1).End(xlUp).Row + 1
limi = Range("B" & i).Value
lims = Range("C" & i).Value
test = "=covariance.s('C1% Norm'!B" & limi & ":B" & lims & ";'C1% Norm'!C" & limi & ":C" & lims & ")"
Range("D" & i).Formula = test
i = i + 1
Wend
End Sub
但是我收到以下错误: 运行时错误:&#39; 1004&#39; 应用程序定义的错误或对象定义的错误
我知道&#34;测试&#34;字符串正在连接;如果我删除&#34; =&#34;在字符串的开头签名,单元格中填充了所需的文本,没有错误。
我知道我可以使用它来实现它:
...
dim range_i as Range
dim range_s as Range
...
while...
...
set range_i = Worksheet("C1% Norm").Range("B" & limi & ":B" & lims)
set range_s = Worksheet("C1% Norm").Range("C" & limi & ":C" & lims)
Range("D" & i).value = Application.WorksheetFunction.Covariance_S(range_i,range_s)
wend
但实际上我需要在每个单元格中使用公式用于教学目的......我做错了什么?
答案 0 :(得分:2)
因此,您在区域设置中将;
(分号)作为列表分隔符。这适用于Excel公式但不幸的是,不是从VBA设置公式时。从VBA设置时,请使用逗号:
test = "=covariance.s('C1% Norm'!B" & limi & ":B" & lims & ",'C1% Norm'!C" & limi & ":C" & lims & ")"
' ^^^
然后通过魔术,您会发现Excel中的逗号被;
替换。似乎区域设置功能的理念是针对最终用户,而不是(VBA)程序员。
您也可以使用.FormulaLocal
将VBA中的公式设置为它在Excel中的外观:
Range("D" & i).FormulaLocal = test