Cần giúp code VBA đếm dữ liệu hàng loạt file excel

Liên hệ QC

nguyenanhdung8111982

Thành viên hoạt động
Tham gia
1/11/19
Bài viết
120
Được thích
33
Giới tính
Nam
Tôi có thấy đoạn code đếm hàng loạt file excel có bao nhiêu hàng. Giờ tôi muốn đếm hàng loạt file excel
theo cột chỉ định ví dụ đếm cột C từ C2 trở đi hoặc Cột F từ F2 trở đi và chỉ đếm những ô nào có dữ liệu, giống hàm CountA trong excel. Cám ơn cả nhà!!
File excel test đính kèm.

Sub CollectData()

Dim fso As Object, xlFile As Object
Dim sFolder$
Dim r&, j&

With Application.FileDialog(msoFileDialogFolderPicker)
.AllowMultiSelect = False
.InitialFileName = ThisWorkbook.Path
If .Show Then sFolder = .SelectedItems(1) Else Exit Sub
End With
Set fso = CreateObject("Scripting.FileSystemObject")
For Each xlFile In fso.GetFolder(sFolder).Files
With Workbooks.Open(xlFile.Path)
With .Sheets(1)
j = .Cells(.Rows.Count, 1).End(xlUp).Row
End With
.Close False
End With
r = r + 1
Cells(r, 1).Value = xlFile.Name
Cells(r, 2).Value = j
Next

End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
...theo cột chỉ định ví dụ đếm cột C từ C2 trở đi hoặc Cột F từ F2 trở đi ...
Muốn chỉ định bằng cách nào? Bằng hằng số hay bằng tham số?

(code bôi đậm đọc mỏi mắt bỏ bố. Cái sì tin bôi đậm code này quen quen, nhưng mà quên mất ở đâu)
 
Upvote 0
Thay:
Sub CollectData()
bằng:
Sub CollectMetaData(Optional ByVal targetCell As String = "A1")
Dim targetR As Long, targetC As Long
targetR = Range(targetCell).Row
targetC = Range(targetCell).Column

Và thay:
j = .Cells(.Rows.Count, 1).End(xlUp).Row
bằng:
j = .Cells(.Rows.Count, 1).End(xlUp).Row
j = Application.CountA(.Range(.Cells(targetR, targetC), .Cells(j, targetC))

Gọi hàm:
CollectMetaData "C2"

(thiệt ra vấn đề này dùng ADO xịn hơn nhưng mà có sẵn code này rồi, tội gì viết lại cái khác. Công việc này cũng đâu có thông dụng mà phải nhọc sức với code xịn)
 
Upvote 0
Thay:
Sub CollectData()
bằng:
Sub CollectMetaData(Optional ByVal targetCell As String = "A1")
Dim targetR As Long, targetC As Long
targetR = Range(targetCell).Row
targetC = Range(targetCell).Column

Và thay:
j = .Cells(.Rows.Count, 1).End(xlUp).Row
bằng:
j = .Cells(.Rows.Count, 1).End(xlUp).Row
j = Application.CountA(.Range(.Cells(targetR, targetC), .Cells(j, targetC))

Gọi hàm:
CollectMetaData "C2"

(thiệt ra vấn đề này dùng ADO xịn hơn nhưng mà có sẵn code này rồi, tội gì viết lại cái khác. Công việc này cũng đâu có thông dụng mà phải nhọc sức với code xịn)
Bạn gởi code đầy đủ đi, mình thay chạy bị lỗi. do không rành về lập trình !!!
 
Upvote 0
Thêm một dấu ngoặc ở sau dòng này:
j = Application.CountA(.Range(.Cells(targetR, targetC), .Cells(j, targetC)) )
Đếm cho đủ 4 dấu "(" và 4 dấu )"

Hoặc sửa nó thành:
j = Application.CountA(.Range(targetCell).Resize(j-.Range(targetCell).Row+1))
và bỏ 3 dòng này đi
Dim targetR As Long, targetC As Long
targetR = Range(targetCell).Row
targetC = Range(targetCell).Column
 
Upvote 0
Thêm một dấu ngoặc ở sau dòng này:
j = Application.CountA(.Range(.Cells(targetR, targetC), .Cells(j, targetC)) )
Đếm cho đủ 4 dấu "(" và 4 dấu )"

Hoặc sửa nó thành:
j = Application.CountA(.Range(targetCell).Resize(j-.Range(targetCell).Row+1))
và bỏ 3 dòng này đi
Dim targetR As Long, targetC As Long
targetR = Range(targetCell).Row
targetC = Range(targetCell).Column
Chạy ok rồi, cám ơn bạn nhiều!!!
 
Upvote 0
Thêm một dấu ngoặc ở sau dòng này:
j = Application.CountA(.Range(.Cells(targetR, targetC), .Cells(j, targetC)) )
Đếm cho đủ 4 dấu "(" và 4 dấu )"

Hoặc sửa nó thành:
j = Application.CountA(.Range(targetCell).Resize(j-.Range(targetCell).Row+1))
và bỏ 3 dòng này đi
Dim targetR As Long, targetC As Long
targetR = Range(targetCell).Row
targetC = Range(targetCell).Column
Mình sửa lại và thêm 2 dòng này chạy khá ổn
CA = Application.WorksheetFunction.CountA(.Range("C2:C" & j))
Cells(r, 2).Value = CA
Cám ơn bạn nhiều
 
Upvote 0
Web KT

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

Back
Top Bottom