Cách chuyển đổi một chuỗi các giá trị được phân tách bằng dấu phẩy thành một mảng


0

Tôi có một vài ô có chuỗi như thế này:

"John, Carla, Peter, John, Bob, Chris, Carla, Andrea"

Tôi muốn tính có bao nhiêu người khác nhau được đặt tên (nghĩa là có bao nhiêu giá trị duy nhất). Số đếm cho chuỗi trên sẽ là 6. Lưu ý rằng tổng số lượng tên trong chuỗi có thể thay đổi rất nhiều. Một số chỉ có một tên và tên lớn nhất có 14 (trong đó một số có thể được nhân đôi). Một số tên có khoảng trắng trong chúng (ví dụ: "Peter Smith, Andrea, Carla Moore"), nhưng chúng ta có thể dựa vào dấu phẩy để tách chúng.

Tôi nghĩ giải pháp là chuyển đổi chuỗi thành một mảng và sau đó sử dụng kết hợp các công thức SUM, IF và FREQUENCY mà tôi tìm thấy trực tuyến đây , áp dụng cho mảng đó.

Tuy nhiên tôi không biết làm thế nào để chuyển đổi chuỗi thành một mảng (nếu đó là cách để đi).


Bạn đã thử một cái gì đó?
Toto

Tôi tìm thấy cái này ở đây ozgrid.com/forum/forum/help-forums/excel-general/ và đã cố gắng sử dụng nó nhưng không thể hiểu nó. Sau đó, cố gắng phân tách từng chuỗi bằng hàm "Chuyển văn bản thành cột" và sau đó sử dụng hướng dẫn trực tuyến đó tôi đã đề cập để đếm các giá trị trong một mảng, nhưng tôi sẽ phải nhập công thức theo cách thủ công vào từng hàng nếu không mảng không thay đổi sang hàng tiếp theo.
PrincessLilly

Câu trả lời:


1

Hãy thử chức năng nhỏ do người dùng xác định này:

Public Function PeopleKounter(s As String) As Long
    Dim DQ As String, c As Collection
    Set c = New Collection
    DQ = Chr(34)

    ary = Split(Replace(s, DQ, ""), ",")

    On Error Resume Next
        For Each a In ary
            c.Add a, CStr(a)
        Next a
    On Error GoTo 0

    PeopleKounter = c.Count
End Function

enter image description here


Nó làm việc rất tốt, cảm ơn bạn!
PrincessLilly

1
Bây giờ tôi đã thêm "Application.Voliverse" ở trên cùng để cho phép chức năng này tự động làm mới khi tính toán lại.
PrincessLilly

@PrécLilly Ý tưởng hay .....................................
Gary's Student

1

Công thức này sẽ lặp lại các "từ" và chỉ tính duy nhất.

=SUMPRODUCT(--(ISERROR(FIND(TRIM(MID(SUBSTITUTE(A1,",",REPT(" ",99)),(ROW($1:$17)-1)*99+1,99)),TRIM(MID(SUBSTITUTE(A1,",",REPT(" ",99)),1,(ROW($1:$17)-1)*99+1))))))

Khi lặp đi lặp lại, nó so sánh nó với hiện tại với tất cả những gì đến trước đó với FIND(). Và lỗi được trả lại nếu không tìm thấy và do đó nó được tính.

enter image description here


Sử dụng thông minh SUMPRODUCT()
Gary's Student

Tùy chọn tốt cho người đang tìm cách sử dụng công thức không do người dùng xác định.
PrincessLilly
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.