2015-01-26 44 views
1

我知道數據驗證只允許您放置255個字符。我已經命名了單元格/範圍,因爲我有幾個列表,我試圖根據一個標準來拉取或選擇某些信息。 我的公式如下:Excel-VBA援助 - 數據驗證時間太長,需要替代

=IF(AND(RETAILER="",DISPLAY_TYPE=""),"",IF(AND(RETAILER=CODES!$F$2,(OR(DISPLAY_TYPE=CODES!$V$1,DISPLAY_TYPE=CODES!$Y$1))),CODES!$V$2:$V$49,IF(AND(RETAILER=CODE S!$F$2,(OR(DISPLAY_TYPE=CODES!$AB$1,DISPLAY_TYPE=CODES!$AE$1))),CODES!$AB$2:$AB$94,IF(AND(RETAILER=CODES!$F$3,(OR(DISPLA Y_TYPE=CODES!C1,DISPLAY_TYPE=CODES!C2,DISPLAY_TYPE=CODES!C3,DISPLAY_TYPE=CODES!C4))),"INCORRECT COMBINATION, Correct Retailer or Display Type",IF(AND(RETAILER=CODES!$F$3,DISPLAY_TYPE=CODES!AH1),CODES!AH2:AH38,IF(AND(RETAILER=CODES!$F$3,DISPLAY_TYPE=CODES!AJ1),CO DES!AJ2:AJ10,IF(AND(RETAILER=CODES!$F$3,DISPLAY_TYPE=CODES!AL1),CODES!AL2:AL18,IF(AND(RETAILER=CODES!$F$3,DISPLAY_TYPE=C ODES!AN1),CODES!AN2:AN18,IF(AND(RETAILER=CODES!$F$3,DISPLAY_TYPE=CODES!AP1),CODES!AP2:AP18,IF(AND(RETAILER=CODES!$F$3,DI SPLAY_TYPE=CODES!AR1),CODES!AR2:AR29,IF(AND(RETAILER=CODES!$F$3,DISPLAY_TYPE=CODES!AT1),CODES!AT2:AT29,IF(AND(RETAILER=C ODES!$F$2,(OR(DISPLAY_TYPE=CODES!C5,DISPLAY_TYPE=CODES!C6,DISPLAY_TYPE=CODES!C7,DISPLAY_TYPE=CODES!C8,DISPLAY_TYPE=CODES !C9,DISPLAY_TYPE=CODES!C10,DISPLAY_TYPE=CODES!C11))),"INCORRECT COMBINATION, Change Retailer or Display Type","")))))))))))) 

我知道,過長的數據驗證,這樣的話,我想「名」我的公式,通過選擇在我的公式是嵌套在一個單元格(按CTRL + F3,命名單元格CHECK_FORMULA)並將上面的公式放在「引用」框中。於是,我去了C21(在這裏我希望有我的數據驗證),並輸入以下內容:

=IF(OR(RETAILER="",DISPLAY_TYPE=""),"INVALID",CHECK_FORMULA) 

,我收到的錯誤,「列表源必須是一個分隔的列表,或引用單行或列「。該公式根據將顯示的標準集提供一組部件列表。當公式小於255個字符時,我沒有這個問題,根據標準選擇了列表,沒有問題,但現在,因爲添加了其他列表,我遇到了這個問題。爲了實現我的目標,是否有宏可以加入?或者我可以使用CASE來獲得我想要完成的任務嗎?

+0

我改變了你的標籤公式,因爲這是你正在處理。但是,解決方案可能是在VBA中構建自定義用戶定義的函數UDF。 – Chrismas007 2015-01-26 19:31:18

+0

如果您可以在您的帖子的分層大綱中列出您的需求,以幫助開始建議某些VBA UDF代碼,這將會很有幫助。 – Chrismas007 2015-01-26 19:32:45

回答

0

我認爲數據驗證不能很好地使用命名範圍。 嘗試使用INDIRECT公式。

=IF(OR(INDIRECT("RETAILER")="",INDIRECT("DISPLAY_TYPE")=""),"INVALID",INDIRECT("CHECK_FORMULA")) 
+0

我想表示感謝您的意見。我能夠讓我的配方工作。再次感謝您的幫助 – 2015-04-10 15:50:43

0

解決....我把公式中的一個命名的範圍和它的工作後,我申請的是「固定」到我的Excel文件(由微軟發佈):名稱範圍「CheckFormula的作品有以下幾點:

=`IF(AND(RETAILER="",DISPLAY_TYPE=""),"",IF(AND(RETAILER=CODES!$F$2,(OR(DISPLAY_TYPE=CODES!$V$1,DISPLAY_TYPE=CODES!$Y$1))),CODES!$V$2:$V$47,IF(AND(RETAILER=CODES!$F$2,(OR(DISPLAY_TYPE=CODES!$AB$1,DISPLAY_TYPE=CODES!$AE$1))),CODES!$AB$2:$AB$72,IF(AND(RETAILER=CODES!$F$3,(OR(DISPLAY_TYPE=CODES!C1048575,DISPLAY_TYPE=CODES!C1048576,DISPLAY_TYPE=CODES!C1,DISPLAY_TYPE=CODES!C2))),"INCORRECT COMBINATION, Correct Retailer or Display Type",IF(AND(RETAILER=CODES!$F$3,DISPLAY_TYPE=CODES!AH1048575),CODES!AH1048576:AH36,IF(AND(RETAILER=CODES!$F$3,DISPLAY_TYPE=CODES!AJ1048575),CODES!AJ1048576:AJ8,IF(AND(RETAILER=CODES!$F$3,DISPLAY_TYPE=CODES!AL1048575),CODES!AL1048576:AL16,IF(AND(RETAILER=CODES!$F$3,DISPLAY_TYPE=CODES!AN1048575),CODES!AN1048576:AN16,IF(AND(RETAILER=CODES!$F$3,DISPLAY_TYPE=CODES!AP1048575),CODES!AP1048576:AP16,IF(AND(RETAILER=CODES!$F$3,DISPLAY_TYPE=CODES!AR1048575),CODES!AR1048576:AR27,IF(AND(RETAILER=CODES!$F$3,DISPLAY_TYPE=CODES!AT1048575),CODES!AT1048576:AT27,IF(AND(RETAILER=CODES!$F$2,(OR(DISPLAY_TYPE=CODES!C3,DISPLAY_TYPE=CODES!C4,DISPLAY_TYPE=CODES!C5,DISPLAY_TYPE=CODES!C6,DISPLAY_TYPE=CODES!C7,DISPLAY_TYPE=CODES!C8,DISPLAY_TYPE=CODES!C9))),"INCORRECT COMBINATION, Change Retailer or Display Type",""))))))))))))` 

謝謝所有提供幫助的人。