Nhờ các bạn giúp mình hàm coutif VBA

Liên hệ QC
Tham gia
30/7/06
Bài viết
409
Được thích
372
Nghề nghiệp
GTVT
Hiện mình có ghi Reccord nhưng chạy chậm nhờ các bạn sữa lại đoạn code sau:
Sub Countif_Col_AC()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
Application.AskToUpdateLinks = False
Dim Lr As Long
Dim i As Integer
With Sheet1
Lr = Sheet1.Range("I" & Rows.Count).End(xlUp).Row
'Sheet1.Range("AC:AC" & Lr).ClearContents
For i = 3 To Lr
Range("AC" & i).Select
ActiveCell.FormulaR1C1 = _
"=IF(RC[-20]<>"""",COUNTIF(RC[-12]:RC[-1],""x""),"""")"
Range("AC" & i).Select
' Selection.AutoFill Destination:=Range("AC3:AC" & i)
'Range("AC3:AC" & i).Select
Next i
End With
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.Calculation = xlCalculationAutomatic
Application.AskToUpdateLinks = True
End Sub
 
Hiện mình có ghi Reccord nhưng chạy chậm nhờ các bạn sữa lại đoạn code sau:
Sub Countif_Col_AC()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
Application.AskToUpdateLinks = False
Dim Lr As Long
Dim i As Integer
With Sheet1
Lr = Sheet1.Range("I" & Rows.Count).End(xlUp).Row
'Sheet1.Range("AC:AC" & Lr).ClearContents
For i = 3 To Lr
Range("AC" & i).Select
ActiveCell.FormulaR1C1 = _
"=IF(RC[-20]<>"""",COUNTIF(RC[-12]:RC[-1],""x""),"""")"
Range("AC" & i).Select
' Selection.AutoFill Destination:=Range("AC3:AC" & i)
'Range("AC3:AC" & i).Select
Next i
End With
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.Calculation = xlCalculationAutomatic
Application.AskToUpdateLinks = True
End Sub
1/ Bạn nên đưa code vào thẻ code cho gọn.
2/ Đây là bạn gán công thức vào chứ đâu phải code thay cho hàm Countif.

Nhờ các bạn giúp mình hàm coutif VBA​

Mà hình như excel không có hàm này thì phải bạn ơi.
 
Lần chỉnh sửa cuối:
Upvote 0
Code này chưa chắc chạy ra đúng kết quả. Chưa nói đến việc nhanh chậm.

With Sheet1
Lr = Sheet1.Range("I" & Rows.Count).End(xlUp).Row
'Sheet1.Range("AC:AC" & Lr).ClearContents
For i = 3 To Lr
Range("AC" & i).Select
ActiveCell.FormulaR1C1 = _
"=IF(RC[-20]<>"""",COUNTIF(RC[-12]:RC[-1],""x""),"""")"
Range("AC" & i).Select
' Selection.AutoFill Destination:=Range("AC3:AC" & i)
'Range("AC3:AC" & i).Select
Next i
End With

Các Range bên trong block With chả cái nào có dấu chấm, vì vậy chúng mặc định là thuộc về ActiveSheet. Cái vụ With Sheet1 là thừa thải.


For i = 3 To Sheet1.Range("I" & Rows.Count).End(xlUp).Row
Cells(i, "AC").FormulaR1C1 = "=IF(RC[-20]<>"""",COUNTIF(RC[-12]:RC[-1],""x""),"""")"
Next i
Cells(i - 1, "AC").Select

Hàm CountIf là hàm tổng hợp. Xài cho cả một cột thì đương nhiên là chậm.
 
Upvote 0
@Tác giả bài đăng:
Sao bạn lại lắp công thức toàn cột (hình như là 'AC' thì phải) khi 1 cột nào đó trước nó không rỗng
Theo mình bạn nên tìm đúng số ô (trong vùng cần đếm) của 1 dòng thỏa điều kiện & ghi số liệu lên cột cần tìm mà thôi;
Ghi công thức theo mình thì nặng là phải rồi!

& khi xài VBA thì theo mình thì không đưa điều kiện 'không trống' vào công thức
Mà thêm điều kiện không trống này trong dòng lệnh như: Nếu ô điều kiện không trống thì đếm & ghi (còn trống thì thôi)
 
Upvote 0
@Tác giả bài đăng:
Sao bạn lại lắp công thức toàn cột (hình như là 'AC' thì phải) khi 1 cột nào đó trước nó không rỗng
Theo mình bạn nên tìm đúng số ô (trong vùng cần đếm) của 1 dòng thỏa điều kiện & ghi số liệu lên cột cần tìm mà thôi;
Ghi công thức theo mình thì nặng là phải rồi!

& khi xài VBA thì theo mình thì không đưa điều kiện 'không trống' vào công thức
Mà thêm điều kiện không trống này trong dòng lệnh như: Nếu ô điều kiện không trống thì đếm & ghi (còn trống thì thôi)
Đúng vậy mình tìm với điều khiện khác rỗng. có lè vì lý do vậy mà chạy nặng
Chân thành cám ơn các bạn đã quan tâm và giúp mình
 
Upvote 0
Bạn đưa file cụ thể lên có khi tham khảo thêm được một số đoạn code khác.
Bạn chép bảng này vô Excel mà giúp em nó nè:

MÃ NVHỌ VÀ TÊNCV23456789101112131415161718192021Ghi Kết quả
774GPE_ 9CTxxxxxxxxxxxxxxxxxxxx
809GPE_ 30CTxxxxxxxxxxxxxxxxxx
1440GPE_ 4CTxxxxxxxxxxxxxxxx
1448GPE_ 19CTxxxxxxxxxxxx
2466GPE_ 8CTxxxxxxxxxxxx
2633GPE_ 11CTxxxxxxxxxxxx
2797GPE_ 12CTxxxxxxxxxxxxxx
2832GPE_ 18CTxxxxxxxxxxxxxx
3205GPE_ 22TSxxxxxxxxxxxxxx
3487GPE_ 2CTxxxxxxxxxxxxxxxx
3573GPE_ 15CTxxxxxxxxxxxxxxxx
3850GPE_ 3CTxxxxxxxxxxxxxxxx
3874GPE_ 1TSxxxxxxxxx
3883GPE_ 13CTxxxxxxxxx
3986GPE_ 20CTxxxxxxxxx
4351GPE_ 23CTxxxxxxxxx
4781GPE_ 21CTxxxxxxxxx
4898GPE_ 17CTxxxxxxxxxxxxxxxx
4921GPE_ 24CTxxxxxxxxxxxxxxxx
4965GPE_ 25CTxxxxxxxxxxxxxxxx
5135GPE_ 16TVxxxxxxxxxxxxxxxx
5325GPE_ 5xxxxxxxxxxxxxxxxxxx
5337GPE_ 26CTxxxxxxxxxxxxxxxxxxx
5369GPE_ 14CTxxxxxxx
5434GPE_ 7TVxxxxxxx
5435GPE_ 6xxxxxxxxxxxxxxxxxxx
5436GPE_ 10CTxxxxxxxxxxxxxxxxxxx

Yêu cầu sẽ là: Đếm số lượng 'x' khi cột 'CV' không rỗng (hay ngược lại, nếu muốn)
 
Upvote 0
Bạn chép bảng này vô Excel mà giúp em nó nè:

MÃ NVHỌ VÀ TÊNCV23456789101112131415161718192021Ghi Kết quả
774GPE_ 9CTxxxxxxxxxxxxxxxxxxxx
809GPE_ 30CTxxxxxxxxxxxxxxxxxx
1440GPE_ 4CTxxxxxxxxxxxxxxxx
1448GPE_ 19CTxxxxxxxxxxxx
2466GPE_ 8CTxxxxxxxxxxxx
2633GPE_ 11CTxxxxxxxxxxxx
2797GPE_ 12CTxxxxxxxxxxxxxx
2832GPE_ 18CTxxxxxxxxxxxxxx
3205GPE_ 22TSxxxxxxxxxxxxxx
3487GPE_ 2CTxxxxxxxxxxxxxxxx
3573GPE_ 15CTxxxxxxxxxxxxxxxx
3850GPE_ 3CTxxxxxxxxxxxxxxxx
3874GPE_ 1TSxxxxxxxxx
3883GPE_ 13CTxxxxxxxxx
3986GPE_ 20CTxxxxxxxxx
4351GPE_ 23CTxxxxxxxxx
4781GPE_ 21CTxxxxxxxxx
4898GPE_ 17CTxxxxxxxxxxxxxxxx
4921GPE_ 24CTxxxxxxxxxxxxxxxx
4965GPE_ 25CTxxxxxxxxxxxxxxxx
5135GPE_ 16TVxxxxxxxxxxxxxxxx
5325GPE_ 5xxxxxxxxxxxxxxxxxxx
5337GPE_ 26CTxxxxxxxxxxxxxxxxxxx
5369GPE_ 14CTxxxxxxx
5434GPE_ 7TVxxxxxxx
5435GPE_ 6xxxxxxxxxxxxxxxxxxx
5436GPE_ 10CTxxxxxxxxxxxxxxxxxxx

Yêu cầu sẽ là: Đếm số lượng 'x' khi cột 'CV' không rỗng (hay ngược lại, nếu muốn)
Anh bỏ công tạo dữ liệu thế này nhưng chưa chắc giống dữ liệu của chủ bài đâu anh.
 
Upvote 0
Giống thì không thể nào, nhưng giả lập thì đúng phóc đó nha!
Chỉ là chưa đúng cột thôi;
(/ì trái tim của macro là câu lệnh này:
Mã:
ActiveCell.FormulaR1C1 = "=IF(RC[-20]<>"""",COUNTIF(RC[-12]:RC[-1],""x""),"""")"
Tâm thất thì cột 'AC'
Tâm nhỉ thì đâu trước đó 20 hay xung quanh đâu đó ô;
Nhưng cái đó người biết Code sẽ sửa được mà!
:D :D :D

[Nói thêm] bảng đó do mình cắt dán từ 1 file khác & mòn chuột lôi kéo xíu là ra thôi!
 
Upvote 0
Giống thì không thể nào, nhưng giả lập thì đúng phóc đó nha!
Chỉ là chưa đúng cột thôi;
(/ì trái tim của macro là câu lệnh này:
Mã:
ActiveCell.FormulaR1C1 = "=IF(RC[-20]<>"""",COUNTIF(RC[-12]:RC[-1],""x""),"""")"
Tâm thất thì cột 'AC'
Tâm nhỉ thì đâu trước đó 20 hay xung quanh đâu đó ô;
Nhưng cái đó người biết Code sẽ sửa được mà!không ý kiến ý cò gì cả.
:D :D :D

[Nói thêm] bảng đó do mình cắt dán từ 1 file khác & mòn chuột lôi kéo xíu là ra thôi!
Nhưng em thấy chủ bài cũng thờ ơ với chính bài của mình thì phải, đến tên hàm ở tiêu đề còn viết sai, ngoài ra thấy lượn quanh suốt mà cũng không ý kiến ý cò gì cả.
 
Upvote 0
Nhưng em thấy chủ bài cũng thờ ơ với chính bài của mình thì phải, đến tên hàm ở tiêu đề còn viết sai, ngoài ra thấy lượn quanh suốt mà cũng không ý kiến ý cò gì cả.
Thớt nói là ghi record macro nhưng code thì sửa tùm lum. Chả biết cái nào đúng, cái nào do sửa.
 
Upvote 0
[Đăng lộn chuồng & xin lỗi các bác!]
$$$$@
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn chép bảng này vô Excel mà giúp em nó nè:

MÃ NVHỌ VÀ TÊNCV23456789101112131415161718192021Ghi Kết quả
774GPE_ 9CTxxxxxxxxxxxxxxxxxxxx
809GPE_ 30CTxxxxxxxxxxxxxxxxxx
1440GPE_ 4CTxxxxxxxxxxxxxxxx
1448GPE_ 19CTxxxxxxxxxxxx
2466GPE_ 8CTxxxxxxxxxxxx
2633GPE_ 11CTxxxxxxxxxxxx
2797GPE_ 12CTxxxxxxxxxxxxxx
2832GPE_ 18CTxxxxxxxxxxxxxx
3205GPE_ 22TSxxxxxxxxxxxxxx
3487GPE_ 2CTxxxxxxxxxxxxxxxx
3573GPE_ 15CTxxxxxxxxxxxxxxxx
3850GPE_ 3CTxxxxxxxxxxxxxxxx
3874GPE_ 1TSxxxxxxxxx
3883GPE_ 13CTxxxxxxxxx
3986GPE_ 20CTxxxxxxxxx
4351GPE_ 23CTxxxxxxxxx
4781GPE_ 21CTxxxxxxxxx
4898GPE_ 17CTxxxxxxxxxxxxxxxx
4921GPE_ 24CTxxxxxxxxxxxxxxxx
4965GPE_ 25CTxxxxxxxxxxxxxxxx
5135GPE_ 16TVxxxxxxxxxxxxxxxx
5325GPE_ 5xxxxxxxxxxxxxxxxxxx
5337GPE_ 26CTxxxxxxxxxxxxxxxxxxx
5369GPE_ 14CTxxxxxxx
5434GPE_ 7TVxxxxxxx
5435GPE_ 6xxxxxxxxxxxxxxxxxxx
5436GPE_ 10CTxxxxxxxxxxxxxxxxxxx

Yêu cầu sẽ là: Đếm số lượng 'x' khi cột 'CV' không rỗng (hay ngược lại, nếu muốn)
Hôm qua có bạn VetMini đã hướng dẫn này mình chỉ biết làm vậy
 

File đính kèm

  • Bang cham cong VBA.xlsm
    22.8 KB · Đọc: 8
Upvote 0
Web KT

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

Back
Top Bottom