dongducnhiem
Thành viên tiêu biểu

- Tham gia
- 21/3/07
- Bài viết
- 637
- Được thích
- 378
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: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
=IF(A2="","",IF(COUNTIF(A2,"*-*"),ROWS(INDIRECT(SUBSTITUTE(A2,"-",":"))),LEN(A2)-LEN(SUBSTITUTE(SUBSTITUTE(A2,",",""),";",""))+1))
=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))
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ụ:Nếu có trường hợp đặc biệt nào khác, ta tính tiếp
Bạn có biết VBA không? Thử dùng xem sao.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 ","
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: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 ý.
S1 = Application.Substitute(Application.Trim(Arr(i, 1)), ".", " ")
S2 = Application.Substitute(Application.Trim(Arr(i, 2)), ".", " ")
S3 = Application.Substitute(Application.Trim(Arr(i, 3)), ".", " ")
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 ","
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.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:
Và chưa giải quyết được vấn đề này: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)), ".", " ")
Em thì làm thế 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.
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
Cám ơn bác. Mình lại chưa dùng VBA, đang mày mò năm thê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 ý.
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.)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 chào Anh ak!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.