Regex F&R ขั้นสูง - แผ่น / Excel - ถ้า“ X” อยู่ในเซลล์ A1 และเพิ่ม“ Y” ลงในเซลล์ B1


1

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

ตัวอย่างเช่นฉันมีรายการค่าใช้จ่ายที่ระบุไว้ในCol Aโดยผู้ขาย:

  • Nandos
  • Uber
  • McDonalds
  • PureGym

ฉันต้องการจัดหมวดหมู่เหล่านี้ในCol B :

[ Find "Nandos|McD " in ColA and write "Food" in the equivalent cell in ColB ]

[ Find "Uber" in ColA and write "Travel" in the equivalent cell in ColB ]

[ Find "PureGym" in ColA and write "Gym" in the equivalent cell in ColB ]

ดังนั้นฉันจบลงด้วย:

  • Nandos - อาหาร
  • Uber - ท่องเที่ยว
  • McDonalds - อาหาร
  • PureGym - ยิม

วิธีทั่วไปในการทำเช่นนี้คือการสร้างตารางการค้นหากับพ่อค้าและหมวดหมู่ ใน col B คุณจะใช้ VLOOKUP หรือ INDEX + MATCH เพื่อค้นหาผู้ค้าในตารางและส่งคืนหมวดหมู่
fixer1234

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

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

คำตอบ:


2

ฟังก์ชั่นการค้นหาเช่น VLOOKUP หรือการรวมกันของ INDEX และ MATCH นั้นเป็นฟังก์ชั่นพื้นฐานที่ใช้กันอย่างแพร่หลายใน Excel ดังนั้นจึงควรทำความคุ้นเคยกับมัน ให้คุณเริ่มต้นมีคำอธิบายที่ดีของ VLOOKUP ที่นี่

นี่คือส่วนสำคัญโดยใช้ตัวอย่างของคุณ:

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

ข้อมูลที่สร้างขึ้นบางส่วนอยู่ในคอลัมน์ A และ C ในจุดอื่นบนแผ่นงานหรือแผ่นงานอื่นคุณมีตารางการค้นหา ฉันติดมันในคอลัมน์ F และ G คอลัมน์ B คือที่ที่คุณต้องการเติมหมวดหมู่สำหรับแต่ละรายการ สูตรใน B2 คือ:

=VLOOKUP(A2,$F$2:$G$5,2,0)

คุณเพียงแค่คัดลอกมันตามต้องการ การอ้างอิงไปยังผู้ขายในคอลัมน์ A ไม่ได้ถูกยึดดังนั้นจะแสดงแถวปัจจุบันเมื่อคุณคัดลอกสูตรลงในหน้า ตารางการค้นหาใน F: G มีการยึดกับการระบุที่อยู่แน่นอน (เครื่องหมายดอลลาร์) ดังนั้นมันจะยังคงชี้ไปที่ตารางเมื่อคุณคัดลอกสูตร พารามิเตอร์ที่สามบอก VLOOKUP เพื่อดึงผลลัพธ์จากคอลัมน์ที่สองของตาราง พารามิเตอร์สุดท้าย ( 0หรือfalse) บอกให้ VLOOKUP ทำการจับคู่แบบตรงกับชื่อผู้ขาย

ปรับปรุงโซลูชั่น

คุณแสดงความท้าทายในความคิดเห็นของคุณสมมติว่ารายการผู้ขายในคอลัมน์ A เป็นสตริงข้อความแบบสุ่มที่มีชื่อผู้ขายในตารางการค้นหา คุณสามารถทำสิ่งนี้:

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

ในแถว 6 ฉันเพิ่มตัวอย่างในความคิดเห็นของคุณ ฉันยังเพิ่มหมายเลขลำดับสำหรับแถวตารางถัดจากชื่อผู้ขายในตารางค้นหา สูตรในคอลัมน์ B (แสดงสำหรับ B6 ในหน้าต่างสูตร):

=INDEX($G$2:$G$5,SUMPRODUCT(ISNUMBER(SEARCH($F$2:$F$5,A6))*$E$2:$E$5))

สิ่งนี้ใช้ INDEX เพื่อดึงหมวดหมู่จากคอลัมน์ G ตามแถวของตารางที่ผลิตโดย SUMPRODUCT

SUMPRODUCT ช่วยให้คุณสามารถดำเนินการอาร์เรย์ในช่วง มันใช้ฟังก์ชั่น SEARCH เพื่อดูว่าแต่ละชื่อผู้ค้าในคอลัมน์ F มีอยู่ในสตริงผู้ค้าในคอลัมน์ A การค้นหาส่งคืนตำแหน่งหรือข้อผิดพลาด แต่เราสนใจเฉพาะในกรณีที่มีซึ่งจะเป็นผลลัพธ์ตัวเลข ISNUMBER ส่งกลับค่า1สำหรับจริงหรือ0เท็จซึ่งคูณด้วยหมายเลขแถวของตารางที่เพิ่มในคอลัมน์ E ผลลัพธ์ของ SUMPRODUCT จะเป็นแถวของตารางของผู้ขายที่ตรงกัน

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


ขอบคุณมากสำหรับสิ่งนี้เพื่อความชัดเจนในความคิดเห็นล่าสุดของคุณ ฉันได้ดูสูตร Regex เป็นเวลา 3 วันพยายามหาคำตอบ แต่มันยากเมื่อคุณไม่รู้คำถามที่ถูกต้องที่จะถาม หากต้องการโฆษณาเพิ่มเติมเกี่ยวกับโซลูชันของคุณมีวิธีค้นหาเซลล์ Merchant สำหรับ "มี Nandos" แต่ไม่ตรงกันทั้งหมด ตัวอย่างเช่นหากเซลล์คือ: ['7173 05APR17 CD NANDOS ROYAL FESTIVA GB] มันจะค้นหาและใส่ "อาหาร" เป็นหมวดหมู่หรือไม่ การเทียบเท่า Regex จะเป็นอย่างไร * NANDOS. *
Jason Broderick

@ JasonBroderick ที่ได้รับวิธีที่ซับซ้อนมากขึ้น ประเภทของสิ่งที่อยู่ในใจจะวนซ้ำผ่านรายการผู้ขายในตารางการค้นหา สำหรับแต่ละรายการให้ใช้ฟังก์ชั่นเช่น FIND เพื่อดูว่าชื่อผู้ขายนั้นปรากฏที่ใดก็ได้ในข้อความผู้ขายในคอลัมน์ A หากคุณพบคู่ที่ตรงกันให้กลับไปที่ตารางการค้นหาเพื่อรับหมวดหมู่สำหรับผู้ขายรายนั้น ด้วยกาแฟที่เพียงพอก็อาจทำได้ด้วยสูตรอาร์เรย์ VBA จะเป็นอีกแนวทางหนึ่ง
fixer1234

เดี๋ยวก่อนฉันแค่ต้องคว้าพจนานุกรมจีนของฉัน ค้นหาพจนานุกรมใช้มันเพื่อทุบหน้าต่างกระโดดออกจากหน้าต่าง
Jason Broderick

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

1

ฟังก์ชั่น regex: - =INDEX($F$1:$F$4,MAX(IFERROR(SEARCH("*"&$E$1:$E$4&"*",E11)*ROW($E$1:$E$4),0)))

หลังจากวางกดctrl+ shift+enter

RegexFunctionExcelImage


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