ตรวจสอบว่าข้อความเซลล์ Excel เป็นตัวเลขโดยใช้สูตรเท่านั้น


13

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

สิ่งที่ฉันได้พบคือISNUMBER()ฟังก์ชั่นใช้งานได้เฉพาะเมื่อเซลล์มีการจัดรูปแบบตัวเลขหรือไม่มีช่องว่างหากการจัดรูปแบบข้อความเช่น:

จำนวนเป็นตัวอย่างข้อความ

สำหรับงวดสามครั้งแรกที่ผมเคยใช้และความพยายามครั้งสุดท้ายของฉันคือ=ISNUMBER(...)=ISNUMBER(TRIM(...))

วิธีเดียวที่ฉันใช้ที่ไม่ใช้ VBA คือแทนที่ค่าปัจจุบันของฉันโดยใช้ข้อความเป็นคอลัมน์จากนั้นใช้=ISNUMBER()ฟังก์ชัน

หมายเหตุ:ฉันมีความเชี่ยวชาญใน VBA และ Excel และเข้าใจว่าฉันสามารถสร้างฟังก์ชั่นที่ผู้ใช้กำหนดได้ แต่ฉันไม่ต้องการเนื่องจากสิ่งนี้เรียกว่าแมโครที่ต้องการสมุดงานหรือ Add-in ที่จะติดตั้งซึ่งฉันสามารถทำได้และได้ทำในบางกรณี

ฉันจะขอบคุณคำแนะนำความคิด (แม้ว่าพวกเขาบอกฉันว่ามันไม่สามารถทำได้) หรือโซลูชั่น VBA (จะไม่ถูกทำเครื่องหมายเป็นคำตอบ)


4
FWIW อีกทางเลือกหนึ่งสำหรับISNUMBERใช้บ่อยNครั้ง บางอย่างเช่นนี้=NOT(ISERR(N(--A1)))
brettdj

1
@Brettdj ขอบคุณสำหรับสิ่งนั้น! สำหรับคำตอบที่ใช้จำนวนน้อย charaters =N(-A1)และมีความรวดเร็วและสกปรกผมได้ในขณะนี้ ไม่ทราบว่ามีอยู่จริงเช่นกัน
glh

จุดประสงค์ของยัติภังค์ในหน้าการอ้างอิงเซลล์คืออะไร? แล้วทำไมคุณถึงมียัติภังค์ต่างกัน?
youcantryreachingme

คำตอบ:


30

ลองคูณค่าเซลล์ด้วย 1 แล้วเรียกใช้ฟังก์ชันIsNumberและTrimฟังก์ชันเช่น:

=IsNumber(Trim(A1)*1)


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

1
นอกจากนี้ฉันยังพบว่าคุณไม่จำเป็นต้องใช้trimด้วยซ้ำ ขอแสดงความนับถือ
glh

2
@glh บางครั้งมันต้องใช้สายตาอีกชุดเพื่อดูว่ามีอะไรอยู่ตรงหน้า ya :)
David Zemens

5

สมมติว่าค่าที่คุณต้องการแปลงอยู่ใน A1 คุณสามารถใช้สูตรต่อไปนี้:

=ISNUMBER(VALUE(TRIM(CLEAN(A1)))

ฟังก์ชั่นที่นี่สะอาดและตัดขอบจะลบช่องว่างและไม่มีตัวอักษรที่พิมพ์ได้ ค่าฟังก์ชั่นแปลงสตริงเป็นตัวเลขและด้วยสตริงที่แปลงเราสามารถตรวจสอบว่าค่าเป็นตัวเลขหรือไม่


3
+1 ในฐานะที่เป็นฉันที่รวดเร็วและสกปรกเช่นเป็นข้อมูลของฉันจะไม่ได้มีความจำเป็นในการ=VALUE(A1) CLEAN()ฉันไม่รู้ว่ามีVALUE()ฟังก์ชันอยู่หรือไม่ เพียงสังเกตว่าTRIM()ไม่ทำอะไรเลยเพราะช่องว่างจะถูกละเว้นอยู่ดี
glh


2

ฉันรู้ว่าโพสต์นี้เก่า แต่ฉันพบว่ามีประโยชน์มากในกรณีนี้ฉันมีสูตรที่ส่งคืน (333) แม้ว่าจะเป็นตัวเลขและ ISNUMBER จะบอกว่าเป็นตัวเลขแม้ว่าฉันไม่ต้องการคำตอบถ้ามี ตัวละครอื่นที่ไม่ใช่ตัวเลข ต่อไปนี้ใช้งานได้สำหรับฉัน

=IF(AND(ISNUMBER(--(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)))),"Is Number","")

มันทำงานได้ถ้ามีตัวละครใด ๆ นอกเหนือจากหลัก ถ้าคุณแค่อยากให้ false วางจริง IF

=AND(ISNUMBER(--(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))))

ตามที่ David Zemens กล่าว

=IsNumber(Trim(A1)*1)

ใช้งานได้ แต่ถ้ามี "-" หรือตัวเลขอยู่ในวงเล็บก็จะบอกว่าเป็นตัวเลข

ฉันหวังว่านี่จะช่วยคุณหรือคนอื่น ๆ


0

หากใครต้องการกรองเซลล์ที่มีสิ่งใดที่ไม่ใช่ตัวเลข:

=AND(SUMPRODUCT(--ISNUMBER(--MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)))=LEN(A1),A1<>"")

ผลลัพธ์ทศนิยมและเชิงลบ FALSE

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