วิธีที่ดีที่สุดในการลบศูนย์นำหน้าจากค่าที่ไม่ใช่ตัวเลขใน Excel


13

ฉันมีเซลล์จำนวนมากในแผ่นงาน Excel โดยใช้อักขระ 9 ตัวจาก 0-9 และ AZ ที่มีศูนย์นำหน้าจำนวนหนึ่ง:

000000123 
000001DA2 
0000009Q5
0000L210A
0000014A0
0000A5500
00K002200

ฉันต้องการลบศูนย์นำหน้าเพื่อให้ค่าเป็น:

123 
1DA2 
9Q5
L210A
14A0
A5500
K002200

ฉันจะทำสิ่งนี้ในสูตร Excel ได้อย่างไร ฉันต้องการหลีกเลี่ยงการใช้แมโคร VBA


หากคุณมีข้อ จำกัด อีกสองสามข้อในข้อมูลฉันอาจสามารถหาวิธีแก้ปัญหาที่เฉพาะเจาะจงมากขึ้นได้
Lance Roberts

ขอบคุณ ค่ามีศูนย์นำหน้าเพื่อให้มีทั้งหมด 9 ตัวอักษร นอกเหนือจากนั้นค่าเป็นสตริงของตัวเลข 0-9 ผสมกับตัวพิมพ์ใหญ่ AZ อาจเป็นไปได้ว่ามีศูนย์ต่อท้ายอยู่และเป็นส่วนหนึ่งของมูลค่าจริงและไม่ควรตัดออก
คริสชาวนา

เพื่อให้ชัดเจนไม่มีช่องว่างฝังตัว เพียงแค่ 0-9 และ AZ
คริสชาวนา

แก้ไขเพื่อรวมตัวอย่างศูนย์ต่อท้ายเหล่านั้น
Chris Farmer

@ Chris ฉันสามารถทำได้ถ้าเรารู้จำนวนสูงสุดของเลขศูนย์ที่เคยปรากฏในสตริงหรือตามหลัง (แม้ว่ามันจะเป็นสูตรยาว)
Lance Roberts

คำตอบ:


14

นี่คือวิธีแก้ปัญหาที่ใช้เซลล์มาก แต่ถูกต้อง

ใส่ข้อมูลของคุณในคอลัมน์ A

ใน B1 ให้ใส่สูตร:

=IF(
    LEFT(A1) = "0" ,
    RIGHT(A1, LEN(A1)-1),
    A1)

การตรวจสอบสำหรับศูนย์นำเดี่ยวและตัดออก

คัดลอกสูตรนี้ไปทางด้านขวาให้มากที่สุดเท่าที่จะมีอักขระในข้อมูลของคุณ (9 ในกรณีนี้ดังนั้นคุณจะออกไปที่คอลัมน์ J) คัดลอกมันลงสำหรับข้อมูลแต่ละแถว

คอลัมน์สุดท้ายมีข้อมูลของคุณซึ่งเป็นศูนย์นำหน้า


หลังจากพยายามมาหลายครั้งแล้วนี่เป็นเวอร์ชั่นเดียวที่จะทำงานได้โดยไม่ต้องใช้ VBA
skamradt

ความคิดเห็นโดย @Richard: ฉันชอบทางออกของ Isaac หากมีศูนย์นำหน้ามากกว่าหนึ่งให้คัดลอกจากเซลล์ที่มีสูตรของเขาและวางค่าเฉพาะกับเซลล์ดั้งเดิมเท่านั้น: แต่ละครั้งจะตัดศูนย์นำหน้าอื่น (ถ้ามี)
Ivo Flipse

8

สูตรต่อไปนี้ไม่ต้องการเซลล์เพิ่มเติมหรือไม่ต้องป้อนเป็นสูตรอาร์เรย์:

=RIGHT(A1,LEN(A1)-FIND(LEFT(SUBSTITUTE(A1&" ","0",""),1),A1&" ")+1)

หากมีการส่งคืนค่าศูนย์เดียวสำหรับสตริงเช่น0หรือ00อาจใช้สูตรต่อไปนี้:

=IF(A1="","",RIGHT(A1,LEN(A1)-FIND(LEFT(SUBSTITUTE(LEFT(A1,LEN(A1)-1)&" ","0",""),1),LEFT(A1,LEN(A1)-1)&" ")+1))

คำตอบนี้ใช้ได้กับศูนย์นำหลายแห่งและดูเหมือนจะเป็นคำตอบที่สมบูรณ์และเรียบง่ายที่สุดที่กล่าวถึงที่นี่
ปีเตอร์

5

นี่เป็นปัญหาที่ยากมากสำหรับฟังก์ชั่นแผ่นงาน ต่อไปนี้จะใช้เคล็ดลับ แต่ถ้าศูนย์ที่ไม่ได้นำหน้ามาทีละหนึ่งเท่านั้นและไม่มีเลขศูนย์ต่อท้ายและไม่มีช่องว่างในตัว

มันแทนค่าศูนย์ทั้งหมดด้วยช่องว่างตัดพวกเขา (ทั้งหมดยกเว้นช่องว่างเดียวที่ฝังตัว) จากนั้นแทนศูนย์กลับ

=SUBSTITUTE(TRIM(SUBSTITUTE(A1,"0"," "))," ","0")

ทำไมถ้าเลขศูนย์ที่ไม่นำขึ้นมาทีละรายการ ? และสิ่งที่เกี่ยว=CLEAN(SUBSTITUTE(TRIM(SUBSTITUTE(A1 & CHAR(9),"0"," "))," ","0"))(หวังว่าCLEANจะลบแท็บถ้าไม่ใช้บางส่วนค่าอื่น ๆCHAR)
Arjan

@Arjan ฉันทดสอบ TRIM และแทนที่การฝังหลายช่องว่างด้วยช่องว่างเดียว แต่ฉันจะทำการวิจัยข้อมูลของคุณตอนนี้และดูสิ่งที่ฉันสามารถหาได้ (ฉันใช้ปี 2003)
Lance Roberts

ฟังก์ชั่น CLEAN ช่วยประหยัดพื้นที่ฝังตัว แต่ยังบันทึกทั้งหมดยกเว้นพื้นที่ชั้นนำแรก
Lance Roberts

ฉันเพิ่ม CLEAN เพื่อลบ CHAR (9) ฉันเพิ่ม; ใช้ CLEAN ในค่า TRIMmed ไม่ควรมีช่องว่างนำหน้า ...
Arjan

ใช่ แต่เมื่อเพิ่ม CHAR (9) (เข้าไปที่แต่ละศูนย์) จะเพิ่มตัวเองลงในศูนย์นำหน้าด้วย ฉันเห็นว่าคุณใช้เพื่อบันทึกเลขศูนย์ต่อท้ายและฉันจะรวมไว้ในคำตอบ
Lance Roberts

5

วิธีนี้ใช้ได้กับค่าอินพุตที่มีทั้งหมดเก้าตัวอักษร

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

000000000

000000001

000000010

000000100

000001000

000010000

000100000

001000000

010000000

100000000

ให้บอกว่าตารางอยู่ในเซลล์ A1 ถึง 'A10

สมมติว่าค่าอินพุตของคุณอยู่ในเซลล์ B1 และเซลล์ผลลัพธ์ของคุณคือ C1

ใช้สูตรต่อไปนี้ในเซลล์ C1

= ขวา (B1, MATCH (B1, $ A $ 1: $ A $ 10,1) -1)


ฉลาด! สำหรับพารามิเตอร์ตัวที่สามในMATCHฟังก์ชั่น: 1 = หาค่าที่มากที่สุดน้อยกว่าหรือเท่ากับ lookup_value
Arjan

4

สำหรับข้อมูลใน A1 ใช้สูตรต่อไปนี้:

= ขวา (A1, LEN (A1) -MAX ((FINDB (REPT ("0", ROW (A $ 1: A $ 100)), A1 & "-" & REPT ("0", 100)) = 1) * ROW (A $ 1: A $ 100)))

ป้อนข้อมูลโดย Ctrl + Shift + Enter มันใช้งานได้กับสตริงสูงสุด 100 ตัวอักษร


ว้าว! หมายเหตุเล็กน้อยบางอย่าง: Ctrl-Shift-Enter (Cmd-Shift-Return บน Mac) สร้างสูตรอาร์เรย์ วางสูตรตามปกติ แต่แทนที่จะกด Enter กด Ctrl-Shift-Enter เพื่อบันทึก จากนั้นจะแสดงระหว่างเครื่องหมายปีกกา ใน OpenOffice.org บน Mac ฉันไม่สามารถลากสูตรลงในแถวถัดไปได้ แต่การคัดลอกและวางใช้งานได้ดังนั้นฉันแน่ใจว่ามีทางลัดด้วย และ OpenOffice.org ไม่รู้จัก FINDB การใช้ FIND ดูเหมือนว่าจะทำงานได้ดี
Arjan

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