จัดทำดัชนีและจับคู่กับหลายคอลัมน์


0

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

ฉันใช้โซลูชันต่อไปนี้เพื่อให้ตรงกับเกณฑ์แรก

=INDEX(CompanyName,MATCH(1,MMULT(--(Attendee=G4),TRANSPOSE(COLUMN(Attendee)^0)),0))

แต่นั่นหมายความว่าฉันต้องพิมพ์ชื่อผู้ใช้ก่อนจึงจะสามารถจับคู่ บริษัท ได้

และ

=INDEX(Attendee,MATCH(0,COUNTIF($G$4:I4,list),0))

ให้ชื่อผู้ใช้ในรายการแนวนอน .... แต่ฉันต้องการให้แสดงรายการในรูปแบบแนวตั้ง

ecompany name, user1, user2, user3, user4, user5, user6, user7
company1, bob, sue, dave, , ,john, mary
company2, dave, barry, steve, dan, , , pete

ฉันต้องการให้ข้อมูลปรากฏในสองคอลัมน์เพื่อรวมการส่งจดหมาย

Company Name, User
company1, bob
company1, sue
company1, dave
company1, john
company1, mary
company2, dave
company2, dave
company2, barry
company2, steve
company2, dan
company2, pete

ฉันหวังว่านี่จะสมเหตุสมผล

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

นี่คือผลลัพธ์ที่กำลังมองหาในตัวอย่าง น่าเสียดายที่มันต้องการชื่อในคอลัมน์แรกที่เติมไว้ก่อนที่จะจับคู่กับผู้ใช้

ตัวอย่างผลลัพธ์:

ตัวอย่างผลลัพธ์


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

1
ฉันได้เพิ่มข้อมูลที่ร้องขอ
user88572

ฉันยังได้เพิ่มรูปภาพของแผ่นงานปัจจุบันของฉัน
user88572

1
เย็น. ฉันขีดเส้นให้คุณ ฉันไม่คิดว่าผู้ใช้ใหม่สามารถทำได้ด้วยตนเอง
Tetsujin

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

คำตอบ:


0

ตกลง. นี่ยังคงเป็น 'ใบ้' แต่ต้องการเพียงขั้นตอนง่าย ๆ เพียงคู่มือเดียวและตรงตามข้อกำหนดจริง ๆ แล้วมันจะแสดงผลลัพธ์ของคุณในสองคอลัมน์ตามที่ร้องขอ

ข้อมูล: ข้อมูล

ขั้นตอนที่ 1:

ฉันกำหนดช่วงที่มีชื่อ บริษัท F2: F99 และชื่อ L2: AB99

ขั้นตอนที่ 2:

นี่คือผลลัพธ์ของคุณ: เอาท์พุท

ด้วยสูตรในคอลัมน์ B:

=INDEX(NAMES,ROUNDUP((ROW()-1)/17,0),MOD(ROW()-2,17)+1)

มันเป็นเพียงสูตร nth-column / ทุกแถว n ที่มี n ตั้งค่าด้วยตนเองเป็น 17 (คุณสามารถเปลี่ยนค่าฮาร์ดโค้ดหรือแทนที่ด้วยฟังก์ชัน count หรือการอ้างอิงเซลล์ไปยังฟังก์ชัน count ในแผ่นข้อมูลของคุณ ฯลฯ ได้อย่างง่ายดาย ตามความจำเป็น). มันจะต้องเริ่มต้นในแถวที่สอง (ดังแสดงในตัวอย่าง) มิฉะนั้นROW()จะต้องทำการปรับออฟเซ็ตของการโทร แต่วางไว้บนแผ่นงานใหม่ในเซลล์B2สูตรนี้จะคัดลอกและอ่านคอลัมน์ 17 คอลัมน์แรกของแถวแรกของช่วงชื่อที่มีชื่อว่า NAMES จากนั้นคอลัมน์ 17 คอลัมน์แรกของแถวที่สองเป็นต้น

ขั้นตอนที่ 3:

ฉันเขียนA2ด้วยสูตรครึ่งสูตรที่เหมือนกันเพื่อรับแถวแรกของช่วงที่มีชื่อ 17 ครั้งจากนั้นแถวที่สอง ฯลฯ :

=INDEX(COMPANIES,ROUNDUP((ROW()-1)/17,0))

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

ขั้นตอนที่ 4:

นี่คือส่วนที่เป็นใบ้ ... นำเอาท์พุทชีทของคุณเลือกทั้งหมดคัดลอกวางค่ากรองลบแถวด้วย 0 ในคอลัมน์ B ลบตัวกรองจัดเรียงใหม่บ็อบเป็นลุงของคุณ

ป.ล.

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


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

0

คุณสามารถขนย้าย

ดังนั้นถ้าฉันเข้าใจสิ่งนี้ถูกต้องเมื่อคุณวางค่าการวางในเส้นแนวนอน

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


ฉันแก้ไขรายการของฉันในตัวอย่างเพื่อให้ชัดเจนขึ้น ... การเปลี่ยนตำแหน่งจะทำงานครั้งละ 1 แถวเท่านั้น
user88572

0

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

screenie

สิ่งนี้จะถือว่าคุณมีจำนวนผู้เข้าร่วมสูงสุด (และเป็นที่รู้จัก) สูงสุด ภาพหน้าจอของคุณแสดง 6

สูตรสำหรับมุมซ้ายบนของช่วงเซลล์ปลายทางของคุณคือ:

=IF(ISBLANK(L2),"",CONCATENATE($E2,", ",L2))

สูตรนั้นคัดลอก / ลากเพื่อสร้างผลลัพธ์ตามที่แสดง

จากนั้นไปจะเป็นการคัดลอกบล็อกเอาต์พุตทั้งหมด (L8: Q12 ในแผ่นตัวอย่างของฉันตามที่แสดง) วางค่าและย้ายคอลัมน์ผลลัพธ์ด้วยตนเอง 2 ถึง 6 ใต้คอลัมน์ 1 ด้วยตนเอง (ในแผ่นตัวอย่างของฉันเลือก M8: M12, ตัด และวางลงใน L13 เป็นต้น) จากนั้นเรียงลำดับตัวอักษรเพื่อส่งข้อมูลว่างเปล่าและคุณมีรายการ MM


ฉันไม่รู้ นี่จะเป็นเรื่องไม่สำคัญอย่างยิ่งใน VB ซึ่งฉันแทบจะไม่เพียงพอ นั่นอาจเป็นทิศทางของคุณ แต่ไม่ใช่สิ่งที่ฉันมีคุณสมบัติที่จะให้คำแนะนำ (ดี) กับ
Alex M

เฮ้ขอบคุณฉันคิดอย่างนั้น แต่จะมีชื่อหลายร้อยชื่อ ดังนั้นการคัดลอกด้วยตนเองจะไม่ทำงาน จำนวนคนสูงสุดในรายการของฉันต่อ บริษัท จะเท่ากับ 17 ตอนนี้ฉันสามารถจัดเรียงตาม บริษัท และแสดงชื่อในรายการที่อบครึ่ง ... แต่นั่นบังคับให้คอลัมน์ว่างในเช่นกันและไม่ทำงานตามที่ฉันต้องการ จดหมายเวียนด้วย M $ WORD สิ่งที่ฉันเป็นจริงๆคือ 2 คอลัมน์ชื่อ บริษัท & ผู้ใช้ที่เพิ่มชื่อ บริษัท หากพบว่าผู้ใช้เขียนผู้ใช้ในคอลัมน์ผู้ใช้ หากพบชื่อผู้ใช้อื่นใน บริษัท เดียวกันให้ไปที่บรรทัดถัดไป .. เพิ่มผู้ใช้หากพบซ้ำ
user88572

ฉันพลาดข้อกำหนดทั้งสองคอลัมน์ ฉันไม่คุ้นเคยกับโปรโตคอลของชุมชนนี้ ฉันกำลังเขียนคำตอบใหม่เนื่องจากคนนี้ไม่มีประโยชน์
Alex M

ฉันเขียนคำตอบใหม่ที่ดีกว่าคำตอบนี้ ฉันไม่รู้ว่านั่นหมายความว่าฉันควรจะลบอันนี้ (แต่จะเกิดอะไรขึ้นกับความเห็นที่ชัดเจนของคุณ) หรืออะไรฉันก็แค่ทิ้งไว้ คุณสามารถลงคะแนนโหวตหนึ่งนี้และโหวตขึ้นอีกคนหนึ่งหรือบางสิ่งบางอย่าง? มีผู้ดูแลอยู่แถวนี้หรือไม่? ฉันไม่รู้ อย่างไรก็ตามอ่านคำตอบอื่น ๆ ฉันค่อนข้างแน่ใจว่ามันแก้ปัญหาของคุณด้วยแทบไม่มีการใช้แรงงาน
Alex M
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.