2012-08-13 27 views
0

這是我第一次使用Excel的VBA(我通常編碼Java和C++),我希望能得到一些提示,以開始。宏運行3個條件並提供價值

我想要寫爲一個大的數據集,將通過的條件下,以下列表進行到提供一美元結果的宏:從塔A

  1. 收集單元大小(可能的值0-8)
  2. 確定是否從列B的單或家庭爲單位(單1,以家庭0)從列C
  3. 收集效用代碼(代碼被評估產品的類型)

從這信息,通過考慮單位大小,單位類型和有問題的產品,將在該行確定新的價值。我曾考慮在循環中使用嵌套的Select Case或嵌套條件,但總體來說我很迷茫。

+4

要開始使用宏記錄器在Excel中手動執行所需操作。然後看看你得到了什麼代碼。這會教你一些簡單的VBA。你可以使用循環/選擇案例 - 因爲你理解這些概念。看看你有多遠。那麼如果你被卡住了,發佈一些代碼並告訴我們你卡在哪裏。我們可以以這種方式幫助你! :)有關提問的更多信息,請參閱http://stackoverflow.com/faq – 2012-08-13 19:08:09

回答

0

看起來工作表公式似乎可以訣竅,但很難說不知道計算是什麼。以下是用戶定義的函數(UDF),您可以將它放入標準模塊中。你可以從如下單元格中調用它:

=computecosts(A2,B2,C2) 

很明顯,代碼會根據數據的佈局和計算方式而改變。

Public Function ComputeCosts(rSize As Range, rFamily As Range, rCode As Range) As Double 

    Dim lSizeFactor As Long 
    Dim lFamilyFactor As Long 
    Dim dCodeFactor As Double 
    Dim rFound As Range 

    Const lFAMILY As Long = 0 

    'Size factor is a function of 0-8, namely adding 1 
    lSizeFactor = rSize.Value + 1 

    'Family factor is computed in code 
    If rFamily.Value = lFAMILY Then 
     lFamilyFactor = 3 
    Else 
     lFamilyFactor = 2 
    End If 

    'Code factor is looked up in a different sheet 
    Set rFound = Worksheets("Sheet2").Columns(1).Cells.Find(rCode.Value, , xlValues, xlWhole) 
    If Not rFound Is Nothing Then 
     dCodeFactor = rFound.Offset(0, 1).Value 
    End If 

    'do the math 
    ComputeCosts = lSizeFactor * lFamilyFactor * dCodeFactor 

End Function 
0

感謝您的回覆,他們有助於理解VBA for Excel。我只是最終將可能的值放在表中,然後使用索引函數中的匹配函數來挑選出正確的值。

+0

在這種情況下,接受迪克的答案會很有禮貌(並且對您的聲譽有好處) – smirkingman 2012-08-14 19:55:49