ค้นหารายการที่หายไปจากรายการหมายเลขตามลำดับในคอลัมน์หรือไม่


5

ฉันมีแผ่นงาน Excel ที่มีผลการทดสอบ 66,000 กรณี หรืออย่างน้อยก็ควร ...

ตอนนี้เพราะฉันกำลังรันการทดสอบแบบอะซิงโครนัสและหยุดและเริ่มต้นฉันมีความสุขุมเพื่อให้แน่ใจว่าหมายเลขการทดสอบถูกใส่ไว้ในเอาต์พุต ตอนนี้การใช้คุณลักษณะ Remove Duplicates ของ Excel 2007 ขึ้นอยู่กับหมายเลขการทดสอบที่ฉันพบว่าฉันมี 65997 แถวของข้อมูล ดังนั้น สามของพวกเขาหายไป

งานที่นี่คือการค้นหาหมายเลขงานที่ขาดหายไป

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

  |    A
--+---------
1 | testNum
2 | 1
3 | 2
4 | 3
5 | ...

สมมติว่ามีกรณีทดสอบมากเกินไปที่จะทำการค้นหานี้ด้วยตนเอง เนื่องจากฉันมีชุดข้อมูลอื่นที่ใกล้เคียงกับรายการมากกว่าล้านรายการที่ฉันจะต้องทำงานคล้าย ๆ

ฉันสามารถแก้ปัญหานี้ด้วย VBA ได้ แต่สงสัยว่าจะมีวิธีแก้ปัญหาที่ตรงไปตรงมามากกว่านี้หรือไม่


IMO, VBA คือ วิธีการตรงไปข้างหน้า คุณไม่มีกล่องโต้ตอบ 10 กล่องและคลิก 5 ช่องทำเครื่องหมายเพื่อให้เสร็จ เพียงพิมพ์
surfasb

สูตรก็ใช้ได้เช่นกันโดยไม่ต้องคลิก ดูคำตอบของฉันด้านล่าง
kopischke

คำตอบ:


5

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

=IFERROR(
   SMALL(
     IF(
       ISNA(MATCH(ROW(A1:A66000)-1,A2:A66001,0)),
       ROW(A1:A66000)-1,
     ""),
   ROW()-1),
 "")

- โปรดสังเกตว่าต้องเขียนในบรรทัดเดียว ; การเยื้องเป็นเพียงเพื่อประโยชน์ในการอ่านที่นี่ เก็บเป็นสูตรอาเรย์โดยการกด Ctrl + Shift + Enter . หากคุณทำอย่างถูกต้องสูตรจะแสดงอยู่ในเครื่องหมายปีกกาและ Excel จะบ่นเมื่อคุณพยายามแก้ไขเซลล์เดียวในช่วงอาร์เรย์

สำหรับค่าในคอลัมน์ A ของภาพหน้าจอด้านล่างสูตรที่จัดเก็บเป็นสูตรอาร์เรย์ B2:B21 (20 แถวเพราะลำดับที่สมบูรณ์จะเป็น 1 ถึง 20) จะส่งคืนค่าต่อไปนี้ในคอลัมน์ B:

Screenshot of the formulaic listing of missing values in a sequence

อย่างที่คุณเห็นตัวเลขเหล่านี้เป็นตัวเลขที่ขาดหายไปในลำดับ (เน้นในภาพหน้าจอ)


  1. คุณสามารถทำผิดในด้านใจกว้างเมื่อเลือกช่วงที่จะใช้ตราบใดที่ ROW(A1:AXXXXX) การอ้างอิงมีจำนวนแถวเท่ากับลำดับทั้งหมดของคุณ (66000 แถวในตัวอย่างของคุณ) A1:A66000 )

ใช้งานได้ +1 และทำเครื่องหมาย อย่างไรก็ตาม คำเตือนสำหรับทุกคนที่พยายามใช้สิ่งนี้ การคำนวณคือ มาก ช้าชุดข้อมูลขนาด 66000 ของฉันเรากำลังพูดถึงหลายอย่าง นาที สำหรับสี่เซลล์ของสูตรอาร์เรย์เพื่อกลับมาหาฉันหมายเลขกรณีทดสอบที่ขาดหายไปสามรายการของฉัน ถึงกระนั้นฉันก็ควรจะวางสูตรและไปตรวจสอบอีเมลของฉัน ฯลฯ ในขณะที่ Excel จะทำซีพียูแกนเดียวสักสองสามนาทีแทนที่จะทำด้วยมือ Win!. นอกจากนี้คุณยังสามารถทำสิ่งนี้ได้ครั้งละเซลล์แทนที่จะทำผ่านช่วงกว้าง ด้วยความเร็วที่ช้าฉันอาจแนะนำวิธีนี้
DMA57361

ใช่ประสิทธิภาพของสูตรอาร์เรย์เป็นสุดยอดในชุดข้อมูลขนาดใหญ่ การเห็นสิ่งนี้เป็นการดำเนินการครั้งเดียวแล้วเสร็จ แต่ฉันคิดว่าน่าจะยอมรับได้
kopischke

3

ในคอลัมน์ว่าง (ให้ถือว่า Z ) เริ่มต้นที่แถว 2 ใส่สูตรและคัดลอกลงสำหรับแถวที่ใช้ทั้งหมด

=A2=A1+1

ค้นหาในคอลัมน์ Z สำหรับ FALSE. จะพบการทดสอบแถวหลังจากหมายเลขหายไป

นอกจากนี้คุณสามารถลอง

= IF (A2 = A1 + 1, "", A1 + 1)


สิ่งนี้จะกลับมา FALSE สำหรับทุกแถว
kopischke

@ kopischke ขอบคุณมากฉันพิมพ์ข้อความเร็ว
chris neilsen

2

วิธีนี้ต้องใช้ผู้ช่วยสองคอลัมน์ ในคอลัมน์ B ให้กรอกตัวเลขติดต่อกันตั้งแต่ 1 ถึง 66,000 ใน C2 (ในแถวข้อมูลแรก) ให้ป้อน

=IF(A2=B2,0,1)

ใน C3 ให้ป้อน

=IF(B3=OFFSET(A3,-1*SUM(C$2:C2),0),0,1)

เติม C3 ถึง C66001

จากที่นี่คุณสามารถกรอง B: C เป็นบันทึกที่มีค่า 1 ในคอลัมน์ C ซึ่งจะแสดงตัวเลขที่ขาด

หรือ

หากคุณต้องการจินตนาการในขั้นตอนสุดท้ายคุณสามารถใช้สูตรอาร์เรย์นี้และเติมลงไปได้ตามต้องการ:

=IFERROR(SMALL(IF($C$2:C$32<>0,$B$2:$B$32),ROW()-1),"")

ป้อนสูตรด้วย Ctrl + Shift + Enter ตัวอย่างนี้ถูกป้อนในแถว 2 คุณจะต้องปรับ ROW()-1 ในสูตรเช่นนี้เท่ากับ 1 สำหรับรายการแรก ตัวอย่างเช่นหากคุณเริ่มรายการหมายเลขที่หายไปที่ E5 คุณจะต้องเปลี่ยนเป็น ROW()-4. [ขอบคุณ @kopischke สำหรับวิธีนี้: ลิงค์ ]


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

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