เชื่อมต่อค่าที่ไม่ซ้ำกันเท่านั้น


0

ฉันมีฟังก์ชั่นนี้

Public Function CONCATENATESPECIAL(rng As Range) As String
Dim rng1 As Range

CONCATENATESPECIAL = ""

For Each rng1 In rng
    If (Not Rows(rng1.Row).Hidden) And (rng1.Value <> "") Then
    CONCATENATESPECIAL = CONCATENATESPECIAL & rng1.Text & "|"
    End If
Next rng1

End Function

โดยทั่วไปจะเชื่อมค่าในบางช่วงด้วย "|"

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

ขอบคุณล่วงหน้า


3
บางทีอาจใช้ INSTR() เพื่อตรวจสอบว่า .value มีอยู่แล้วใน CONCATENATESPECIAL ก่อนเพิ่มหรือไม่
BruceWayne

1
@ BruceWayne ปัญหาหนึ่งที่ฉันเห็นคือข้อมูลอาจเป็นซับสตริงของข้อมูลอื่น อีกทางเลือกหนึ่งจะบันทึกลงในอาร์เรย์ กรองว่าสำหรับค่าที่ไม่ซ้ำ และเข้าร่วมหลังจาก
gtwebb

คำตอบ:


1

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

Public Function concatenatespecial(rng As Range) As String

Dim col As New Collection
Dim rng1 As Range
Dim str As String
Dim itm As Variant

On Error Resume Next
For Each rng1 In rng
    If rng1 <> "" Then
        col.Add rng1.Value, rng1.Value
    End If
Next rng1
On Error GoTo 0

For Each itm In col
    str = str & "|" & itm
Next itm

concatenatespecial = str

End Function

ชุด . เพิ่มต้องมีเพียงหนึ่งอาร์กิวเมนต์ ยังปล่อยให้ไม่มีการจัดการ ( Resume Next ) ข้อผิดพลาดในการควบคุมรหัสของคุณเป็นวิธีปฏิบัติที่ไม่ดีและฉันคิดว่าจะไม่ทำงานหากคุณมีรายการซ้ำมากกว่าหนึ่ง โปรดทดสอบรหัสของคุณก่อนโพสต์เป็นคำตอบ
Máté Juhász

ดูเหมือนว่ามันจะทำงาน ขอบคุณมาก!
Roman Žydyk

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

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