從單元格內資料驗證清單中排除非空白空字串的非宏解決方案

從單元格內資料驗證清單中排除非空白空字串的非宏解決方案

顯然,空白和空字串在 Excel 中是兩種不同的東西。當我想使用包含空字串的單元格範圍作為單元格內資料驗證下拉列表並告訴它忽略空白時,它仍然顯示空字串。

=""您可以輸入儲存格 A1 然後輸入另一個儲存格來重現此情況=ISBLANK(A1),它將返回FALSE。從 A1 中刪除公式並返回TRUE

=BLANK()要是有功能就好了

我也嘗試過 return =NA(),但事實證明下拉清單也不會忽略錯誤。

答案1

資料驗證下拉清單不會在這方面與您合作。它只想查看靜態列表,或確切地查看您告訴它的單元格,而不考慮其中的內容。

既然我們不能讓它做我們想要的事情,那麼讓我們妥協吧——我們將給它一個連續的範圍,只顯示我們想要看到的值(加上最後的空白,人們大多不會看)。

在我的範例中,包含資料驗證清單的值(和空白)的儲存格是 A1:A15。我將轉到另一列並輸入以下公式:

=IFERROR(INDEX($A$1:$A$15,SMALL(IF($A$1:$A$15<>"",ROW($A$1:$A$15),999),ROW(1:1))),"")

我需要將其輸入為數組公式,所以當我輸入公式後,我將按 CTRL + SHIFT + ENTER。接下來,我將複製/貼上或填寫 15 行。結果將是 A1:A15 中的所有非空白值,然後是最後的所有空白。

現在,我將開啟「資料驗證」對話框,並將清單指向包含公式的儲存格(不是 A1:A15)。空白仍然在那裡,但在最後,所以沒有人需要看到它們,除非他們向下滾動到那裡看不到任何東西。

它並不完全乾淨,但它是動態的並且避免了巨集。


那麼這個公式做了什麼?

=INDEX($A$1:$A$15,

查看包含您的值和空白的原始範圍,並讓您透過數字告訴它您要查看哪個儲存格。

SMALL(

查看一組數字,從最小的開始計數,然後返回一個,

IF($A$1:$A$15<>"",

檢查範圍內的每個單元格是否符合空白字串以外的任何內容

ROW($A$1:$A$15)

如果存在則傳回行號,

,999),

如果不存在則傳回 999。如果您的行數超過 1000 行,則此處需要更大的數字,但這(希望)對於您的資料驗證選擇來說綽綽有餘。 SMALL 函數現在有一個行號列表,其中任何空白的實際行號都用 999 取代。

ROW(1:1)

是一種動態方式,從您輸入此公式的任何儲存格開始計數。這告訴小號,您想要包含公式的第一行中的第一個最小的數字,第二行中的第二小的數字,依此類推。

SMALL行號傳回給INDEX,這將為您提供該行的值。這些 999 最後都變成了 #REF 錯誤,但我們悄悄地用IFERROR.

這個公式可能很難理解。如果您遇到問題,請嘗試在新工作表的A1:A15 中設定範例數據,在另一列中選擇一個單元格,然後將我的公式準確複製到公式欄中(不要忘記CTRL+SHIFT+ENTER) 。稍微嘗試一下,您就應該掌握它的訣竅。

祝你好運!

答案2

這樣的事情會起作用嗎?

=IF(AND(NOT(ISFORMULA(J3)),J3=""),"Truly Empty","Blank via Formula")

注意:如果您想要自訂函數,例如字面上的動作=blank(A1),則需要 VBA 來建立 UDF。上面的公式檢查您正在尋找的儲存格是否有公式並且是否為空。

答案3

我遇到了同樣的問題並找到了解決方法。依照 AjimOthy 共享的範例,在 A1:A15 下面新增一個計數公式(假設 A16 將是該儲存格)。它只會計算上面的儲存格 (A1:A15) 並給你一個數字

可以透過將自訂格式設為;;;來隱藏它

然後我使用間接的如

=間接("$A$1:$A$"&0+$A$16)

當資料驗證要求您選擇其來源時。使用間接允許基於計數進行流體變化,並且還將刪除使用計數函數出現在列表中的空白,因為它不計算“”空白。

相關內容