2017-05-30 91 views
2

希望這裏有人能夠幫助我: 我試圖計算樣本協方差出長數據集我有一個工作表,使用我有信息第二個工作表來選擇每個樣本。 包含所述數據集的第一個工作表,命名爲「C1%規範」看起來像這樣:如何在使用vba變量的單元格中插入公式

  | 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 ... ... ... ... 
     .. 

第二工作表包含要使用的,命名爲「Mapeo槍」,並且每個「擲」或樣品的極限看起來是這樣的:

  | 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 

,但我得到了以下錯誤: 運行時錯誤:「1004」 應用程序定義或對象定義的錯誤

我知道「測試」字符串是正確連接;如果我刪除字符串開頭的「=」符號,則單元格會填充所需的文本而不會出錯。

我知道我可以得到它使用這個工作:

... 
    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 

但我確實需要爲教學目的的每個單元格的公式...我在做什麼錯?

回答

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 
+1

感謝A.S.H,這兩種解決方案工作就像一個魅力! – Patux

相關問題