Microsoft Excel Formula ใช้ตารางเพื่อจำแนกข้อมูลต่อแถว


1

ฉันมีสองแผ่นในเอกสาร Excel ที่ฉันพยายามจะเปรียบเทียบ ฉันมีรายการรหัสพื้นที่ในแผ่นงาน 1 คอลัมน์ B ในแผ่นที่ 2 ฉันมีรายการรหัสพื้นที่ทั้งหมดในคอลัมน์ A ถึง D โดยมีส่วนหัว "Eastern, Central, Mountain, Pacific" ในแถวแรกของแต่ละคอลัมน์ตาม โดยรหัสพื้นที่ทั้งหมดในแต่ละโซน

สิ่งที่ฉันต้องการทำคือจำแนกรหัสพื้นที่แต่ละรายการในแผ่นที่ 1 ในคอลัมน์ C ตามเขตเวลาที่สอดคล้องกันในแผ่นที่ 2

ฉันจะทำสิ่งนี้ได้อย่างไร

นี่คือภาพหน้าจอของตารางพื้นฐานที่ฉันมี

แผ่น 1:
แผ่นที่ 1

แผ่นงาน 2:
แผ่นงาน 2


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

ฉันค้นหาทุกสูตรทางเว็บเพื่อหา แต่สูตรที่ฉันพบมาจากปี 2006 และใช้งานไม่ได้ @raystafarian
jimmydoesitright

คำตอบ:


1

ต่อไปนี้เป็นวิธีดำเนินการกับข้อมูลของคุณตามที่คุณมีในขณะนี้ สูตรนี้มีอยู่C2ใน Sheet1 ของคุณ:

=IF(ISNA(MATCH(B2,Sheet2!$A$1:$A$40,0)),IF(ISNA(MATCH(B2,Sheet2!$B$1:$B$40,0)),IF(ISNA(MATCH(B2,Sheet2!$C$1:$C$40,0)),IF(ISNA(MATCH(B2,Sheet2!$D$1:$D$40,0)),"Not Found","Pacific"),"Mountain"),"Central"),"Eastern")

มันน่าเกลียด แต่มันได้ผล คุณอาจต้องปรับการอ้างอิงสัมบูรณ์สี่รายการไปยัง Sheet2 (เช่นSheet2!$A$1:$A$40) หากข้อมูลของคุณในแผ่นงานนั้นผ่านแถวที่ 40

สูตรสุดท้ายประกอบด้วยการใช้ฟังก์ชัน MATCH สี่รายการโดยแต่ละรายการจะค้นหาเพียงหนึ่งคอลัมน์ของรหัสพื้นที่

นี่คือวิธีที่ฉันสร้างสูตร

ฉันใช้ฟังก์ชั่น MATCH MATCH สามารถค้นหาค่าคอลัมน์เดียวเท่านั้น ก่อนอื่นฉันสร้างสูตร MATCH สี่รายการแยกกัน แต่ละค้นหาคอลัมน์ในเขตเวลาหนึ่งคอลัมน์เท่านั้น ตัวอย่างเช่นในการค้นหาคอลัมน์ "ตะวันออก" สำหรับค่า (รหัสพื้นที่) ที่พบในเซลล์B2:

=MATCH(B2,Sheet2!$A$1:$A$40,0)

หากB2มี201จะส่งคืน2เนื่องจาก 201 เป็นรายการที่ 2 ในคอลัมน์ แต่ถ้าB2มี205ผลตอบแทน#N/Aนี้ เราจับได้โดยการห่อสูตรด้วยสูตร ISNA:

=IF(ISNA(MATCH(B2,Sheet2!$A$1:$A$40,0)),"no_next_formula","Eastern")

ISNA ทดสอบว่าสูตร MATCH จะส่งคืน#N/Aหรือไม่ ถ้าใช่ / จริงมันจะส่งกลับ "no_next_formula" ถ้าไม่ใช่ / เท็จมันจะส่งกลับ "ตะวันออก" เพราะ MATCH พบรหัสพื้นที่ของเราในคอลัมน์รหัสพื้นที่ตะวันออก

เราสามารถสร้างสี่สูตรเหล่านี้เปลี่ยนช่วงที่อ้างอิงใน Sheet2 อย่างเหมาะสมเพื่อค้นหารหัสพื้นที่อีกสามรหัส ตัวอย่างแผ่นงานอาจมีลักษณะเช่นนี้:

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

ตอนนี้เพื่อรวมเหล่านี้เป็นสูตรเดียวที่แสดงด้านบนฉันคัดลอกสูตรทั้งหมดในคอลัมน์ F ของฉัน ( =เครื่องหมายน้อยลง) และแทนที่ข้อความ"no_next_formula"ในสูตรของคอลัมน์ E

สูตรใน F2:

=IF(ISNA(MATCH(B2,Sheet2!$D$1:$D$40,0)),"Not Found","Pacific")

สูตรใน E2 (ก่อนหน้า):

=IF(ISNA(MATCH(B2,Sheet2!$C$1:$C$40,0)),"no_next_formula","Mountain")

สูตรใน E2 (หลังจากแทรกสูตรจาก F2):

=IF(ISNA(MATCH(B2,Sheet2!$C$1:$C$40,0)),IF(ISNA(MATCH(B2,Sheet2!$D$1:$D$40,0)),"Not Found","Pacific"),"Mountain")

จากนั้นฉันทำขั้นตอนเหล่านี้ซ้ำโดยคัดลอกสูตรทันทีE2เพื่อแทนที่ข้อความ"no_next_formula"ในD2สูตรของ เมื่อเสร็จแล้วสำหรับสูตรในC2เรามีสูตรสมบูรณ์แสดงไว้ด้านบน


1

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

=SUM(COLUMN(Sheet2!A$2:D$99)*(Sheet2!A$2:D$99=B2))

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

1*(Sheet2!A2=Sheet1!B2)   2*(Sheet2!B2=Sheet1!B2)   3*(Sheet2!C2=Sheet1!B2)   4*(Sheet2!D2=Sheet1!B2)
1*(Sheet2!A3=Sheet1!B2)   2*(Sheet2!B3=Sheet1!B2)   3*(Sheet2!C3=Sheet1!B2)   4*(Sheet2!D3=Sheet1!B2)
1*(Sheet2!A4=Sheet1!B2)   2*(Sheet2!B4=Sheet1!B2)   3*(Sheet2!C4=Sheet1!B2)   4*(Sheet2!D4=Sheet1!B2)
            ︙                        ︙                        ︙                        ︙

ตัวอย่างเช่นถ้าSheet1!B2เป็น 303 นี่จะกลายเป็น

1*(201=303)               2*(205=303)               3*(208=303)               4*(206=303)
1*(202=303)               2*(210=303)               3*(303=303)               4*(209=303)
1*(203=303)               2*(214=303)               3*(307=303)               4*(213=303)
      ︙                        ︙                        ︙                        ︙

กล่าวคือ

1 * FALSE 2 * FALSE 3 * FALSE 4 * FALSE
1 * FALSE 2 * FALSE 3 * TRUE                     4 * FALSE
1 * FALSE 2 * FALSE 3 * FALSE 4 * FALSE
   ︙︙︙︙

เนื่องจาก TRUE เป็น 1 และ FALSE เป็น 0 จึงเป็นการลด

   0 0 0 0
   0 0 →    3    ← 0
   0 0 0 0
︙︙︙︙︙

และแน่นอนSUMจำนวนนั้นคือ 3 ซึ่งเป็นจำนวนคอลัมน์ที่พบ 303

หากคุณแน่ใจว่ารหัสพื้นที่ทุกรายการในแผ่นงาน 1 มีคอลัมน์B อยู่ในแผ่นงาน 2 คุณสามารถรับชื่อเขตเวลาได้ง่ายๆโดยเสียบหมายเลขคอลัมน์ลงในINDEXฟังก์ชัน:

=INDEX(Sheet2!A$1:D$1, 1, SUM(COLUMN(Sheet2!A$2:D$99)*(Sheet2!A$2:D$99=B2)))

(อย่าลืมใช้Ctrl+ Shift+ Enter) แต่ถ้าคุณมีรหัสพื้นที่ในชีต 1 ที่ไม่มีอยู่ในชีต 2 ก็จะเป็น FALSE สำหรับทุกเซลล์ดังนั้นอาร์เรย์เสมือนคือศูนย์ทั้งหมดทั้งหมดคือ 0 และอาจส่งคืนบางอย่าง หลอกตา หากต้องการจัดการนั้นให้ตั้งค่าเป็นSheet2!whatever=B2SUMINDEXZ2

=SUM(COLUMN(Sheet2!A$2:D$99)*(Sheet2!A$2:D$99=B2))

(อย่าลืมใช้Ctrl+ Shift+ Enter) และตั้งC2เป็น

=IF(Z2=0, "Not Found", INDEX(Sheet2!A$1:D$1, 1, Z2))

คำตอบที่สง่างาม! คุณช่วยอธิบายเพิ่มเติมเล็กน้อยว่าสูตรในการZ2ตรวจสอบกรณีที่ไม่พบรหัสพื้นที่ใน Sheet2 ได้อย่างไร นอกจากนี้ในสูตรตามวรรคถ้าคุณแน่ใจว่าทุกรหัสพื้นที่ในแผ่นงาน 1 คอลัมน์ B ... คุณหมายถึงการอ้างอิง Sheet2 แทน Sheet5 หรือไม่
ตัวปลอมตัว Twisty

@ Twisty: ขอบคุณ และใช่ฉันหมายถึงการอ้างอิง Sheet2 แทน Sheet5 (D'oh!)
สกอตต์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.