2016-05-31 41 views
1

在VBA函數中處理Excel 2010中不同類型的變量時,我遇到了一個非常煩人的問題。我已經嘗試了以下代碼與廣告沒有Excel轉換感謝關於同樣的溢出問題(錯誤6)的其他問題,但它沒有解決(我可能做錯了,但我沒有我的指示了)VBA問題:使用多種類型的變量進行簡單操作

Function do_calculation(lig_desti As Integer, col_desti As Integer) 
    Range(Cells(lig_desti, col_desti), Cells(lig_desti, col_desti)).Value = Range(Cells(lig_desti, col_desti - 3), Cells(lig_desti, col_desti - 3)).Value * (Range(Cells(lig_desti, col_desti - 1), Cells(lig_desti, col_desti - 1)).Value/Range(Cells(lig_desti, col_desti - 2), Cells(lig_desti, col_desti - 2)).Value) 
End Function 

總而言之,我想要做的(對於每一行)D = A *(C/B)。

的想法是,我有值的3列,這裏是第一行只給你一個想法:

A  B  C   D 
2187 71,8 18 
1050 78,65 18 
1813 92,35 18 
2379,45 94  18 

所以基本上(除非我錯了)我有對付長,雙打和整數。需要注意的是,「C」柱將始終包含相同的值(18)和A柱可以包含優於大的整數,以20K或30K

在此先感謝您的幫助

+0

如果B列有小數,則不能使用'integer'。 – findwindow

+0

我是嗎?當談到整數時,我主要提到的「C」列 –

+0

給出的代碼必須作爲宏的一部分運行;禁止代碼作爲工作表函數調用的一部分運行來更改工作表,以便Range(x,y).Value = 2將失敗。 –

回答

0

試試這個也許

Sub WriteFormula(ByVal sh As Excel.Worksheet, ByVal lRow As Long, ByVal lColumn As Long) 
    Dim rng As Excel.Range 
    Set rng = sh.Cells(lRow, lColumn) 

    rng.FormulaR1C1 = "=RC[-3]*(RC[-1]/RC[-2])" 
End Sub 

Sub Test() 
    WriteFormula ActiveSheet, 1, 4 
End Sub 
+0

謝謝,我會考慮你的方式 –

0

要以簡單的方式完成此操作,您可以使用Application.Caller。要做到這一點,它也可以用作數組,只需使用Evaluate即可。

要把它放到**模塊*:

Public Function do_calculation() As Variant 
    With Application.Caller '.Cells '(1, 1) 
    do_calculation = Evaluate(.Offset(, -3).Address & "*" & .Offset(, -1).Address & "/" & .Offset(, -2).Address) 
    End With 
End Function 

然後在D1輸入=do_calculation()和複製下來。或者選擇範圍D1:D4並輸入=do_calculation(),但用ctrl確認 + 移位 + 輸入

只是直接獲取值,則需要通過Sub這樣做:

Sub do_calculation(rng As Range) 
    With rng 
    .Value = Evaluate(.Offset(, -3).Address & "*" & .Offset(, -1).Address & "/" & .Offset(, -2).Address) 
    End With 
End Sub 

只需選擇單元格D1:D4和運行do_calculation selection

+0

這真的幫助我了!非常感謝 –

+0

不客氣 –