Trang 1 của 4 123 ... CuốiCuối
Kết quả 1 đến 10 của 37

Chủ đề: Xin giúp mình hàm đếm trong một chuỗi ký tự

  1. #1
    aogiadinhviet.com Guest
    Trích dẫn Gửi bởi nguyendu277
    Ví dụ mình có một chuỗi số như sau:

    1,5,7,9-20,22,25,27-35,37,38,40-50

    Xin các bạn giúp mình viết hàm đếm để cho kết quả là: 39

    Mỗi số cách nhau bằng dấu phẩy và dấu gạch ngang hiểu là nó liền từ số đến số. và trong chuỗi này có thể phát sinh ký tự trống và hàm bỏ qua không đếm ký tự trống đó.

    Mình xin cảm ơn các bạn.
    Tôi viết hàm nay cho dữ liệu bạn đã đưa lên nên chưa tổng quát. Thôi thì đưa sao làm vậy bạn Test thử.
    --------------------------------
    Cú Pháp: =Dem(ô cần đếm)
    ------------------------------------------------------

    Mã:
    Public Function Dem(cell As Range) As Long
    Dim arr, d As Long, kq(), i As Long, tmp
    arr = Split(cell, ",")
    For i = 0 To UBound(arr)
        If Len(Trim(arr(i))) < 3 Then
            d = d + 1
        Else
            tmp = Split(arr(i), "-")
            d = d + tmp(1) - tmp(0) + 1
        End If
    Next i
            Dem = d
    End Function

  2. #2
    aloxinh Guest
    Mời các bạn tổng quát hàm thêm chút nữa cho chủ topic.
    ----------------------------------------------------------------------
    Đã hòm hòm hơn!

    Mã:
    Public Function Dem(cell As Range) As Long
    Dim arr, d As Long, kq(), i As Long, tmp
    arr = Split(cell, ",")
    For i = 0 To UBound(arr)
        If InStr(1, arr(i), "-") = 0 Then
            d = d + 1
        Else
            tmp = Split(arr(i), "-")
            d = d + tmp(1) - tmp(0) + 1
        End If
    Next i
            Dem = d
    End Function

  3. #3
    vanbaokrong Guest
    Cám ơn bạn #chuot0106 nhiều nhé, mình test thấy đáp ứng tốt ạ, mình hỏi thêm là với bài toán này chỉ cần dùng hàm của Excel mà không cần dùng tới VBA liệu có thể giải quyết được không, kể cả phải mở thêm cột phụ ạ.

  4. #4
    huunhat Guest
    Trích dẫn Gửi bởi nguyendu277
    Cám ơn bạn #chuot0106 nhiều nhé, mình test thấy đáp ứng tốt ạ, mình hỏi thêm là với bài toán này chỉ cần dùng hàm của Excel mà không cần dùng tới VBA liệu có thể giải quyết được không, kể cả phải mở thêm cột phụ ạ.
    Được nhưng số cột phụ rất lớn (tùy thuộc số biểu thức trong ô của bạn).

  5. #5
    aukid411 Guest
    [QUOTE="chuot0106"]Mời các bạn tổng quát hàm thêm chút nữa cho chủ topic.
    ----------------------------------------------------------------------
    Đã hòm hòm hơn!

    Mã:
    ' hàm đếm các số và dãy số trong một chuỗi
    Function dem(ByVal s As String) As Long
    Dim e As Variant
    For Each e In Split(Replace(s, " ", ""), ",")
    dem = dem + 1
    If InStr(e, "-") Then dem = dem - Application.Evaluate(CStr(e))
    Next e
    End Function

  6. #6
    Thinhquangchem Guest
    Trích dẫn Gửi bởi VetMini
    Cách đếm từ a đến b (a-b) hơi rườm rà. Làm gọn thì chỉ cần evaluate.
    các số từ a đến b = -evaluate("a-b")+1


    <div class="bbcode_container">
    <div class="bbcode_description">Code:
    </div>
    </div>
    Quả thật các thuật toán của Bác VetMini bao giờ cũng tối ưu.

  7. #7
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Trích dẫn Gửi bởi giaiphap
    Được nhưng số cột phụ rất lớn (tùy thuộc số biểu thức trong ô của bạn).
    Cột phụ lớn cũng được anh ạ! Mong anh giúp đỡ!

  8. #8
    hiennhan12 Guest
    Trích dẫn Gửi bởi nnd1988
    Cột phụ lớn cũng được anh ạ! Mong anh giúp đỡ!
    Mình hướng dẫn bạn tự làm chứ cột phụ nhiều quá mình không làm nổi? Với ví dụ của bạn (1,5,7,9-20,22,25,27-35,37,38,40-50)mình thực hiện khoảng 22 cột phụ. Cột 1 tách số 1 ra dùng làm Left cắt từ ký tự đầu đến dấu "," (dùng hàm Find để tìm dấu phẩy), cột 2 tách số 5 ra dùng màm Mid cắt từ vị trí dấu phẩy thứ nhất đến dấu phẩy thứ 2 (cũng dùng hàm Find để tìm dấu phẩy) ... đến cột phụ thứ 12 thì tính tổng cột 1, ... cột phụ 15 thì tách số 20 ra và trừ đi số 9 (dùng làm Left và hàm Right để tách, căn cứ vào dấu "-")... Nghe nói thôi đã ớn rồi nói gì đến việc làm, vẫn thực hiện được nếu bạn kiên nhẫn.

  9. #9
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Trích dẫn Gửi bởi giaiphap
    Mình hướng dẫn bạn tự làm chứ cột phụ nhiều quá mình không làm nổi? Với ví dụ của bạn (1,5,7,9-20,22,25,27-35,37,38,40-50)mình thực hiện khoảng 22 cột phụ. Cột 1 tách số 1 ra dùng làm Left cắt từ ký tự đầu đến dấu "," (dùng hàm Find để tìm dấu phẩy), cột 2 tách số 5 ra dùng màm Mid cắt từ vị trí dấu phẩy thứ nhất đến dấu phẩy thứ 2 (cũng dùng hàm Find để tìm dấu phẩy) ... đến cột phụ thứ 12 thì tính tổng cột 1, ... cột phụ 15 thì tách số 20 ra và trừ đi số 9 (dùng làm Left và hàm Right để tách, căn cứ vào dấu "-")... Nghe nói thôi đã ớn rồi nói gì đến việc làm, vẫn thực hiện được nếu bạn kiên nhẫn.
    Nghe bạn nói đúng là thấy oải luôn rồi! Sao phức tạp vậy. Muốn tách thì dùng Text to Columns vài lần có nhanh hơn không?

  10. #10
    vlvietlamvl Guest
    Trích dẫn Gửi bởi giaiphap
    Mình hướng dẫn bạn tự làm chứ cột phụ nhiều quá mình không làm nổi? Với ví dụ của bạn (1,5,7,9-20,22,25,27-35,37,38,40-50)mình thực hiện khoảng 22 cột phụ. Cột 1 tách số 1 ra dùng làm Left cắt từ ký tự đầu đến dấu "," (dùng hàm Find để tìm dấu phẩy), cột 2 tách số 5 ra dùng màm Mid cắt từ vị trí dấu phẩy thứ nhất đến dấu phẩy thứ 2 (cũng dùng hàm Find để tìm dấu phẩy) ... đến cột phụ thứ 12 thì tính tổng cột 1, ... cột phụ 15 thì tách số 20 ra và trừ đi số 9 (dùng làm Left và hàm Right để tách, căn cứ vào dấu "-")... Nghe nói thôi đã ớn rồi nói gì đến việc làm, vẫn thực hiện được nếu bạn kiên nhẫn.
    Mình đã dùng hàm
    =IF(A1="";0;LEN(A1)-LEN(SUBSTITUTE(A1;",";""))+1)
    Để đếm dấu phẩy trong 1 chuỗi ở ô ví dụ là A1.

    Nhưng lại không nghĩ ra giải pháp nào cho việc cộng thêm |số cuối trừ số đầu cộng thêm 1| khi giữa chúng là ký tự "-" [IMG]images/smilies/a30.gif[/IMG]
    Có lẽ dùng VBA như các bạn hướng dẫn là gọn nhẹ nhất nhưng quả thật là mình không biết nhiều về VBA lắm nên vẫn muốn dùng hàm excel thông thường hơn nếu không phải tạo quá nhiều cột phụ [IMG]images/smilies/a03.gif[/IMG]

Trang 1 của 4 123 ... CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •