Đếm số lượng trong một Cell có dấu ngăn cách bởi dấu phẩy, chấm phẩy và gạch ngang (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

dongducnhiem

Thành viên tiêu biểu
Tham gia
21/3/07
Bài viết
637
Được thích
378
Chào các bạn!
Nhờ các bạn thiết lập công thức tổng quát đếm số lượng trong một Cell có dấu ngăn cách bởi dấu phẩy, chấm phẩy và gạch ngang
Xin xem File đính kèm
 

File đính kèm

Chào các bạn!
Nhờ các bạn thiết lập công thức tổng quát đếm số lượng trong một Cell có dấu ngăn cách bởi dấu phẩy, chấm phẩy và gạch ngang
Xin xem File đính kèm
Với dữ liệu như trong file của bạn thì se dùng công thức này tại cell B2:
PHP:
=IF(A2="","",IF(COUNTIF(A2,"*-*"),ROWS(INDIRECT(SUBSTITUTE(A2,"-",":"))),LEN(A2)-LEN(SUBSTITUTE(SUBSTITUTE(A2,",",""),";",""))+1))
Nếu có trường hợp đặc biệt nào khác, ta tính tiếp
 
Công thức của tôi hơi dài:
PHP:
=IF(A2="";"";IF(ISNA(ERROR.TYPE(FIND("-";A2)));VALUE(RIGHT(A2;LEN(A2)-FIND("-";A2)))-VALUE(LEFT(A2;FIND("-";A2)-1))+1;LEN(A2)*2-LEN(SUBSTITUTE(A2;",";""))-LEN(SUBSTITUTE(A2;";";""))+1))

Nếu có trường hợp đặc biệt nào khác, ta tính tiếp
Còn một trường hợp đặc biệt mà tôi chưa tính được, trong một cell có bao gồm dấu phẩy, chấm phẩy và gạch ngang, ví dụ:
01, 02; 03, 05-07; 09, 10
hoặc 01-03; 101-105
hoặc ... (Hai ví dụ trên cho kết quả là 8)
Nhờ anh viết giùm công thức! Cảm ơn.
 
Phiền các ace gợi ý giúp, xin cảm ơn nhiều:
  • Biểu 1: Cách đếm số tổ tại các cột (4), (5) và (6) để điền vào cột tổng số (3). Nhất là kiểm tra số thôn, tổ ở cột (6) do họ đã liệt kê danh sách các thôn, tổ bằng dấu chấm phảy ";" hoặc dấu phảy ","
  • Biểu 2: Căn cứ vào phân loại ở cột (5) ==> Tự đưa danh sách các thôn, tổ vào các Cột (4) hoặc (5) hoặc (6) tương ứng tại Biểu 1. Nếu có thể thì các thôn, tổ ngăn cách bằng dấu chấm phảy ";" hoặc dấu phảy ","
 

File đính kèm

Phiền các ace gợi ý giúp, xin cảm ơn nhiều:
  • Biểu 1: Cách đếm số tổ tại các cột (4), (5) và (6) để điền vào cột tổng số (3). Nhất là kiểm tra số thôn, tổ ở cột (6) do họ đã liệt kê danh sách các thôn, tổ bằng dấu chấm phảy ";" hoặc dấu phảy ","
  • Biểu 2: Căn cứ vào phân loại ở cột (5) ==> Tự đưa danh sách các thôn, tổ vào các Cột (4) hoặc (5) hoặc (6) tương ứng tại Biểu 1. Nếu có thể thì các thôn, tổ ngăn cách bằng dấu chấm phảy ";" hoặc dấu phảy ","
Bạn có biết VBA không? Thử dùng xem sao.
Hãy nhấn nút DEM SO TO và Nút CHUYEN DANH SACH và xem điều gì xảy ra.
Code củ chuối anh chị em ghé qua, xin góp ý.
 

File đính kèm

Bạn có biết VBA không? Thử dùng xem sao.
Hãy nhấn nút DEM SO TO và Nút CHUYEN DANH SACH và xem điều gì xảy ra.
Code củ chuối anh chị em ghé qua, xin góp ý.
Em mới xem qua DEM SO TO thì em thấy mấy dòng này có vẻ không cần thiết:
Mã:
S1 = Application.Substitute(Application.Trim(Arr(i, 1)), ".", " ")
S2 = Application.Substitute(Application.Trim(Arr(i, 2)), ".", " ")
S3 = Application.Substitute(Application.Trim(Arr(i, 3)), ".", " ")
Và chưa giải quyết được vấn đề này:
họ đã liệt kê danh sách các thôn, tổ bằng dấu chấm phảy ";" hoặc dấu phảy ","
 
Em mới xem qua DEM SO TO thì em thấy mấy dòng này có vẻ không cần thiết:
Mã:
S1 = Application.Substitute(Application.Trim(Arr(i, 1)), ".", " ")
S2 = Application.Substitute(Application.Trim(Arr(i, 2)), ".", " ")
S3 = Application.Substitute(Application.Trim(Arr(i, 3)), ".", " ")
Và chưa giải quyết được vấn đề này:
Cảm ơn bạn đã xem bài. Theo bài thì Đúng là dòng đó không cần thiết, nhưng lúc làm mình thêm vào để dẽ xử lý sau này ( các vấn đề ("-",";' ... ) sẽ dễ hơn.
Nhưng nhìn chung theo file đính kèm thì có vẻ ổn.
 
Cảm ơn bạn đã xem bài. Theo bài thì Đúng là dòng đó không cần thiết, nhưng lúc làm mình thêm vào để dẽ xử lý sau này ( các vấn đề ("-",";' ... ) sẽ dễ hơn.
Nhưng nhìn chung theo file đính kèm thì có vẻ ổn.
Em thì làm thế này:
Mã:
Sub Dem1()
Dim str As String, Arr(), I As Long
With Sheet1
    Arr = .Range("D8:F" & .Cells(Rows.Count, 6).End(3).Row).Value
    For I = 1 To UBound(Arr)
        str = Arr(I, 1) & "," & Arr(I, 2) & "," & Arr(I, 3)
        str = Application.Trim(Replace(Replace(Replace(str, " ", ""), ",", " "), ";", " "))
        Arr(I, 1) = UBound(Split(str)) + 1
    Next
    .Range("C8").Resize(UBound(Arr), 1) = Arr
End With
End Sub
 
Em thì làm thế này:
Mã:
Sub Dem1()
Dim str As String, Arr(), I As Long
With Sheet1
    Arr = .Range("D8:F" & .Cells(Rows.Count, 6).End(3).Row).Value
    For I = 1 To UBound(Arr)
        str = Arr(I, 1) & "," & Arr(I, 2) & "," & Arr(I, 3)
        str = Application.Trim(Replace(Replace(Replace(str, " ", ""), ",", " "), ";", " "))
        Arr(I, 1) = UBound(Split(str)) + 1
    Next
    .Range("C8").Resize(UBound(Arr), 1) = Arr
End With
End Sub
Cảm ơn bạn đã cho tôi thêm 1 kinh nghiệm quý. Nối các chuỗi lại rồi xử lý (thay thế) một lần trước khi đếm số phần tử trong Array.
 
)Em thì làm thế này:
Mã:
Sub Dem1()
Dim str As String, Arr(), I As Long
With Sheet1
    Arr = .Range("D8:F" & .Cells(Rows.Count, 6).End(3).Row).Value
    For I = 1 To UBound(Arr)
        str = Arr(I, 1) & "," & Arr(I, 2) & "," & Arr(I, 3)
        str = Application.Trim(Replace(Replace(Replace(str, " ", ""), ",", " "), ";", " "))
        Arr(I, 1) = UBound(Split(str)) + 1
    Next
    .Range("C8").Resize(UBound(Arr), 1) = Arr
End With
End Sub
Bạn lập một hàm riêng, với tham số thứ nhất là chuỗi, tham thứ hai là dấu chọn lựa (ở đây là dấu cách), tham thứ ba là chuỗi (hoặc paramarray) các dấu cần tách.
Hàm thay thế các dấu bằng dấu chọn lựa.

Sau đó gọi
str = ThayKyTu(str, " ", "-.,;")
 
Cảm ơn bạn đã cho tôi thêm 1 kinh nghiệm quý. Nối các chuỗi lại rồi xử lý (thay thế) một lần trước khi đếm số phần tử trong Array.
Em chào Anh ak!
Em đang có 1 file đang không biết làm như nào để loại trừ kí tự xuất hiện lặp trong chuỗi n lần, sau khi loại trừ chỉ giữ lại 1 lần duy nhất số lần xuất hiện kí tự đó trong chuỗi. liệt kê lại chuỗi đó và cộng số kí tự có trong chuỗi. Mong Anh chiếu cố giúp cho. Nội dung mong muốn code Sub em ghi trong file đính kèm ak!
Cám ơn Anh nhiều nhiều!!
Trân trọng/
 

File đính kèm

Web KT

Bài viết mới nhất

Back
Top Bottom