Đếm số lần xuất hiện số ô trống trong hàng

Liên hệ QC

hcl_pt

Thành viên thường trực
Tham gia
21/10/10
Bài viết
208
Được thích
11
Mong các bạn giúp đỡ mình trường hợp này: CSDL ở sheet1, mình muốn đếm số lần xuất hiện số ô trống liên tiếp ở dòng dữ liệu A: ví dụ , số ô trống 1 mình đếm được trong dòng là có 8 lần xuất hiện thì kết quả đếm được xuất sang cột B (cột số lần xuất hiện) ở sheet2 ! Tương tự như vậy đếm số lần xuất hiện số ô trống 2, số ô trống 3,..v.v... kết quả đếm được xuất sang sheet2 ở cột B tương ứng với "Số ô trống liên tiếp ở cột A"! Rất mong sự giúp đỡ của các bạn! Xin cảm ơn!
 

File đính kèm

  • Demsolan_sootrong_xuathien.xlsx
    17 KB · Đọc: 21
Mình viết bằng VBA xong rồi đây bạn thử kiểm tra lại xem sao? (Hình như bạn đếm nhầm số lần xuất hiện của ô trống 1 đấy)
P/S: nhớ Enable marco nhé chúc vui vẻ!
 

File đính kèm

  • Bản sao của Demsolan_sootrong_xuathien.zip
    16.2 KB · Đọc: 39
Lần chỉnh sửa cuối:
Vâng! Cảm ơn bạn! Ý tưởng là như vậy đấy ạ! Mình cũng đã xem qua Code Nhưng sao khi mình tăng thêm dữ liệu trong dòng dữ liệu ở sheet1 (tăng thêm cột dữ liệu trong dòng) thì Kết quả ở sheet2 không đếm được nữa? Mong bạn chỉ giúp? Cảm ơn bạn rất nhiều!ếm e
 
Bạn định tăng thêm dữ liệu trong dòng kiểu gì vậy tăng thêm xen kẽ một vài dữ liệu vào các ô trong dòng, hay chuyển tham chiếu cho nhiều cột hơn vào dòng (nếu thêm cột bạn phải thay đổi lại tham chiếu vùng mình chọn nhé) mình đã kiểm tra thử của mình vẫn đúng mà
P/S: nhớ Enable marco và chọn tính toán tự động nhé. Chúc vui!!!!!!!!!!!!!!!!!
 
/)ùng fương thức nhảy cóc này sẽ lẹ làng hơn nè!

PHP:
Option Explicit
Function CountBlankCells(Num, fRng As Range)
 On Error GoTo LoiCT:                  Dim Col As Byte
 Dim BlankR As Range, lastCellOfValue As Range, Cls As Range
 
 Col = Cells(fRng.Row, "iU").End(xlToLeft).Column
 
 If fRng.Value = "" Then
   If fRng.End(xlToRight).Offset(, 1).Value = "" Then
      Set lastCellOfValue = fRng.End(xlToRight)
   ElseIf fRng.End(xlToRight).Offset(, 1).Value <> "" Then
      Set lastCellOfValue = fRng.End(xlToRight).End(xlToRight)
   End If
 ElseIf fRng.Value <> 0 Then
   If fRng.Offset(, 1).Value = "" Then
      Set lastCellOfValue = fRng
   Else
      Set lastCellOfValue = fRng.End(xlToRight)
   End If
 End If
 Do
   If lastCellOfValue.Offset(, 1).Column > Col Then Exit Do
   Set BlankR = Range(lastCellOfValue.Offset(, 1), lastCellOfValue.End(xlToRight))
   If BlankR.Cells.Count - 1 = Num Then CountBlankCells = 1 + CountBlankCells
   If BlankR(1).End(xlToRight).Offset(, 1).Value = "" Then
      Set lastCellOfValue = BlankR(1).End(xlToRight)
   Else
      Set lastCellOfValue = BlankR(1).End(xlToRight).End(xlToRight)
   End If
 Loop
Err_:          Exit Function
LoiCT:
   MsgBox Error, , Err & "; Erl" & Erl
   Resume Err_
 
End Function
Nó còn tự biết điểm dừng tại cột cuối của dòng có dữ liệu;
(Mình xài E2003 đó nha!)
 
PHP:
Option Explicit
Function CountBlankCells(Num, fRng As Range)
 On Error GoTo LoiCT:                  Dim Col As Byte
 Dim BlankR As Range, lastCellOfValue As Range, Cls As Range
 
 Col = Cells(fRng.Row, "iU").End(xlToLeft).Column
 
 If fRng.Value = "" Then
   If fRng.End(xlToRight).Offset(, 1).Value = "" Then
      Set lastCellOfValue = fRng.End(xlToRight)
   ElseIf fRng.End(xlToRight).Offset(, 1).Value <> "" Then
      Set lastCellOfValue = fRng.End(xlToRight).End(xlToRight)
   End If
 ElseIf fRng.Value <> 0 Then
   If fRng.Offset(, 1).Value = "" Then
      Set lastCellOfValue = fRng
   Else
      Set lastCellOfValue = fRng.End(xlToRight)
   End If
 End If
 Do
   If lastCellOfValue.Offset(, 1).Column > Col Then Exit Do
   Set BlankR = Range(lastCellOfValue.Offset(, 1), lastCellOfValue.End(xlToRight))
   If BlankR.Cells.Count - 1 = Num Then CountBlankCells = 1 + CountBlankCells
   If BlankR(1).End(xlToRight).Offset(, 1).Value = "" Then
      Set lastCellOfValue = BlankR(1).End(xlToRight)
   Else
      Set lastCellOfValue = BlankR(1).End(xlToRight).End(xlToRight)
   End If
 Loop
Err_:          Exit Function
LoiCT:
   MsgBox Error, , Err & "; Erl" & Erl
   Resume Err_
 
End Function
Nó còn tự biết điểm dừng tại cột cuối của dòng có dữ liệu;
(Mình xài E2003 đó nha!)
Bác SA_DQ ơi! Mong bác có thể gửi 1file được không ạ? Em đã làm với file cũ mà khong thấy chạy? Cảm ơn bác!
 
Bạn dùng cú fáp hàm như thế nào

(ó thể cũng là do mình chưa viết cú fáp hàm lên bài trên;

Tại ô trống nào đó trong 1 hàng khác bạn nhập cú f/áp =CountBlankCells(A11,B$5)

Ở đây [A11] là trị cần tìm; [B$5] lả ô đầu tiên của hàng cần tìm, không kể nó là trống rỗng hay có số liệu.
 
(ó thể cũng là do mình chưa viết cú fáp hàm lên bài trên;

Tại ô trống nào đó trong 1 hàng khác bạn nhập cú f/áp =CountBlankCells(A11,B$5)

Ở đây [A11] là trị cần tìm; [B$5] lả ô đầu tiên của hàng cần tìm, không kể nó là trống rỗng hay có số liệu.
Bác SA_DQ ơi! Cảm ơn bác rất nhiều! Nhưng em rất không hiểu vì sao excel2003 thì chạy được mà excel2007 lại không dùng được ạ? Vì em muốn đếm trong trường hợp dòng có nhiều dữ liệu. Chúc bác một ngày mới tốt lành!
 
/-)ó là fụ thuộc vô 2 dòng lệnh

PHP:
            Dim Col As Byte  
  
 Col = Cells(fRng.Row, "iU").End(xlToLeft).Column

Bạn tăng lên tương ứng với số cột trong E2007 là OK thôi
 
Bạn định tăng thêm dữ liệu trong dòng kiểu gì vậy tăng thêm xen kẽ một vài dữ liệu vào các ô trong dòng, hay chuyển tham chiếu cho nhiều cột hơn vào dòng (nếu thêm cột bạn phải thay đổi lại tham chiếu vùng mình chọn nhé) mình đã kiểm tra thử của mình vẫn đúng mà
P/S: nhớ Enable marco và chọn tính toán tự động nhé. Chúc vui!!!!!!!!!!!!!!!!!
Vâng! Rất mong bác ChanhTQ@ tha lỗi (http://www.giaiphapexcel.com/forum/showthread.php?55519-Mong-giúp-đỡ-về-công-thức ), vì em chỉ muốn tìm hiểu thêm Công thức thôi khi mày mò muốn tự phát triển thêm bài này! Bạn Phan Ngoc Lan có thể giúp mình dạng thứ 2 được không ạ? Cách làm như bạn đã làm bên trên nhưng file mình gửi kèm theo có định dạng khác đi về phần kết quả và thêm nhiều hàng dữ liệu ở sh1! Rất mong sự giúp đỡ của các bạn! Xin cảm ơn!
 

File đính kèm

  • File2_Demsolan_sootrong_xuathien.xlsx
    17.1 KB · Đọc: 8
Mình chỉ bạn cách sửa lại hàm tự tạo CounBlankCells() như sau

PHP:
Option Explicit
Function CountBlankCells(Num, fRng As Range)
 On Error GoTo LoiCT:                  Dim Col As Long   '<=|'
 Dim BlankR As Range, lastCellOfValue As Range, Cls As Range
 Dim Sh As Worksheet
 
 Set Sh = ThisWorkbook.Worksheets(fRng.Parent.Name) '<=|'
 Col = Sh.Cells(fRng.Row, "iU").End(xlToLeft).Column'<=|'
 
 If fRng.Value = "" Then
'. . . . . . . '

Sau đó tại [D3] bạn thiết lập công thức =CountBlankCells(D$2,Sheet1!$B4)

Dùng chức năng FillDown chép xuống ô [D19]
Sau đó tô chọn từ [D3..D19] & cũng chép sang các cột, cho tới cột mà tại dòng 2 có số 20 thôi, (chép nữa e bạn mõi tay!)
/(hi đó tại [T16] ta có công thức =CountBlankCells(T$2,Sheet1!$B17)
& kết quả trả về từ công thức là con số 1 tròn trĩnh như vài anh ở trên nó!

Chúc thành công.

 
Lần chỉnh sửa cuối:
Vâng! Rất mong bác ChanhTQ@ tha lỗi (http://www.giaiphapexcel.com/forum/showthread.php?55519-Mong-giúp-đỡ-về-công-thức ), vì em chỉ muốn tìm hiểu thêm Công thức thôi khi mày mò muốn tự phát triển thêm bài này! Bạn Phan Ngoc Lan có thể giúp mình dạng thứ 2 được không ạ? Cách làm như bạn đã làm bên trên nhưng file mình gửi kèm theo có định dạng khác đi về phần kết quả và thêm nhiều hàng dữ liệu ở sh1! Rất mong sự giúp đỡ của các bạn! Xin cảm ơn!
Theo mình, bài này xử nó bằng một thủ tục có vẻ hợp lý hơn
Mã:
Private Sub Worksheet_Activate()
    Dim Vung, Dem, I, J, Mg()
    Vung = Sheets("sheet1").Range(Sheets("sheet1").[A4], Sheets("sheet1").[a100000].End(xlUp)).Resize(, 89).Value
    ReDim Mg(1 To UBound(Vung, 1), 1 To UBound(Vung, 2))
        For I = 1 To UBound(Vung, 1)
            For J = 2 To UBound(Vung, 2)
                If Vung(I, J) = vbNullString Then
                    Dem = Dem + 1
                ElseIf Vung(I, J) <> vbNullString And Dem > 0 Then
                    Mg(I, Dem) = Mg(I, Dem) + 1
                    Dem = 0
                End If
            Next J
            Dem = 0
        Next I
    Range([b3], [b100000].End(xlUp)).Offset(, 1).Resize(, 89).ClearContents
    [d3].Resize(UBound(Vung, 1), UBound(Vung, 2) - 1) = Mg
End Sub
Bạn thử thêm dữ liệu ở sheet1, chọn sheet2 kiểm tra kết quả thử xem nhé
Chỉ có cái "hổng" hiểu: đếm số lần xuất hiện khoảng trắng = 0 là bạn muốn đếm như thế nào ???. Híc
(Bằng 0 là không xuất hiện, không xuất hiện thì đếm ra mần răng ?)
Thân
 

File đính kèm

  • File2_Demsolan_sootrong_xuathien(1).rar
    20.5 KB · Đọc: 10
/-)nh (ò Già nhà tôi ơi!

Khoảng trống bằng không có thể tác gia đưa vô cho vui cửa nhà thôi; chứ ngữ í có thể đếm bằng hàm của excel mà!

Chỉ có cái "hổng" hiểu: đếm số lần xuất hiện khoảng trắng = 0 là bạn muốn đếm như thế nào ???. Híc
(Bằng 0 là không xuất hiện, không xuất hiện thì đếm ra mần răng ?)
 
Theo mình, bài này xử nó bằng một thủ tục có vẻ hợp lý hơn
Mã:
Private Sub Worksheet_Activate()
    Dim Vung, Dem, I, J, Mg()
    Vung = Sheets("sheet1").Range(Sheets("sheet1").[A4], Sheets("sheet1").[a100000].End(xlUp)).Resize(, 89).Value
    ReDim Mg(1 To UBound(Vung, 1), 1 To UBound(Vung, 2))
        For I = 1 To UBound(Vung, 1)
            For J = 2 To UBound(Vung, 2)
                If Vung(I, J) = vbNullString Then
                    Dem = Dem + 1
                ElseIf Vung(I, J) <> vbNullString And Dem > 0 Then
                    Mg(I, Dem) = Mg(I, Dem) + 1
                    Dem = 0
                End If
            Next J
            Dem = 0
        Next I
    Range([b3], [b100000].End(xlUp)).Offset(, 1).Resize(, 89).ClearContents
    [d3].Resize(UBound(Vung, 1), UBound(Vung, 2) - 1) = Mg
End Sub
Bạn thử thêm dữ liệu ở sheet1, chọn sheet2 kiểm tra kết quả thử xem nhé
Chỉ có cái "hổng" hiểu: đếm số lần xuất hiện khoảng trắng = 0 là bạn muốn đếm như thế nào ???. Híc
(Bằng 0 là không xuất hiện, không xuất hiện thì đếm ra mần răng ?)
Thân
Vâng! Được như thế này là Tuyệt vời quá rồi ạ! Cảm ơn bác Concogia nhiều quá! Và cảm ơn các bạn đã giúp đỡ! Chúc các bạn luôn thành công!
 
Web KT

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

Back
Top Bottom