Tính tổng số theo ngày tháng trong 1 chuỗi ký tự (1 người xem)

  • Thread starter Thread starter LYSM
  • Ngày gửi Ngày gửi

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

LYSM

Thành viên thường trực
Tham gia
16/3/11
Bài viết
290
Được thích
26
Em chào các anh chị! Em đang có 1 vấn đề cần các anh chị giúp đỡ. Em có dữ liệu là 1 chuỗi ký tự trong đó có số mẫu và ngày tháng lấy mẫu. Bây giờ phải tính tổng số mẫu trong 1 cell này thỏa mãn điều kiện ngày lấy mẫu < 1 ngày cho trước thì cộng số mẫu tương ứng lại. Em gửi file đính kèm nhờ các thầy cô và anh chị giúp đỡ. Dùng hàm hoặc VBA cũng được ạ. Em cảm ơn nhiều!
 

File đính kèm

Em chào các anh chị! Em đang có 1 vấn đề cần các anh chị giúp đỡ. Em có dữ liệu là 1 chuỗi ký tự trong đó có số mẫu và ngày tháng lấy mẫu. Bây giờ phải tính tổng số mẫu trong 1 cell này thỏa mãn điều kiện ngày lấy mẫu < 1 ngày cho trước thì cộng số mẫu tương ứng lại. Em gửi file đính kèm nhờ các thầy cô và anh chị giúp đỡ. Dùng hàm hoặc VBA cũng được ạ. Em cảm ơn nhiều!

Chào bạn,

- mình thấy cách sắp số liệu của bạn sẽ làm khó cho việc lập công thức lẫn VBA :-=,
- bạn mở file vào sheet 2 xem cách bố trí + công thức đó có được ko?

Link: https://www.mediafire.com/?8r7dqdmpsy7ztvp

'- - -
Chúc 1 ngày tốt lành !
 
Lần chỉnh sửa cuối:
Em chào các anh chị! Em đang có 1 vấn đề cần các anh chị giúp đỡ. Em có dữ liệu là 1 chuỗi ký tự trong đó có số mẫu và ngày tháng lấy mẫu. Bây giờ phải tính tổng số mẫu trong 1 cell này thỏa mãn điều kiện ngày lấy mẫu < 1 ngày cho trước thì cộng số mẫu tương ứng lại. Em gửi file đính kèm nhờ các thầy cô và anh chị giúp đỡ. Dùng hàm hoặc VBA cũng được ạ. Em cảm ơn nhiều!

bạn định dạng ngày tháng của file như thế nào : ví dụ :03/10/2014 là ngày 03 hay là tháng 03??
 
Em chào các anh chị! Em đang có 1 vấn đề cần các anh chị giúp đỡ. Em có dữ liệu là 1 chuỗi ký tự trong đó có số mẫu và ngày tháng lấy mẫu. Bây giờ phải tính tổng số mẫu trong 1 cell này thỏa mãn điều kiện ngày lấy mẫu < 1 ngày cho trước thì cộng số mẫu tương ứng lại. Em gửi file đính kèm nhờ các thầy cô và anh chị giúp đỡ. Dùng hàm hoặc VBA cũng được ạ. Em cảm ơn nhiều!

Trong file bạn viết :
"Tương tự, với C3 có ngày 25/02/2014 < 10/03/2014 nên C3 =3"
trong khi dữ liệu tại ô A3 là :
Lần 1: 25/01/2014 lấy 2 mẫu so sánh
Lần 2: 13/02/2014 lấy 3 mẫu gửi khách hàng
Lần 3: 25/02/2014 lấy 3 mẫu abcd
Lần 4: 15/03/2014 lấy 4 mẫu abcc

==> như vậy lần 1, lần 2, lần 3 đều nhỏ hơn 10/03/2014 --> kết quả phải là 2+3+3 = 8 ???? <--- Tôi hiểu thế có đúng không??
bài này chắc phải dùng code VBA : , bạn tham khảo thử code sau :
Mã:
Function AAA(source)
    Dim str$, match As Object, Arr
    Dim iCount&
        str = CStr(source)
        With CreateObject("vbscript.regexp")
            .Global = True
            .Pattern = ":\s*(\d{2}/\d{2}/\d{4}).+(\d+)"
            If .test(str) Then
                Set match = .Execute(str)
                iCount = match.Count
                ReDim Arr(1 To iCount, 1 To 2)
                For i = 1 To iCount
                    With match(i - 1)
                        Arr(i, 1) = .subMatches(0)
                        Arr(i, 2) = .subMatches(1)
                    End With
                Next
            End If
        End With
        AAA = Arr
End Function
'=====================================================
Function BBB(data, criteria) As Long
    Dim str$, crt
    Dim Arr
        str = CStr(data): crt = CDate(criteria)
        Arr = AAA(str)
        If IsArray(Arr) Then
            For i = 1 To UBound(Arr, 1)
                If CDate(Arr(i, 1)) < crt Then BBB = BBB + Arr(i, 2)
            Next
        End If
End Function
tại ô B3 gõ công thức sau :
PHP:
=BBB($A3,B$2)
 
Trong file bạn viết :
"Tương tự, với C3 có ngày 25/02/2014 < 10/03/2014 nên C3 =3"
trong khi dữ liệu tại ô A3 là :
Lần 1: 25/01/2014 lấy 2 mẫu so sánh
Lần 2: 13/02/2014 lấy 3 mẫu gửi khách hàng
Lần 3: 25/02/2014 lấy 3 mẫu abcd
Lần 4: 15/03/2014 lấy 4 mẫu abcc

==> như vậy lần 1, lần 2, lần 3 đều nhỏ hơn 10/03/2014 --> kết quả phải là 2+3+3 = 8 ???? <--- Tôi hiểu thế có đúng không??
bài này chắc phải dùng code VBA : , bạn tham khảo thử code sau :
Mã:
Function AAA(source)
    Dim str$, match As Object, Arr
    Dim iCount&
        str = CStr(source)
        With CreateObject("vbscript.regexp")
            .Global = True
            .Pattern = ":\s*(\d{2}/\d{2}/\d{4}).+(\d+)"
            If .test(str) Then
                Set match = .Execute(str)
                iCount = match.Count
                ReDim Arr(1 To iCount, 1 To 2)
                For i = 1 To iCount
                    With match(i - 1)
                        Arr(i, 1) = .subMatches(0)
                        Arr(i, 2) = .subMatches(1)
                    End With
                Next
            End If
        End With
        AAA = Arr
End Function
'=====================================================
Function BBB(data, criteria) As Long
    Dim str$, crt
    Dim Arr
        str = CStr(data): crt = CDate(criteria)
        Arr = AAA(str)
        If IsArray(Arr) Then
            For i = 1 To UBound(Arr, 1)
                If CDate(Arr(i, 1)) < crt Then BBB = BBB + Arr(i, 2)
            Next
        End If
End Function
tại ô B3 gõ công thức sau :
PHP:
=BBB($A3,B$2)
Cảm ơn bác đã nhiệt tình giúp đỡ, ô C3 của em chỉ là 3 thôi ạ, vì lần 1 và lần 2 đã tính vào ô B3 rồi, phần nào tính rồi thì không tính lại nữa
 
Lần chỉnh sửa cuối:
Em chào các anh chị! Em đang có 1 vấn đề cần các anh chị giúp đỡ. Em có dữ liệu là 1 chuỗi ký tự trong đó có số mẫu và ngày tháng lấy mẫu. Bây giờ phải tính tổng số mẫu trong 1 cell này thỏa mãn điều kiện ngày lấy mẫu < 1 ngày cho trước thì cộng số mẫu tương ứng lại. Em gửi file đính kèm nhờ các thầy cô và anh chị giúp đỡ. Dùng hàm hoặc VBA cũng được ạ. Em cảm ơn nhiều!

Nếu cho tôi 2 cận, tôi có thể dùng hàm
 

File đính kèm

Bạn xem trong file đính kèm nhé!
Cái Name
=MID(Sheet1!$A11,FIND("Lần "&ROW(INDIRECT("1:"&SoLan)),Sheet1!$A11)+22,1)+0
Số 1 bạn có thể thay đổi tuỳ theo chữ số về số lấy mẫu của bạn
 

File đính kèm

Cảm ơn bác đã nhiệt tình giúp đỡ, ô C3 của em chỉ là 3 thôi ạ, vì lần 1 và lần 2 đã tính vào ô B3 rồi, phần nào tính rồi thì không tính lại nữa

Ra là vậy,:
Copy lại đoạn code sau :
Mã:
Option Explicit
Function AAA(source)
    Dim str$, match As Object, Arr
    Dim iCount&, i&
        str = CStr(source)
        With CreateObject("vbscript.regexp")
            .Global = True
            .Pattern = ":\s*(\d{2}/\d{2}/\d{4}).+(\d+)"
            If .test(str) Then
                Set match = .Execute(str)
                iCount = match.Count
                ReDim Arr(1 To iCount, 1 To 2)
                For i = 1 To iCount
                    With match(i - 1)
                        Arr(i, 1) = .subMatches(0)
                        Arr(i, 2) = CDbl(.subMatches(1))
                    End With
                Next
            End If
        End With
        AAA = Arr
End Function
'=====================================================
Function BBB(data, Criteria As Range)
    Dim str$, crt
    Dim Arr, result, rng As Range, j&, i&
        str = CStr(data)
        Arr = AAA(str)
        If IsArray(Arr) Then
            ReDim Preserve Arr(1 To UBound(Arr, 1), 1 To 3)
            If Criteria.Cells.Count > 1 Then
                ReDim result(1 To Criteria.Cells.Count)
                For Each rng In Criteria
                    j = j + 1
                    For i = 1 To UBound(Arr, 1)
                        If CDate(Arr(i, 1)) < CDate(rng) Then
                            If Arr(i, 3) = 0 Then
                                result(j) = result(j) + Arr(i, 2)
                                Arr(i, 3) = 1
                            End If
                        End If
                    Next
                Next
            Else
                For i = 1 To UBound(Arr, 1)
                    If CDate(Arr(i, 1)) < CDate(Criteria) Then result = result + Arr(i, 2)
                Next
            End If
        End If
        BBB = result
End Function
Công thức mảng (ctrl +shift +enter) như sau :
Bạn bôi đen vùng B3:D3 : sau đó nhập công thức sau :
PHP:
=BBB($A3,$B$2:$D$2)
ấn cltr +shift +enter : xem kết quả, dù đúng dù sai mình cũng xin rút !:-=

Nếu thấy dùng code phức tạp, bạn nên bố trí là dữ liệu,(có thể thêm vài cột phụ để tác dữ liệu ,..) để sử dụng công thức có sẵn trong excel!
 
Ra là vậy,:
Copy lại đoạn code sau :
Mã:
Option Explicit
Function AAA(source)
    Dim str$, match As Object, Arr
    Dim iCount&, i&
        str = CStr(source)
        With CreateObject("vbscript.regexp")
            .Global = True
            .Pattern = ":\s*(\d{2}/\d{2}/\d{4}).+(\d+)"
            If .test(str) Then
                Set match = .Execute(str)
                iCount = match.Count
                ReDim Arr(1 To iCount, 1 To 2)
                For i = 1 To iCount
                    With match(i - 1)
                        Arr(i, 1) = .subMatches(0)
                        Arr(i, 2) = CDbl(.subMatches(1))
                    End With
                Next
            End If
        End With
        AAA = Arr
End Function
'=====================================================
Function BBB(data, Criteria As Range)
    Dim str$, crt
    Dim Arr, result, rng As Range, j&, i&
        str = CStr(data)
        Arr = AAA(str)
        If IsArray(Arr) Then
            ReDim Preserve Arr(1 To UBound(Arr, 1), 1 To 3)
            If Criteria.Cells.Count > 1 Then
                ReDim result(1 To Criteria.Cells.Count)
                For Each rng In Criteria
                    j = j + 1
                    For i = 1 To UBound(Arr, 1)
                        If CDate(Arr(i, 1)) < CDate(rng) Then
                            If Arr(i, 3) = 0 Then
                                result(j) = result(j) + Arr(i, 2)
                                Arr(i, 3) = 1
                            End If
                        End If
                    Next
                Next
            Else
                For i = 1 To UBound(Arr, 1)
                    If CDate(Arr(i, 1)) < CDate(Criteria) Then result = result + Arr(i, 2)
                Next
            End If
        End If
        BBB = result
End Function
Công thức mảng (ctrl +shift +enter) như sau :
Bạn bôi đen vùng B3:D3 : sau đó nhập công thức sau :
PHP:
=BBB($A3,$B$2:$D$2)
ấn cltr +shift +enter : xem kết quả, dù đúng dù sai mình cũng xin rút !:-=

Nếu thấy dùng code phức tạp, bạn nên bố trí là dữ liệu,(có thể thêm vài cột phụ để tác dữ liệu ,..) để sử dụng công thức có sẵn trong excel!
Bác ơi, file của em đằng nào cũng dùng code rồi nên dùng code tiện hơn, bác có cách nào không cần dùng mảng không ạ? vì công thức trên em còn phải cộng trừ đi một công thức phức tạp khác nữa. Em xin chân thành cảm ơn bác và 2 bác Let'Gâu Gâu, HoangMinhTien đã nhiệt tình giúp đỡ
 
Trong file bạn viết :
"Tương tự, với C3 có ngày 25/02/2014 < 10/03/2014 nên C3 =3"
trong khi dữ liệu tại ô A3 là :
Lần 1: 25/01/2014 lấy 2 mẫu so sánh
Lần 2: 13/02/2014 lấy 3 mẫu gửi khách hàng
Lần 3: 25/02/2014 lấy 3 mẫu abcd
Lần 4: 15/03/2014 lấy 4 mẫu abcc

==> như vậy lần 1, lần 2, lần 3 đều nhỏ hơn 10/03/2014 --> kết quả phải là 2+3+3 = 8 ???? <--- Tôi hiểu thế có đúng không??
bài này chắc phải dùng code VBA : , bạn tham khảo thử code sau :
Mã:
Function AAA(source)
    Dim str$, match As Object, Arr
    Dim iCount&
        str = CStr(source)
        With CreateObject("vbscript.regexp")
            .Global = True
            .Pattern = ":\s*(\d{2}/\d{2}/\d{4}).+(\d+)"
            If .test(str) Then
                Set match = .Execute(str)
                iCount = match.Count
                ReDim Arr(1 To iCount, 1 To 2)
                For i = 1 To iCount
                    With match(i - 1)
                        Arr(i, 1) = .subMatches(0)
                        Arr(i, 2) = .subMatches(1)
                    End With
                Next
            End If
        End With
        AAA = Arr
End Function
'=====================================================
Function BBB(data, criteria) As Long
    Dim str$, crt
    Dim Arr
        str = CStr(data): crt = CDate(criteria)
        Arr = AAA(str)
        If IsArray(Arr) Then
            For i = 1 To UBound(Arr, 1)
                If CDate(Arr(i, 1)) < crt Then BBB = BBB + Arr(i, 2)
            Next
        End If
End Function
tại ô B3 gõ công thức sau :
PHP:
=BBB($A3,B$2)

Bác ơi code này là được rồi ạ (các ô sau em trừ đi ô trước), nhưng có 1 cái là nếu em ghi "Lần 2: 13/02/2014 lấy 3 mẫu code A22" thì nó lại nhận số là 2 chứ không phải là 3, hơn nữa nó chỉ nhận 1 số chứ nếu em lấy 13 mẫu nó vẫn nhận là 3 mẫu. Bác có cách nào khắc phục được cái này không ạ
 

File đính kèm

Lần chỉnh sửa cuối:

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

Back
Top Bottom