โซลูชันที่ไม่ใช่มาโครเพื่อแยกสตริงว่างที่ไม่ว่างออกจากรายการตรวจสอบความถูกต้องของข้อมูลในเซลล์


0

เห็นได้ชัดว่าช่องว่างและสตริงว่างเป็นสองสิ่งที่แตกต่างกันใน Excel เมื่อฉันต้องการใช้ช่วงของเซลล์ที่มีสตริงว่างสำหรับดร็อปดาวน์การตรวจสอบความถูกต้องของข้อมูลในเซลล์และบอกให้ละเว้นช่องว่างมันยังคงแสดงสตริงว่าง

คุณสามารถทำซ้ำนี้โดยการป้อน=""ในเซลล์ A1 แล้วเข้าในเซลล์อื่นและก็จะกลับ=ISBLANK(A1) FALSEลบสูตรจาก A1 TRUEและจะส่งกลับ

คงจะดีถ้ามี=BLANK()ฟังก์ชั่น

ฉันได้ลอง=NA()แล้วเช่นกัน แต่กลับกลายเป็นว่ารายการแบบเลื่อนลงไม่ได้เพิกเฉยต่อข้อผิดพลาดเช่นกัน


คุณสามารถจัดเรียงช่วงของคุณหรือไม่
MátéJuhász

@ MátéJuhászฉันทำได้ แต่ฉันไม่ต้องการเพราะฉันมีช่วงแยกสี่ช่วงที่เซลล์อ้างอิงจากแผ่นงานอื่นสี่แผ่น คำถามนี้เป็นส่วนขยายของคำถามนี้: superuser.com/questions/1293220/ …
oscilatingcretin

คำตอบ:


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 หากไม่เป็นเช่นนั้น หากคุณมีมากกว่า 1,000 แถวคุณต้องมีจำนวนมากขึ้นที่นี่ แต่หวังว่าจะเพียงพอสำหรับตัวเลือกการตรวจสอบความถูกต้องของข้อมูลของคุณ ตอนนี้ฟังก์ชั่น SMALL มีรายการหมายเลขแถวโดยมี 999 แทนที่หมายเลขแถวจริงสำหรับช่องว่างใด ๆ

ROW(1:1)

เป็นวิธีแบบไดนามิกในการเริ่มนับจากเซลล์ใดก็ตามที่คุณป้อนสูตรนี้เมื่อคุณคัดลอกสูตรลงจำนวนที่เพิ่มขึ้น นี่เป็นการบอกตัวเล็กว่าคุณต้องการตัวเลขที่เล็กที่สุดอันดับที่ 1 ในแถวที่ 1 ที่มีสูตรตัวที่สองที่เล็กที่สุดในแถวที่ 2 เป็นต้น

SMALLมือหมายเลขแถวกลับไปINDEXซึ่งจะช่วยให้คุณมีค่าสำหรับแถวนั้น 999 เหล่านั้นทั้งหมดกลายเป็นข้อผิดพลาด #REF ในตอนท้าย แต่เรากลับไปที่ช่องว่างด้วยความIFERRORเงียบ

สูตรนั้นอาจเป็นเรื่องยากที่จะเข้าใจ หากคุณมีปัญหาลองตั้งค่าข้อมูลตัวอย่างใน A1: A15 บนแผ่นงานใหม่เลือกเซลล์ในคอลัมน์อื่นและคัดลอกสูตรของฉันลงในแถบสูตรอย่างแน่นอน (อย่าลืม CTRL + SHIFT + ENTER) เล่นกับมันสักหน่อยและคุณควรจะได้รับมัน

โชคดี!


1
นั่นคือตัวช่วยสร้าง Excel ที่ฉันยังไม่เข้าใจแม้หลังจากที่คุณอธิบายรายละเอียดแล้ว มันใช้งานได้ แต่สิ่งเดียวที่ฉันไม่ชอบคือการที่ดรอปดาวน์ค่าเริ่มต้นเป็นค่าว่างอันแรกในรายการหากเซลล์ว่างเปล่า (เป็นเพียงการจับคู่กับค่าแรกที่พบ) ฉันจะเปิดคำถามนี้ทิ้งไว้อีกสองสามวันแล้วทำเครื่องหมายว่าเป็นคำตอบถ้าไม่มีใครสามารถคิดวิธีแก้ปัญหาอื่นได้ แก้ไข: เพิ่งทราบว่าการคืนค่านิพจน์ "" (ช่องว่าง) จะป้องกันการเว้นว่างครั้งแรกจากการเลือกอัตโนมัติ
oscilatingcretin

0

จะชอบงานนี้ไหม

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

หมายเหตุ: หากคุณต้องการฟังก์ชั่นที่กำหนดเองเช่นทำตามตัวอักษร=blank(A1)คุณจะต้องใช้ VBA ในการสร้าง UDF สูตรด้านบนจะตรวจสอบว่าเซลล์ที่คุณกำลังมองหามีสูตรและยังว่างอยู่


ฉันเดิมพันถ้าคุณพัน=ISBLANK()รอบนิพจน์นั้นทั้งหมดมันจะคืนค่า FALSE
oscilatingcretin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.