เท่าที่ฉันทราบไม่มีคุณสมบัติในตัวที่สามารถแยกวิเคราะห์และสรุปแท็กที่คั่นด้วยเครื่องหมายจุลภาคใน Excel แน่นอนว่าคุณสามารถสร้างโซลูชันของคุณเองด้วยฟังก์ชั่นแผ่นงานและ VBA เล็กน้อย นี่เป็นวิธีแก้ปัญหาอย่างรวดเร็วสำหรับการทำเช่นนี้
ขั้นตอนที่ 1 : กดAlt+ F11เพื่อเปิดบานหน้าต่างตัวแก้ไข VBA ใน Excel ใส่โมดูลใหม่และวางในรหัสนี้สำหรับฟังก์ชั่นที่กำหนดเอง
Public Function CCARRAY(rr As Variant, sep As String)
'rr is the range or array of values you want to concatenate. sep is the delimiter.
Dim rra() As Variant
Dim out As String
Dim i As Integer
On Error GoTo EH
rra = rr
out = ""
i = 1
Do While i <= UBound(rra, 1)
If rra(i, 1) <> False Then
out = out & rra(i, 1) & sep
End If
i = i + 1
Loop
out = Left(out, Len(out) - Len(sep))
CCARRAY = out
Exit Function
EH:
rra = rr.Value
Resume Next
End Function
ฟังก์ชันนี้จะช่วยให้คุณสร้างรายการที่คั่นด้วยเครื่องหมายจุลภาคเพื่อสรุปข้อมูลแท็กที่คุณมี
ขั้นตอนที่ 2 : ในแผ่นงานให้ป้อนเซลล์ (H2 ในตัวอย่างด้านล่าง) แท็กที่คุณต้องการค้นหา ในเซลล์ไปทางขวาให้ป้อนสูตรต่อไปนี้โดยการกดCtrl+ +ShiftEnter
=IFERROR(CCARRAY(IF(NOT(ISERROR(FIND(H2,$B$2:$B$6))),$A$2:$A$6),", "),"No matches found.")
โดยการกดCtrl+ Shift+ Enterคุณกำลังเข้าสู่สูตรเป็นสูตรอาร์เรย์ มันจะปรากฏล้อมรอบด้วย{...}
ในแถบสูตร โปรดทราบว่าในสูตรเป็นช่วงที่มีแท็กทั้งหมดสำหรับรายการที่ระบุไว้ใน$B$2:$B$6
$A$2:$A$6
แก้ไข:
หากคุณไม่คำนึงถึงรายการที่ตรงกันในคอลัมน์แทนที่จะเป็นรายการในเซลล์เดียวคุณสามารถส่งคืนการจับคู่สำหรับแท็กโดยใช้ฟังก์ชั่นแผ่นงานเท่านั้น
ตำแหน่งที่ชื่อของคุณอยู่ในColumn A
นั้นแท็กอยู่ในColumn B
และแท็กที่คุณค้นหาอยู่H2
คุณสามารถใช้สูตรอาร์เรย์ต่อไปนี้ในI2
และเติมเท่าที่คุณต้องการ:
=IFERROR(INDEX($A$1:$A$6,SMALL(IF(NOT(ISERROR(FIND($H$2,$B$1:$B$6))),ROW($B$1:$B$6),2000000),ROW()-1)),"")
สูตรจะทำงานโดยสร้างอาร์เรย์ของตัวเลขก่อนโดยพิจารณาว่าแท็กในแต่ละแถวมีข้อความค้นหาหรือไม่ หากพบการจับคู่หมายเลขแถวจะถูกเก็บไว้ในอาร์เรย์ หากไม่พบ 2000000 จะถูกเก็บไว้ในอาร์เรย์ ถัดไปSMALL(<array>,ROW()-1)
ส่วนของสูตรจะส่งคืนค่าที่ROW()-1
เล็กที่สุดจากอาร์เรย์ ถัดไปค่านี้จะถูกส่งผ่านเป็นอาร์กิวเมนต์ดัชนีไปยังINDEX()
ฟังก์ชันโดยที่ค่าที่ดัชนีนั้นในอาร์เรย์ของชื่อเรื่องถูกส่งคืน หากจำนวนที่มากกว่าจำนวนแถวในอาร์เรย์หัวเรื่องถูกส่งไปINDEX()
เป็นอาร์กิวเมนต์จะส่งคืนข้อผิดพลาด เนื่องจาก 2000000 ถูกส่งเป็นอาร์กิวเมนต์เมื่อไม่พบข้อมูลที่ตรงกันข้อผิดพลาดจะถูกส่งกลับ IFERROR()
ฟังก์ชั่นแล้วส่งกลับ""
ในกรณีนี้
สิ่งสำคัญคือต้องเข้าใจวิธีROW()
การใช้ในสูตรนี้ หากคุณต้องการแสดงรายการผลลัพธ์ของคุณที่เริ่มต้นในแถวที่แตกต่างกันคุณจะต้องปรับอาร์กิวเมนต์ที่สองของSMALL()
ฟังก์ชันเพื่อให้ส่งคืนค่าที่เล็กที่สุดจากอาร์เรย์ เช่นถ้ารายชื่อของผลการเริ่มต้นในแถวที่ 1 แทนแถวที่ 2 คุณจะใช้แทนSMALL(...,ROW())
SMALL(...,ROW()-1)
นอกจากนี้หากรายการชื่อและแท็กของคุณไม่ได้เริ่มในแถวที่ 1 คุณจะต้องปรับสูตรเช่นกัน อาร์กิวเมนต์ที่สองของIF()
การทำงานจะต้องมีการปรับเพื่อให้การแข่งขันในแถวแรกของผลตอบแทน 1. ข้อมูลของคุณเช่นถ้ารายการของชื่อจะเริ่มต้นในแถวที่ 2 แทนแถวที่ 1 คุณจะต้องสูตรที่จะรวมแทนIF(...,ROW($A$2:$A$7)-1,...)
IF(...,ROW($A$1:$A$6),...)