đếm số ô có chứa dữ liệu liên tiếp ít nhất trong dòng

Liên hệ QC

sep_hatxel

Thành viên thường trực
Tham gia
24/5/10
Bài viết
217
Được thích
7
Dữ liệu ở sheet(AB) tính từ cột G trở đi: cần đếm số ô liên tiếp ít nhất có chứa dữ liệu thoả mãn điều kiện sau:
1, Đếm Số ô liên tiếp có chứa dữ liệu: là ít nhất
2, Chỉ xét ô chứa dữ liệu liên tiếp mà trước nó phải có ô trống (ô không có dữ liệu) và trước ô trống này lại phải có ô chứa dữ liệu.
- Mình minh hoạ theo file gửi kèm: số ô dữ liệu liên tiếp ít nhất được tô màu vàng, trước nó là ô trống tô màu xanh, trước ô trống là ô có dữ liệu được tô màu đỏ. Kết quả đếm số ô dữ liệu ít nhất được dán vào cột E như file minh hoạ!
- Rất mong GPE giúp đỡ, xin chân thành
 

File đính kèm

  • DEMSOODULIEU_ITNHAT.xlsm
    28.7 KB · Đọc: 20
Dữ liệu ở sheet(AB) tính từ cột G trở đi: cần đếm số ô liên tiếp ít nhất có chứa dữ liệu thoả mãn điều kiện sau:
1, Đếm Số ô liên tiếp có chứa dữ liệu: là ít nhất
2, Chỉ xét ô chứa dữ liệu liên tiếp mà trước nó phải có ô trống (ô không có dữ liệu) và trước ô trống này lại phải có ô chứa dữ liệu.
- Mình minh hoạ theo file gửi kèm: số ô dữ liệu liên tiếp ít nhất được tô màu vàng, trước nó là ô trống tô màu xanh, trước ô trống là ô có dữ liệu được tô màu đỏ. Kết quả đếm số ô dữ liệu ít nhất được dán vào cột E như file minh hoạ!
- Rất mong GPE giúp đỡ, xin chân thành
Kết quả E9 là những ô nào?
 
Kết quả E9 là những ô nào?

Hình như là không cần hỏi lại khi "đèn xanh" của tác giả đã tắt.
Nhiều người gởi xong bài hỏi, an tâm "sẽ có ai đó trả lời, tắt đèn ngủ thôi".
Sẽ có người trả lời cho mình. "mắc mớ" gì ngồi chờ trả lời trên mạng. Mai thức dậy ăn sáng, cà phê xong, mở mạng lên là sẽ có câu trả lời. "Phẻ".
 
Hình như là không cần hỏi lại khi "đèn xanh" của tác giả đã tắt.
Nhiều người gởi xong bài hỏi, an tâm "sẽ có ai đó trả lời, tắt đèn ngủ thôi".
Sẽ có người trả lời cho mình. "mắc mớ" gì ngồi chờ trả lời trên mạng. Mai thức dậy ăn sáng, cà phê xong, mở mạng lên là sẽ có câu trả lời. "Phẻ".
Mình xin lỗi vì lúc đó mình có việc gấp không có mặt. Kết quả ở E9 là 2 ô dữ liệu liên tiếp ít nhất được tô màu vàng đó ạ. Mình bỏ xót không tô màu xanh cho ô trống trước nó và tô màu đỏ cho ô có dữ liệu trước ô trống.
- Xin cảm ơn các bạn đã quan tâm!
 
Mình xin lỗi vì lúc đó mình có việc gấp không có mặt. Kết quả ở E9 là 2 ô dữ liệu liên tiếp ít nhất được tô màu vàng đó ạ. Mình bỏ xót không tô màu xanh cho ô trống trước nó và tô màu đỏ cho ô có dữ liệu trước ô trống.
- Xin cảm ơn các bạn đã quan tâm!

Làm ra kết quả giống kết quả mẫu của bạn thôi nhé. Đọc giải thích của bạn tôi vẫn chưa rõ lắm.
 

File đính kèm

  • DEMSOODULIEU_ITNHAT.rar
    18.7 KB · Đọc: 13
Làm ra kết quả giống kết quả mẫu của bạn thôi nhé. Đọc giải thích của bạn tôi vẫn chưa rõ lắm.
Bạn ơi, mình đã kiểm tra lại ạ: ví dụ mình thử xoá bớt đi 1 dữ liệu ở dòng cuối cùng của file minh hoạ gửi kèm theo thì khi chạy code kết quả báo là số ô liên tiếp ít nhất có dữ liệu vẫn là 2. Trong khi dòng cuối cùng này số ô ít nhấtg có dữ liệu chỉ là 1 ô ( ô được tô màu xanh lá cây). Mong bạn xem giúp lại ạ!
- Mình xin nói rõ yêu cầu của bài này là đếm số ô ít nhất liên tiếp chứa dữ liệu là bao nhiêu ô? Mình bắt đầu tính từ ô có dữ liệu mà trước ô đó phải có ô trống rồi đến ô dữ liệu!
- Mong GPE xem giúp, xin cảm ơn GPE và bạn RoberLiem!
 

File đính kèm

  • DEMSOODULIEU_ITNHAT.xlsm
    27.7 KB · Đọc: 40
ơ thế rốt cục là sep_hatxel cần viết hàm tự tạo hay là dùng Sub vậy ? tôi không mong chờ câu trả lời : "sao cũng được" .
 
suýt nữa "đập luôn" thì kịp nhìn thấy 2 nick khác nhau mà , không đại diện được . ////////////
He he he! ..
Thất nghiệp goài. làm thử
Mã:
Public Function Dem_It(DL As Range) As Long
Dim Tam As Long, i As Long, j As Long
Dem_It = 0
For i = 2 To DL.Columns.Count
If DL(1, i).Value = "" And DL(1, i - 1).Value <> "" Then
        For j = DL.Columns.Count To i Step -1
         If DL(1, j) = "" Then
            If Dem_It = 0 Then
                Dem_It = Tam
            Else
                If Dem_It > Tam And Tam > 0 Then Dem_It = Tam
            End If
            Tam = 0
        Else
         Tam = Tam + 1
        End If
        Next j
    Exit For
End If
Next i
End Function
 
Lần chỉnh sửa cuối:
He he he! ..
Thất nghiệp goài. làm thử
Mã:
Public Function Dem_It(DL As Range) As Long
Dim Tam As Long, i As Long, j As Long
Dem_It = 0
For i = 2 To DL.Columns.Count
If DL(1, i).Value = "" And DL(1, i - 1).Value <> "" Then
        For j = DL.Columns.Count To i Step -1
         If DL(1, j) = "" Then
            If Dem_It = 0 Then
                Dem_It = Tam
            Else
                If Dem_It > Tam And Tam > 0 Then Dem_It = Tam
            End If
            Tam = 0
        Else
         Tam = Tam + 1
        End If
        Next j
    Exit For
End If
Next i
End Function

thất nghiệp ? vậy những kẻ thất nghiệp chúng ta giao lưu đi , nhiều vòng lặp quá , bớt bớt chơi ?
 
Dạ, mong bạn giúp dùng Sub với ạ? xin cảm ơn bạn nhiều!

đại khái cứ thử

Mã:
Public Sub hello()
Dim arr, dArr(1 To 10000, 1 To 1) As Long, r As Long, tmpCount As Long, startCount As Boolean, c As Long
With Sheet4
    arr = .Range("G5:Z" & .[F10000].End(xlUp).Row).Value
    ReDim Preserve arr(1 To UBound(arr), 1 To UBound(arr, 2) + 1)
    For r = 1 To UBound(arr) Step 1
        startCount = False
        For c = 2 To UBound(arr, 2) Step 1
            If arr(r, c) <> "" Then
                If startCount Then tmpCount = tmpCount + 1
            Else
                If (tmpCount < dArr(r, 1) Or dArr(r, 1) = 0) And tmpCount > 0 Then dArr(r, 1) = tmpCount
                tmpCount = 0
                If arr(1, c - 1) <> "" Then startCount = True
            End If
        Next
    Next
    .Range("D5").Resize(UBound(arr)).Value = dArr
End With
End Sub
 
đại khái cứ thử

Mã:
Public Sub hello()
Dim arr, dArr(1 To 10000, 1 To 1) As Long, r As Long, tmpCount As Long, startCount As Boolean, c As Long
With Sheet4
    arr = .Range("G5:Z" & .[F10000].End(xlUp).Row).Value
    ReDim Preserve arr(1 To UBound(arr), 1 To UBound(arr, 2) + 1)
    For r = 1 To UBound(arr) Step 1
        startCount = False
        For c = 2 To UBound(arr, 2) Step 1
            If arr(r, c) <> "" Then
                If startCount Then tmpCount = tmpCount + 1
            Else
                If (tmpCount < dArr(r, 1) Or dArr(r, 1) = 0) And tmpCount > 0 Then dArr(r, 1) = tmpCount
                tmpCount = 0
                If arr(1, c - 1) <> "" Then startCount = True
            End If
        Next
    Next
    .Range("D5").Resize(UBound(arr)).Value = dArr
End With
End Sub
Vâng, chuẩn không cần chỉnh ạ! Xin cảm ơn bạn và GPE rất nhiều! Xin cảm ơn ạ!
 
Bạn ơi, mình đã kiểm tra lại ạ: ví dụ mình thử xoá bớt đi 1 dữ liệu ở dòng cuối cùng của file minh hoạ gửi kèm theo thì khi chạy code kết quả báo là số ô liên tiếp ít nhất có dữ liệu vẫn là 2. Trong khi dòng cuối cùng này số ô ít nhấtg có dữ liệu chỉ là 1 ô ( ô được tô màu xanh lá cây). Mong bạn xem giúp lại ạ!
- Mình xin nói rõ yêu cầu của bài này là đếm số ô ít nhất liên tiếp chứa dữ liệu là bao nhiêu ô? Mình bắt đầu tính từ ô có dữ liệu mà trước ô đó phải có ô trống rồi đến ô dữ liệu!
- Mong GPE xem giúp, xin cảm ơn GPE và bạn RoberLiem!

Thử thay cái sub cũ trong module thành cái này coi sao.
PHP:
Public Sub GPE_xyz()
Dim sArr(), dArr(), I As Long, J As Long, Num As Long
sArr = Range("G5:Z14").Value    '-----------Thay doi vung du lieu----'
ReDim dArr(1 To UBound(sArr), 1 To 1)
For I = 1 To UBound(sArr)
    dArr(I, 1) = 100: Num = 0
    For J = UBound(sArr, 2) To 2 Step -1
        If sArr(I, J) <> Empty Then
            Num = Num + 1
        Else
            If sArr(I, J - 1) <> Empty Then
                If Num > 0 And Num < dArr(I, 1) Then dArr(I, 1) = Num
                Num = 0
            End If
        End If
    Next J
Next I
Range("D5").Resize(I - 1) = dArr
End Sub
 
Web KT
Back
Top Bottom