Excel - วิธีค้นหาสตริงไวด์การ์ดจากรายการขนาดใหญ่

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

ตัวอย่างเช่น

1    Bag
1    Catsgsg
1    Dogs
1    oygg
2    Stackoverflow
2    tacks
2    Binoculars
2    all
.
.
.
1000   Bonobos
1000   Canopy
1000   Ascot

หากผู้ใช้ป้อนตัวเลข 1,000 ฉันจะดึงคำว่า bonobos ได้อย่างไรโดยรู้ว่ามีคำ b แต่ไม่ใช่คำจริง ฉันจะแก้ไขสูตรอาร์เรย์ให้ทำงานกับไวด์การ์ดได้อย่างไร

=INDEX(Partners!$D$2:$D$2227,MATCH(1,(Partners!$A$2:$A$2227=number)*(Partners!$C$2:$C$2227="b *"),0))

แก้ไข: ฉันสามารถปรับแต่งโซลูชันของ callum และมีบัญชีสูตรสำหรับสตริงไวด์การ์ดหลายรายการ

=INDEX(Partners!$D$2:$D$2227,MATCH(1,IFERROR(SEARCH(num&"A*",Partners!$A$2:$A$2227&Partners!$D$2:$D$2227),0)+IFERROR(SEARCH(num&"B*",Partners!$A$2:$A$2227&Partners!$D$2:$D$2227),0)+IFERROR(SEARCH(num&"C*",Partners!$A$2:$A$2227&Partners!$D$2:$D$2227),0),0))

person lostinOracle    schedule 28.03.2017    source แหล่งที่มา


คำตอบ (2)


เฉพาะฟังก์ชันเฉพาะที่ยอมรับไวด์การ์ด ดังนั้นคุณจะต้องใช้หนึ่งในนั้นหากคุณต้องการใช้ไวด์การ์ด * SEARCH คือตัวอย่างหนึ่ง:

=INDEX(Partners!$D$2:$D$2227,MATCH(1,IFERROR(SEARCH(number&"b*",Partners!$A$2:$A$2227&Partners!$B$2:$B$2227),0),0))

หรือคุณสามารถหลีกเลี่ยงไวด์การ์ดได้เลย:

=INDEX(Partners!$D$2:$D$2227,MATCH(number&"b",Partners!$A$2:$A$2227&LEFT(Partners!$B$2:$B$2227,1),0))


ป้อนทั้งคู่เป็นสูตรอาร์เรย์ (Ctrl+Shift+Enter)

person CallumDA    schedule 28.03.2017
comment
ขอบคุณ callum ตรงกับสิ่งที่ฉันกำลังมองหา - person lostinOracle; 28.03.2017
comment
เป็นไปได้ไหมที่จะค้นหาอาร์เรย์ของไวด์การ์ด? ตัวอย่างเช่น หากคุณต้องการคำใดๆ ที่ขึ้นต้นด้วย a b, c หรือ d... คุณสามารถค้นหา(number&{b*, c*, d*},......) - person lostinOracle; 28.03.2017
comment
สวัสดี @ excelmonkey93 ยินดีที่ได้ช่วยเหลือ น่าเสียดายที่ฟังก์ชันการค้นหาไม่สามารถทำได้ แต่อาจทำได้โดยใช้สูตรที่ซับซ้อนอื่นๆ ฉันอาจจะประหยัดเวลาและมีสูตรแยกกันสำหรับค่าการค้นหาแต่ละค่า b,c,... ฯลฯ - person CallumDA; 28.03.2017
comment
ขอบคุณ ฉันสามารถคิดออกได้ แก้ไขโพสต์พร้อมวิธีแก้ปัญหา - person lostinOracle; 28.03.2017

พยายาม,

=INDEX(B:B, AGGREGATE(15, 6, ROW(A$1:INDEX(A:A, MATCH(1E+99, A:A)))/((A$1:INDEX(A:A, MATCH(1E+99, A:A))=E6)*(LEFT(B$1:INDEX(B:B, MATCH(1E+99, A:A)), 1)=F6)), 1))

ในภาพตัวอย่างที่ให้มาต่อไปนี้ ฉันได้เปลี่ยน B ของคุณเป็น C เพื่อแสดงให้เห็นว่าสูตรไม่ได้เพียงแค่ส่งคืน 1000 แรกเท่านั้น พบ.

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

person Community    schedule 28.03.2017