Đếm bỏ quan ô trống

Liên hệ QC

connhangheo

Thành viên thường trực
Tham gia
18/5/07
Bài viết
214
Được thích
225
Nghề nghiệp
Sinh Viên
Em viết 1 hàm để đếm số lần lặp lại của 1 ô nào đó. Bây giờ giữa các ô đó có ô trống, vậy cho em hỏi làm thế nào để cho biến chạy của mình không đếm ô trống (yêu cầu không xoá ô trống).thanks các bác trước
Cho em hỏi thêm vấn đề nữa là làm thế nào đếm được dữ liệu khi mình chọn vùng ko liền kề. (em ko biết khi chọn vùng ko liền kề thì số thứ tự của cell như thế nào). Em gửi kèm file các bác xem giúp.
 

File đính kèm

Lần chỉnh sửa cuối:
Vì Counta B2:B103 = 22. Công thức offset của bạn tình từ ô B2 xuống 22 dòng tức là B23. Repeat từ B2 đến B23 = 10. còn ct repeat B2:27 = 12 => khác nhau.
Câu 2 chưa nghĩ ra.
 
Upvote 0
hi, Kết quả là 10 thì Salam trả lời rùi.
Còn kết quả 12, thì nhu sau :
B4 <> b5 : ta duoc 1
b6 <> b7 : duoc thêm 1, là 2
b8 <> b9, b10 <> b11, dược 2 nữa là 4 nhá
b12 <> b13, b13 <>b14,b15<>b16 : được 3 nữa là 7 nhá
b16 <> 17, và b17 <>b18 : dược 2 nữa là 9 nhá
b19<> 20 , b21 <>b22 : dược 2 nữa là 11 nhá
b23<>b24, và b26 <> b17 : được 2 nữa là 13 nhá

Đúg lý ra là =repeat(B2:B27) phải có kết quả 13, nhưng do bạn đã cho biến dem = 1 trước rùi, đúng về logic, thì biến đếm phải = 0, thì kết quả sẽ ra 13
Còn cái chỗ trả kết quả về, sao lại là repeat = a- dem nhỉ ? không hiểu cái chỗ này,
dúng ra là phải trả về kết quả là biến Dem chứ ! (repeat = dem)
Mã:
Function repeat(vung As Range) As Integer
    Dim a As Integer, i As Integer, dem As Integer
    a = vung.Rows.Count
    dem = 0
    For i = 1 To a - 1
     If vung.Cells(i + 1) <> vung.Cells(i) Then
      dem = dem + 1
     End If
    Next i
    repeat = dem
End Function
 
Lần chỉnh sửa cuối:
Upvote 0
hàm này mình dùng để tính tổng số lần lặp lại nên biến đếm fair bằng 1 bạn ah, biến dem là để đếm số ô khác nhau mà
Câu hỏi thứ nhất thế là okei, còn câu hỏi thứ 2 bác nào giúp em cái nhỉ :)
 
Upvote 0
Mình có lời giải câu 2 bằng macro đây

Bạn thử tìm cách biến sang hàm tự tạo xem sao!
Ô 'B5' sẽ ghi tạm kết quả, bạn có thể thay bằng ô khác trong trang tính cho sự iêu thích của mình.
Mã:
Option Explicit
[B]Sub MyCount()[/B]
    AllCount Range("B5"), Range("A2:A90"), Range("C2:C11")
[B]End Sub[/B]
PHP:
Sub AllCount(Clls As Range, Rng As Range, Optional oRng As Range)
 Dim lRow As Long, Wz As Long:      Dim Temp, lDem As Long
  
 Columns("IV").ClearContents:                Application.ScreenUpdating = False
 Rng.Copy Destination:=Range("IV1")
 If Not oRng Is Nothing Then _
    oRng.Copy Destination:=Range("IV" & Range("IV65432").End(xlUp).Row + 1)
 Columns("IV:IV").Select
 Selection.Sort Key1:=Range("IV1"), Order1:=xlDescending, Header:=xlGuess _
    , OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal
 lRow = Range("IV65432").End(xlUp).Row
 For Wz = 1 To lRow
    If Temp <> Cells(Wz, 256) Then
        Temp = Cells(Wz, 256):          lDem = 1 + lDem
    End If
 Next Wz
 Columns("IV").ClearContents:           Clls.ClearContents
 Application.ScreenUpdating = True
 msgbox Str(lDem):                      Clls = lDem
End Sub
Orchid.jpg
 

File đính kèm

Upvote 0
Cho em hỏi 1 chút với ah. Em sử dụng office 2007, khi gõ hàm repeat thì nó không nhận. Liệu có phải Excel 2007 không hỗ trợ hàm này không ah?
 
Upvote 0
thiensu_coi đã viết:
Cho em hỏi 1 chút với ah. Em sử dụng office 2007, khi gõ hàm repeat thì nó không nhận. Liệu có phải Excel 2007 không hỗ trợ hàm này không ah?
Bạn không đọc các bài trên sao. hàm repeat ở đây là hàm tự tạo. Viết code trong VBE. Bạn có thể xem trong file của connhanheo (alt+f11) hoặc xem bài của vumian có code ngay trên bài đó.
 
Upvote 0
cho em hỏi bây h muốn đếm số người có 2 lần lặp trở lên thì làm thế nào??? (tức là đếm số người xuất hiện 2 lần trở lên). thanks
 
Upvote 0
Ví dụ A1:A100 chứa danh sách họ tên, Ở ô B1=countif($A$1:$A$100,A1)>1 fill xuống B100, sau đó lọc những cell có giá trị từ 2 trở lên. Hoặc dùng CF để tô màu với công thức trên.
 
Upvote 0
Không bít thế này có đúng yêu cầu của bạn
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom