Thiết lập ban đầu
Tôi đã xây dựng một ví dụ nhỏ sẽ giúp bạn có được những gì bạn đang tìm kiếm. Đầu tiên tôi thiết lập một vài tệp excel trong một thư mục trong đó một số chứa chuỗi "abc" và một số thì không. Tôi đặt một số thứ không chỉ là "abc" và trong các trang tính khác nhau trong cùng một sổ làm việc. Điều này sẽ mô phỏng chính xác những gì bạn có.
Chỉ cho bạn cách nó hoạt động sau khi hoàn thành

Bạn phải cung cấp thư mục ban đầu như tôi có trong ô A2.
Mã hóa
Ban đầu, chúng tôi thiết lập một vòng lặp để đi qua tất cả các tệp là các tệp excel với dòng này:
fileName = Dir(directory & "*.xl??")
Khi mỗi tên tệp được tìm thấy, chúng tôi mở nó bằng cách sử dụng:
Dim wbk As Workbook
With wbk
Set wbk = Workbooks.Open(directory & fileName)
End With
Với mỗi sổ làm việc mở, chúng tôi sử dụng lệnh cell.find để tìm kiếm chuỗi của chúng tôi và thực hiện điều này thông qua mỗi trang tính. Nếu có một trận đấu, thì chúng ta sẽ tăng bộ đếm biến của mình lên một:
For Each sh In wbk.Worksheets
Set found = sh.Cells.Find(what:="abc", LookIn:=xlFormulas)
If Not found Is Nothing Then
sh.Activate
found.Select
count = count + 1
Else
End If
Next sh
Cuối cùng, hãy đảm bảo đóng từng sổ làm việc trước khi sang trang tiếp theo, vì vậy chúng tôi không gặp vấn đề về bộ nhớ khi có quá nhiều sổ làm việc mở:
wbk.Close
Đây là tất cả các mã được đặt cùng nhau:
Sub LoopThroughFiles()
Range("'Sheet1'!A6:A10000").ClearContents
Dim directory As String, fileName As String, sheet As Worksheet, i As Integer, j As Integer
directory = "C:\Users\wzcj9x\Desktop\New folder\"
fileName = Dir(directory & "*.xl??")
i = 5
Do While fileName <> ""
i = i + 1
If fileName <> "" Then
Dim wbk As Workbook
With wbk
Set wbk = Workbooks.Open(directory & fileName)
End With
Dim sh As Worksheet
Dim found As Range
Dim count As Integer
For Each sh In wbk.Worksheets
Set found = sh.Cells.Find(what:="abc", LookIn:=xlFormulas)
If Not found Is Nothing Then
sh.Activate
found.Select
count = count + sh.Range(found.Address).Offset(0, 3).Value
Else
End If
Next sh
wbk.Close
End If
fileName = Dir()
Loop
Range("'Sheet1'!C2").Value = count
End Sub
Bạn chỉ cần chạy macro và nó sẽ tạo ra số đếm cho bạn. Nếu bạn chỉ muốn tạo ra số lượng 1 trên mỗi sổ làm việc, bất kể nó tồn tại bao nhiêu lần trong sổ làm việc, thì rất dễ dàng để sửa đổi phương pháp đếm của tôi.
Hãy cho tôi biết nếu bạn có bất kỳ câu hỏi nào nhưng hy vọng điều này sẽ giúp bạn đi đúng hướng ít nhất.
Cập nhật
Tôi đã cập nhật câu hỏi của mình để trả về giá trị là 3 ô bên phải của ô được tìm thấy và cộng tất cả các ô đó lại với nhau. Điều này phù hợp với bản cập nhật mới của người hỏi.
Cập nhật khác dựa trên ý kiến
Tôi đã sửa đổi mã của mình để chỉ tổng hợp giá trị tối đa đáp ứng các tiêu chí trên sổ làm việc và sau đó chỉ thêm các giá trị đó lại với nhau:
Dim max As Integer
max = 0
For Each sh In wbk.Worksheets
Set found = sh.Cells.Find(what:="abc", LookIn:=xlFormulas)
If Not found Is Nothing Then
sh.Activate
found.Select
If sh.Range(found.Address).Offset(0, 3).Value > max Then
max = sh.Range(found.Address).Offset(0, 3).Value
End If
Else
End If
Next sh
count = count + max
wbk.Close