[Trợ giúp VBA] Tính tổng giá trị ở nhiều workbooks, worksheets vào 1 file

Trạng thái
Không mở trả lời sau này.

HungVinh

Yêu THVBA
Xin chào anh chị và các bạn,
em mới châp chững tìm hiểu về VBA. Và rất cảm ơn Tuhocvba.net là 1 nơi cho người mới như em tìm hiểu về VBA tiếp cận cách dễ dàng và nhanh chóng hơn.
em có 1 bài toán mong anh chị cho em xin hướng đi
Tình huống:
em có nhiều workbooks, trong workbooks có nhiều worksheets, trong worksheets có 1 bảng có cùng kích cỡ cũng như địa chỉ như hình minh họa bên dưới
=> làm thế nào để tỉnh tổng các bảng đó vào 1 file duy nhất có tên "Tổng hợp".
em code được tới đoạn cộng các mảng đó với nhau thì ko được, cụ thể:
1. Em dùng mảng kiểu Array_Tong=Array_Tong+Array(i) thì không được. Tại sao vậy?
2. Em dùng kiểu Range_Tong=Range_Tong+Range(i) cũng không được. Tại sao?
Nếu tới đây cho 2 vòng lặp qua mảng thì cũng được nhưng em nghĩ có cách gì đó nhanh hơn
Mã:
Sub Tonghop()
    Dim wbOutput As Workbook, wbinput As Workbook
    
    Dim SelectFiles As Variant
    Dim FileNum As Integer, sheetNumInput As Integer, sheetNumOutput As Integer, i As Integer, j As Integer
    Dim ArrInput As Variant, ArrOutput As Variant
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    Set wbOutput = ThisWorkbook
    SelectFiles = Application.GetOpenFilename(filefilter:="Excel file (*.*),*.xlsx*", MultiSelect:=True)
      
    For FileNum = 1 To UBound(SelectFiles)
        Set wbinput = Workbooks.Open(SelectFiles(FileNum))
        sheetNumInput = wbinput.Worksheets.Count
        sheetNumOutput = wbOutput.Worksheets.Count

        For i = 1 To sheetNumInput
            For j = 1 To sheetNumOutput
                If wbinput.Sheets(j).Name = wbOutput.Sheets(i).Name Then
                '???
                                    
                End If
            Next j
        Next i
        wbinput.Close
    Next
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    
    MsgBox "Done!"
    
End Sub
em xin cảm ơn




Bạn cần đăng nhập để thấy hình ảnh
 

HungVinh

Yêu THVBA
Anh chị ủng hộ diễn đàn đi, rồi em hỗ trợ code.
cám ơn anh đã quan tâm tới bài toán của em
về ủng hộ thì em xin lỗi. Đợt này em đang bị nghỉ dài nên chưa ủng hộ được
cơ mà em xin hướng đi thôi nhanh hơn thôi ạ
còn bài toán trên như em nói là em vẫn có thể dùng vòng lặp qua mảng để tính tổng anh ạ
xin cảm ơn
 
D

Deleted member 208

Guest
Bên này các anh chị đều bận. Nếu không thực sự cần thiết thì không nên hỏi. Bên GPE trước nay vẫn hỗ trợ code nhanh chóng mà, bạn sang đó hỏi xem sao.
 
V

vothanhthu

Guest
Mảng với mảng bạn không thể cộng trực tiếp như 2 + 1 = 3 được.

Đối với mình, bài toán của bạn sẽ có lối đi như thế này:

- Bạn dùng For chạy qua hết các Sheet, các Workbook. Mỗi lần chạy sẽ lấy dữ liệu tại vùng nào đó nạp vào mảng nhỏ, rồi lấy mảng nhỏ nạp vào mảng lớn.

- Mảng lớn cuối cùng sẽ được gán vào Sheet mới mang tên "Tổng hợp".
Để tăng kích thước cho mảng đã khai báo, hoặc là bạn dùng Redim Preserve hoặc là dùng Function để ghép mảng.

1. Redim Preserve:
Đây là kiểu khai báo lại kích thước mảng nhưng không làm mất giá trị mảng ban đầu. Nhưng bạn lưu ý, cách này sẽ chỉ nạp cho mảng theo hàng ngang. Có nghĩa là, nếu dữ liệu bạn đang là các dòng đi xuống, và tiêu đề là các cột ngang thì bạn cần khai báo ngược lại, dữ liệu theo hàng ngang và tiêu đề theo hàng dọc. Cuối cùng là đảo chiều mảng lại và nạp vào Sheet. , có bài viết của sieutocviet3 ví dụ cho cách sử dụng mảng như thế.

2. Dùng Function để ghép mảng liên tục: , có bài viết nói về cách dùng như thế, có ví dụ và Code cụ thể. Đại khái, là bạn sẽ có thể làm rộng mảng của mình liên tục như cách mà bạn đang gặp khó khăn
 
Sửa lần cuối bởi điều hành viên:

NhanSu

SMod
Thành viên BQT
Nếu các bảng có cùng vị trí thì có thể copy file nguồn và paste special value add vào file đích.
Nếu bạn thích dùng mảng thì phải duyệt từng phần tử, không được cộng trực tiếp 2 mảng.
 

HungVinh

Yêu THVBA
@NhanSu: vâng, em cám ơn. đúng là em đang phải dùng duyệt qua từng phần tử trong mảng
@vothanhthu : em cám ơn sự hướng dẫn chi tiết tận tình của anh, cho em biết thêm nhiều điều mới như Ghép mảng liên tục ạ.
@BKKBG , @sieutocviet3 , @Binana : cám ơn các anh đã cho mình những phản hồi cũng như hướng đi mới
em xin chân thành cảm ơn!
 

giaiphapvba

Administrator
Thành viên BQT
Không có file demo, chỉ là bàn luận ý tưởng.
Ở #1 nói:
1. Em dùng mảng kiểu Array_Tong=Array_Tong+Array(i) thì không được. Tại sao vậy?
2. Em dùng kiểu Range_Tong=Range_Tong+Range(i) cũng không được. Tại sao?
Ở #3 lại nói:
còn bài toán trên như em nói là em vẫn có thể dùng vòng lặp qua mảng để tính tổng anh ạ
Tóm lại là cái gì bạn làm được rồi, cái gì chưa làm được? Tôi thật sự không hiểu.

INPUT:
có nhiều workbooks, trong workbooks có nhiều worksheets, trong worksheets có 1 bảng có cùng kích cỡ cũng như địa chỉ
(#1)
Kích thước đã bằng nhau rồi, và cũng cố định rồi, thì ý kiến này có vẻ không cần thiết:
Để tăng kích thước cho mảng đã khai báo
(#7)

Vài nhận xét như vậy, dạo này mình bận, nên không tham gia thảo luận cùng mọi người nhiều hơn được. Xin lỗi nhé.
Thành viên HungVinh cũng đã từng nhận trợ giúp Code của mình một lần rồi.
 

HungVinh

Yêu THVBA
Xin lỗi vì có thể em giải thích chưa rõ ràng
Ở #1:
1. Em dùng mảng kiểu Array_Tong=Array_Tong+Array(i) thì không được. Tại sao vậy?
2. Em dùng kiểu Range_Tong=Range_Tong+Range(i) cũng không được. Tại sao?
Nếu tới đây cho 2 vòng lặp qua mảng thì cũng được nhưng em nghĩ có cách gì đó nhanh hơn
Dù sao đi nữa, xin cám ơn mọi góp ý, thảo luận từ mọi người
Rất xin lỗi vì đưa ra những chủ đề không rõ ràng hay thú vị tới mọi người
Admin có thể đóng chủ đề này tại đây giúp em ạ
Xin cảm ơn
 

giaiphapvba

Administrator
Thành viên BQT
Ngay đầu topic nên nói là làm thế nào để nhanh hơn...
Từ đó mọi người có cơ sở đánh giá chủ đề của bạn nằm ở mức ưu tiên nào khi thảo luận. Thời gian của mọi người là hữu hạn, hãy chú ý điều đó.
 
Trạng thái
Không mở trả lời sau này.
Top