Làm cách nào để Tìm kiếm nhiều tệp cho giá trị tương ứng với văn bản trong cùng một hàng trong Excel?


0

Tôi biết đây là một sự giúp đỡ trắng trợn cho tôi đăng, nhưng tôi đã được giao nhiệm vụ này và tôi không biết làm thế nào để hoàn thành nó kịp thời.

Tôi có kiến ​​thức vừa phải về excel, nhưng tôi không biết bất kỳ VBA nào. Tôi đã học C ++ vì vậy tôi hiểu mã và đặc biệt là logic đằng sau mã.

Nhiệm vụ cần phải làm là: Chúng tôi là một công ty khởi nghiệp nhỏ chuyên bán đồ chơi giáo dục. Tổng cộng có 8 sản phẩm. Vì vậy, rõ ràng không ai giữ một kiểm đếm hàng hóa của chúng tôi bán mặt hàng khôn ngoan. Chúng tôi có hơn 200 hóa đơn liệt kê mỗi giao dịch. Bây giờ tôi cần một cách để tìm kiếm trong tất cả các tệp này cho một chuỗi văn bản, ví dụ: "superuser" và sau đó cho tôi số trong cột bên cạnh để tìm định dạng hóa đơn nhất định và trong cột 3 ở bên phải (chỉ mục cột số 4 nếu sử dụng vlookup) cho định dạng khác. Có, chúng tôi có hai định dạng cho một số lý do. Tôi có thể tách hai định dạng thành các thư mục khác nhau.

Có cách nào để làm điều này mà không cần mở thủ công từng tệp và sau đó giữ một kiểm đếm không?

dit: Tất cả các tệp đều là excel và chúng sẽ trông như thế này http://imgur.com/L0anPQ6 (đây không may là bản xuất pdf, tôi không thể truy cập vào bản gốc hiện tại) Hình ảnh Tôi cần là nếu chuỗi được tìm thấy là EDGE - Jungle Safari, sau đó tôi cần giá trị 64 và giá trị 10. Về cơ bản giá trị dưới QTY trong hàng tương ứng.


Bạn có thể đăng một mockup dữ liệu (một vài hàng) để hiểu bạn hơn không?
jcbermu

Mỗi tập tin là một tập tin excel đúng? Không có trường số lượng nào trong mỗi tệp excel?
Eric F

Tất cả các tệp đều là excel và chúng sẽ trông như thế này (đây không may là bản xuất pdf, hiện tại tôi không thể truy cập vào bản gốc) Ảnh Tôi cần là gì nếu chuỗi được tìm thấy là EDGE - Jungle Safari, sau đó tôi cần giá trị 64 và giá trị 10.
Shaurya K

Câu trả lời:


1

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

nhập mô tả hình ảnh ở đây

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

Này này thực sự gần với những gì tôi cần! Tôi chỉ cần một cái gì đó khác xảy ra khi chuỗi được tìm thấy. Tất cả các tệp đều là excel và chúng sẽ trông như thế này (đây không may là bản xuất pdf, hiện tại tôi không thể truy cập vào bản gốc) Ảnh Tôi cần là gì nếu chuỗi được tìm thấy là EDGE - Jungle Safari, sau đó tôi cần giá trị 64 và giá trị 10. Tôi rất thích có thể tự làm điều này nhưng hiện tại tôi đang trong quá trình học VBA. Ngoài ra làm thế nào để bạn chèn hình ảnh trong ý kiến ​​của bạn?
Shaurya K

Sau đó, nơi tôi có "đếm = đếm + 1" đặt bất cứ thứ gì khác vào đó. Đó là điều kiện được kích hoạt mỗi khi chuỗi được tìm thấy. (Tôi không biết "cái gì khác" của bạn là gì). Tôi tin rằng tôi đã trả lời câu hỏi của bạn trong tay mà bạn đã hỏi ở đây mặc dù.
Eric F

cập nhật bình luận của tôi
Shaurya K

@ShauryaK Nếu nó trả lời câu hỏi ban đầu của bạn, vui lòng đánh dấu nó là một câu trả lời và cung cấp cho nó một upvote nếu nó giúp. Nếu bạn cần thêm trợ giúp tất nhiên tôi sẽ cố gắng giúp bằng mọi cách có thể. :)
Eric F

Chào. Tôi thực sự có nghĩa là giá trị trong ô có 64. Nếu bạn thấy hình ảnh 64 của tôi chỉ là số lượng cho hóa đơn này. Vì vậy, nó thực sự cần phải được tính + số trong cột số lượng tương ứng
Shaurya K
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.