chỉ nối các giá trị duy nhất


0

Tôi có chức năng này

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

Về cơ bản, nó kết hợp các giá trị trong một số phạm vi với "|".

Những gì tôi cần là - có thể chỉnh sửa nó, thành - nếu có, trong phạm vi đó một số giá trị trùng lặp, chỉ bao gồm một lần? Để tổng hợp - chỉ ghép các giá trị duy nhất.

Cảm ơn trước


3
Có lẽ sử dụng INSTR()để kiểm tra nếu .valueđã có CONCATENATESPECIALtrước khi thêm nó?
BruceWayne

1
@BruceWayne một vấn đề tôi thấy với điều này là dữ liệu có thể là một chuỗi con của dữ liệu khác và vẫn là duy nhất. Một giải pháp thay thế sẽ là lưu vào một bộ lọc mảng cho các giá trị duy nhất và tham gia sau đó.
gtwebb

Câu trả lời:


1

Tôi có thể sẽ đi về nó theo cách này. Tôi sẽ thêm mọi thứ vào một bộ sưu tập và đặt khóa bằng với giá trị phạm vi. Các on error resume nextbit sẽ ngăn chặn nó từ erroring khi nó cố gắng để đưa một bản sao trong bộ sưu tập. Tôi sẽ cần xác nhận thêm một chút, nhưng đối với hầu hết các phần nó nên đủ.

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

Bộ sưu tập .Add chỉ yêu cầu một đối số. Ngoài ra, để các Resume Nextlỗi không được quản lý ( ) kiểm soát mã của bạn là một thực tiễn tồi và tôi nghĩ rằng nó sẽ không hoạt động nếu bạn có nhiều hơn một bản sao. Vui lòng kiểm tra mã của bạn trước khi đăng nó như một câu trả lời.
Máté Juhász

Có vẻ như nó hoạt động. Cảm ơn nhiều!
Roman ydyk

Đúng, đúng là Collection.Add chỉ yêu cầu một đối số, nhưng tôi tận dụng thực tế là đối số Key tùy chọn phải là duy nhất. Và, trong khi tôi đồng ý rằng thật tệ khi để các Resume Nextlỗi không được quản lý kiểm soát mã của bạn, thì phương án thay thế ở đây là đạp xe qua bộ sưu tập để kiểm tra mỗi lần. Để giảm thiểu rủi ro, tôi đã xóa tất cả mã ngoại trừ những gì cần thiết để đưa vào bộ sưu tập, khỏi Resume Nextkhối. Tôi cũng không rõ tại sao bạn nghĩ rằng điều này sẽ thất bại với nhiều bản sao. Thử nghiệm của tôi cho thấy điều này hoạt động ngay cả trong kịch bản đó.
BamAlmighty

Sử dụng từ điển thay vì bộ sưu tập sau đó không cần tiếp tục stackoverflow.com/a/915333
Rob Sedgwick
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.