2015-03-03 227 views
0

我想在Excel中使用EVALUATE-Function之類的if語句。Excel - 將if條件轉換爲公式

我遇到以下問題:我想使用Excel來驗證我的數據。我有三張紙:

  1. 我想檢查的真實數據。每行代表一個客戶,每列代表一些數據。這些列有特定的名稱,如「年齡」,「名稱」,...
  2. 我希望執行的檢查的說明。每行代表一張支票,我有3列:1 check_id - 每個支票的標識符; 2 check_desc - 每個正常人都能理解的檢查描述,如「18歲以下」; 3規則 - 將Excel公式視爲字符串,如If(年齡< 18,「錯誤」,「無錯誤」)
  3. 表1和2應該放在一起的位置。每行應該代表一位顧客,並且每一列都檢查一次。

現在,如果我有例如check_1「如果(年齡< 18,」錯誤「,」無錯誤「)」和客戶數據10和20,那麼第一個客戶的支票應該火而第二個檢查不應該。 如果數據發生變化,年齡從10到18,那麼一切都應該沒問題,或者如果規則更改爲「如果(年齡< 21,」錯誤「,」沒有錯誤「)」,那麼新的條件應適用於所有數據。

是這樣的可能嗎? 使用評估函數只有'簡單'的公式工作。

由於提前, 馬丁

連接的,你可以找到 Excel-Sample File

+1

它不清楚你試圖實現什麼,只是使1張,並有1列的檢查,3如果在同一個函數表示在行中的錯誤, – 2015-03-03 09:42:47

回答

0

您一定會在這裏需要一些VBA。創建自定義EVAL功能:

Public Function EVAL(ByRef Rng As Range, Formula As String) As Variant 
    Dim RngAddress As String 
    RngAddress = "'" & Rng.Parent.Name & "'!" & Rng.Address(External:=False) 
    EVAL = Evaluate(Replace(Formula, "$", RngAddress)) 
End Function 

然後你就可以輕鬆地與文本通過公式計算你的價值觀($是參數):

=EVAL(A1, "IF($<21,""error"",""no error"")") 

(注意轉義雙引號)。 - 但是,你寧願從其他單元格通過公式,那麼你可以用單引號單元格指定公式:

IF($<21,"error","no error") 
=EVAL(A1, B1) 
+0

謝謝你的提示。但是,如果我有多個變量,我該怎麼做? – user2274386 2015-03-04 09:13:18

+0

如果這種單變量方法對您來說可以,我可以修改它來處理多個變量。 – Taosique 2015-03-04 09:24:32

+0

我的目標是將條件寫成文本,以便一個人閱讀和理解它。這就是爲什麼我喜歡使用像年齡這樣的命名範圍。如果我可以在文本年齡小於18歲時進行評估,那麼我會很棒,或者是AND(年齡> 10歲,年齡<18歲)。首先,簡單的EVAL函數就是一個簡單的例子。但是,第二個它總是顯示錯誤,如果我輸入公式=它是正確的...奇怪... – user2274386 2015-03-04 09:44:17

0

我個人命名check_desc B2爲「Check_1」(命名範圍),然後是指那個! 。一旦您重新命名了列標題「Check_1」,您也可以使用INDIRECT功能。 注意:這種情況下的值應該是「18」而不是「18歲以下」。您當然可以將數字格式更改爲「age below」0
如果關係也在改變,我會插入一個表格,當在一個單元格中改變時,每個單元格中的統一公式會發生變化。

您將面臨的唯一問題是您的表的非擴展性。你可以爲此使用VBA,但是維護公式會增加你的責任,即使它不會處理討厭的嵌套函數會稍微容易一些。