วิธีตั้งค่าสถานะแถวด้วยรูปแบบที่ไม่ว่างเปล่าว่างเปล่าและไม่ว่างเปล่าโดยใช้ Excel


2

ฉันต้องการความช่วยเหลือจากบางสิ่งที่ฉันพยายามคิดมาตลอดสองวันที่ผ่านมา

ฉันมีข้อมูลที่มี 1,000 แถวและหลายคอลัมน์ ฉันต้องการแทรกคอลัมน์ด้วยสูตร (อาร์เรย์) ที่ตั้งค่าสถานะแถวทั้งหมดที่มี "หลุม"; นั่นคือแถวใด ๆ ที่มีคอลัมน์ว่างตั้งแต่หนึ่งคอลัมน์ขึ้นไปในระหว่างคอลัมน์ที่ไม่ใช่ช่องว่างเช่นตัวอย่างเหล่านี้:

ป้อนคำอธิบายรูปภาพที่นี่

ชุดข้อมูลจริงของฉันมีได้ระหว่าง 3 และ 7 คอลัมน์ สำหรับตัวอย่างด้านบน (4 คอลัมน์) ฉันลองสูตรต่อไปนี้:

IF(OR(AND(SUM(B13:C13)=0,COUNT(A13,D13)>1),AND(B13=0,COUNT(A13,C13)>1),AND(C13=0,COUNT(B13,D13)>1)),"Issue","OK") 

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


ยินดีต้อนรับสู่ Super User เราไม่ใช่บริการเขียนสคริปต์ เราคาดว่าผู้ใช้จะบอกเราถึงสิ่งที่พวกเขาได้ลองมาแล้ว (รวมถึงสคริปต์ที่ใช้) และที่ติดขัดเพื่อให้เราสามารถช่วยแก้ไขปัญหาเฉพาะได้ คำถามที่ว่ามีเพียงขอสคริปต์กว้างเกินไปและมีแนวโน้มที่จะวางไว้หรือปิด โปรดอ่านฉันจะถามคำถามที่ดีได้อย่างไร .
DavidPostill

ขอโทษด้วย. ฉันแก้ไขโพสต์ของฉัน
daniellopez46

คุณจะนับสถานการณ์เหล่านี้ได้อย่างไร: 1) FY12 และ FY13 ว่างเปล่า แต่ค่าสำหรับ FY14 และ FY15 (หรือรูปแบบย้อนกลับ) 2) ค่าในหนึ่งปีบัญชีเท่านั้น (อาจเป็นสถานการณ์ที่มีคอลัมน์น้อยลงหากไม่ได้อยู่ที่นี่)
fixer1234

@ fixer1234 คำถามยอดเยี่ยม 1) สิ่งนี้จะไม่ถูกนับ 2) สามารถใช้มูลค่าในหนึ่งปีบัญชีได้เท่านั้น กรณีนั้นจะไม่ถูกตั้งค่าสถานะ
daniellopez46

ดังนั้นสถานการณ์แรกก็จะไม่ถูกตั้งค่าสถานะ?
fixer1234

คำตอบ:


1

นี่คือทางออกทั่วไป ฉันวางตำแหน่งไว้ที่กึ่งกลางของแผ่นงานเพื่อแสดงการจัดการคอลัมน์ว่างก่อนหรือหลังช่วง

ภาพหน้าจอ

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

แทนที่จะป้อนข้อมูลของคุณอีกครั้งฉันใช้สี่คอลัมน์ (C ถึง F) ของตัวเลข 1 ถึง 4 โดยมีรูปแบบองค์ประกอบที่ขาดหายไปแตกต่างกันในแถวเพื่อตรวจสอบเงื่อนไขต่างๆ

ป้อนข้อมูล

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

ระบุคอลัมน์ที่มีประชากรแรก

สำหรับแต่ละแถวคุณจะต้องค้นหาค่าจริงและค่าสุดท้ายเนื่องจาก "หลุม" จะถูกนับระหว่างค่าเหล่านั้นเท่านั้น ฉันใช้คอลัมน์ H เพื่อระบุคอลัมน์แรกด้วยค่าในแถว ฉันเริ่มข้อมูลในแถว 3 ดังนั้น H3 จึงมี:

=MATCH(TRUE,LEN(C3:F3)>0,0)+COLUMN(INDIRECT($I$1&":"&$I$1))-1

แก้ไข: โปรดทราบว่าผมทดสอบนี้เป็น LO Calc 1ซึ่งการเปลี่ยนแปลงที่แท้จริงในสูตรนี้ ใน Calc สูตรนี้จะกลายเป็น:

=MATCH(1,LEN(C3:F3)>0,0)+COLUMN(INDIRECT($I$1&":"&$I$1))-1

ซึ่งเป็นสูตรดั้งเดิมในคำตอบนี้และปรากฎว่าการ1ย่อยให้ Excel สำหรับ Excel คุณจะต้องมีสูตรแรก

นี้เป็นสูตรอาร์เรย์ดังนั้นจึงต้องมีการป้อนโดยใช้Ctrl+ + ShiftEnter

การฝังฟังก์ชัน INDIRECT ภายในฟังก์ชั่น LEN นั้นใช้งานไม่ได้ คุณจะต้องแก้ไขช่วงคอลัมน์ถ้าคุณใช้จำนวนคอลัมน์ที่แตกต่างกัน

ฟังก์ชัน COLUMN และ-1ปรับสำหรับตำแหน่งเริ่มต้นของช่วง

จำนวนของค่าถ้าไม่มีรู

คอลัมน์ I คือจำนวนคอลัมน์ตั้งแต่ค่าแรกไปจนถึงค่าสุดท้าย (จำนวนค่าที่เป็นไปได้หากไม่มีรู) เซลล์ I3 ประกอบด้วย:

=LOOKUP(9.99E+307,INDIRECT($I$1&ROW()&":"&$K$1&ROW()))+COLUMN(INDIRECT($I$1&":"&$I$1))-H3

ฟังก์ชัน LOOKUP ระบุคอลัมน์สุดท้ายที่มีค่า อีกครั้งจะเพิ่มการปรับตำแหน่งของช่วงข้อมูลบนแผ่นงาน มันจะลบจำนวนคอลัมน์ที่มีประชากรแรกจากคอลัมน์สุดท้าย

จำนวนของค่าที่เติม

คอลัมน์ J ประกอบด้วยจำนวนของค่าในช่วงที่มีประชากร เซลล์ J3 ประกอบด้วย:

=COUNT(INDIRECT($I$1&ROW()&":"&$K$1&ROW()))

สิ่งนี้จะให้สิ่งที่คุณต้องการเพื่อระบุรูของคุณ

ระบุแถวที่มีรู

ผลลัพธ์ที่ต้องการคือสิ่งที่อยู่ในคอลัมน์ G เซลล์ G3 ประกอบด้วย:

=IF(I3>J3,"hole","")

แก้ไข: ฉันได้รวบรวมและได้รับในสูตรเดียว คุณสามารถใช้สิ่งนี้ในเซลล์ G3:

=LOOKUP(9.99E+307,INDIRECT($I$1&ROW()&":"&$K$1&ROW()))
 +COLUMN(INDIRECT($I$1&":"&$I$1))-MATCH(TRUE,LEN(C3:F3)>0,0)
 -COLUMN(INDIRECT($I$1&":"&$I$1))+1
 >COUNT(INDIRECT($I$1&ROW()&":"&$K$1&ROW()))

ฉันได้เพิ่มตัวแบ่งบรรทัดเพื่อให้สามารถอ่านได้ คุณต้องการคัดลอกและวางคุณจะต้องลบสิ่งเหล่านั้นและระยะห่างเพิ่มเติม

นี้เป็นสูตรอาร์เรย์ดังนั้นคุณจำเป็นต้องใส่มันด้วยCtrl+ +Shift Enterผลลัพธ์ที่ได้เป็นเพียง TRUE หรือ FALSE ว่ามีรูหรือไม่:

ภาพหน้าจอ


นี่คือการตอบสนองที่ดีและใช้ได้กับตัวอย่างที่ฉันแสดง คุณมีรุ่นที่สามารถใช้กับตัวเลขหรือข้อความได้หรือไม่? ไม่เป็นคำตอบที่ใช้ได้เนื่องจากฉันเพิ่งอัปเดตโพสต์ของฉัน BTW ขอโทษที่ลืมที่จะตอบก่อนหน้านี้
daniellopez46

@ daniellopez46: ฉันไม่ได้บันทึกสเปรดชีต แต่ดูสูตรสั้น ๆ ในคำตอบนี้ฉันคิดว่ามันจะใช้ได้กับข้อความด้วย หากคุณทำซ้ำให้ลองแทนที่แถวด้วยค่าข้อความและดูว่าเกิดอะไรขึ้น หากใช้งานได้แสดงว่าคุณมีทางออกที่ครอบคลุมคำถามที่ขยายเพิ่มเติมของคุณ (และคุณสามารถลองตอบรับได้) หากไม่สามารถใช้งานได้จะต้องมีโซลูชันใหม่ โดยทั่วไปหากคุณแก้ไขคำถามเพื่อให้คำตอบที่มีอยู่จะไม่เป็นโซลูชัน (สมบูรณ์) อีกต่อไปคุณควรโพสต์คำถามใหม่ (ซึ่งจะดึงดูดผู้อ่านใหม่ ๆ )
fixer1234

1

ฉันมากับสูตรใหม่ที่ใช้งานได้ดีกว่าสูตรดั้งเดิมที่ฉันใช้ นี่คือสูตรใหม่:

SUMPRODUCT(--NOT(ISBLANK(OFFSET(B2:E2,0,1))),--ISBLANK(B2:E2),--NOT(ISBLANK(OFFSET(B2:E2,0,-1))))+SUMPRODUCT(--(SUM(C2:D2)=0),--(SUM(B2,E2)>0))

ป้อนคำอธิบายรูปภาพที่นี่

ฉันรู้สึกมั่นใจมากขึ้นว่าจะเลือกรูปแบบที่ไม่ว่างเปล่า {, ว่างเปล่า}, แบบไม่ว่างเปล่าทั้งหมดเมื่อใช้ 4 คอลัมน์ แต่นี่คือสองประเด็นหลัก:

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

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

ฉันกำลังแบ่งปันโซลูชันนี้ด้วยความหวังว่าจะจูงใจผู้อื่นให้มาพร้อมกับโซลูชันที่เหมาะสมยิ่งขึ้น

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