- Tham gia
- 12/8/22
- Bài viết
- 32
- Được thích
- 4
Tôi chỉ làm cho bạn lần cuối cùng. Cứ kiểu chốc chốc lại thêm yêu cầu thì tôi không chơi. Bạn đã có cơ hội để bổ sung mọi yêu cầu nên tôi không chấp nhận bổ sung thêm lần nào nữa.1. CHo hỏi nếu 3 bảng nằm 3 sheet khác nhau thì sửa chổ này làm sao anh
TH_dautien = Array("B3", "E3", "H3", "K3") ' bang1, bang 2, bang 3, bang Ket Qua
2. Nếu thêm bảng 4, Bảng 5 em muốn Kết quả = Bảng 1 + 2 + 3 -4 - 5 thì phải sữa chổ nào
Anh có thê cho 1 đoạn code tổng quát để em chỉ cần thay input Ouput là xong
Tức trong các bảng tiếp theo nếu...Cột K tên hàng lấy từ Bảng 1 ( cột B )
Cảm ơn anh code chạy rất tốt. Nhưng em muốn code Không cần phải phân biệt chữ Hoa và Chữ thường thì phải sửa lại làm saoBạn thử với cái con ni xem:
Tôi làm cách khác dùng Dictionary.Cảm ơn anh code chạy rất tốt. Nhưng em muốn code Không cần phải phân biệt chữ Hoa và Chữ thường thì phải sửa lại làm sao
cảm ơn anh. Code anh em test file thực tế từ 40 giây xuống còn 1 giây, nhanh gấp 40 lầnTôi làm cách khác dùng Dictionary.
Hiện thời các ô Tên Hàng đầu tiên ở bảng 1, 2, 3 và bảng kết quả nằm ở B3, E3, H3 và K3. Để bạn có thể linh hoạt thay đổi và dịch chuyển sang những cột khác mà không cố định ở B, E, H, K, và để có thể linh hoạt cho dữ liệu trong mỗi bảng có thể bắt đầu từ dòng bất kỳ chứ không cứng nhắc là dòng 3 thì tôi cho địa chỉ của các ô Tên Hàng đầu tiên vào mảng TH_dautien.
Tức hiện tại là:
TH_dautien = Array("B3", "E3", "H3", "K3") ' bang1, bang 2, bang 3, bang Ket Qua
Với cách này thì bạn cũng có thể dùng chung code cho bài
Giúp Code TÍnh tổng theo tên hàng ( Thay thế hàm sumif khi dữ liệu quá nhiều )
Chào tất cả cô chú anh chị GPE. Em đang dùng hàm sumif để cộng thì file excel của em mất 40 giây ( có lúc treo file luôn ) . nay em xin nhờ anh chị giải cứu bằng 1 đoạn code để gắn vào nút bấm click 1 phát là xong . Em xin chân thành cảm ơn đại gia đình GPE Giúwww.giaiphapexcel.com
Trong bài này tôi hiểu là Tên Hàng trong bảng 1 là duy nhất. Nhưng code tôi viết lại chấp nhận cà trường hợp Tên Hàng trong bảng 1 lặp lại. Chính vì thế mà dùng được 1 code cho cả 2 bài. Trong bài ở link trên trước khi chạy code thì phải sửa thành.
TH_dautien = Array("B5", "H1", "J1", "E5") ' bang1, bang 2, bang 3, bang Ket Qua
Tức do bảng 2 (bắt đầu từ H1) trống nên không có cộng thêm Số Lượng. Do bảng 3 (bắt đầu từ J1) trống nên không có trừ đi Số Lượng. Vậy kết quả chỉ là cộng dồn Số Lượng trong bảng 1, và kết quả nhập vào bắt đầu từ E5.
Trong TH_dautien = ... thay cho cột H, J có thể chọn cột bất kỳ miễn là cột trống.
Lưu ý:
- Trước khi chạy code thì phải chọn sheet cần thao tác vì code chạy cho sheet hiện hành. Và sửa TH_dautien = ... cho đúng.
- Tôi chú thích từng dòng code. Hãy đọc chú thich để hiểu code.
Tôi chỉ làm cho bạn lần cuối cùng. Cứ kiểu chốc chốc lại thêm yêu cầu thì tôi không chơi. Bạn đã có cơ hội để bổ sung mọi yêu cầu nên tôi không chấp nhận bổ sung thêm lần nào nữa.1. CHo hỏi nếu 3 bảng nằm 3 sheet khác nhau thì sửa chổ này làm sao anh
TH_dautien = Array("B3", "E3", "H3", "K3") ' bang1, bang 2, bang 3, bang Ket Qua
2. Nếu thêm bảng 4, Bảng 5 em muốn Kết quả = Bảng 1 + 2 + 3 -4 - 5 thì phải sữa chổ nào
Anh có thê cho 1 đoạn code tổng quát để em chỉ cần thay input Ouput là xong
Tức trong các bảng tiếp theo nếu có tên hàng mới chưa có ở bảng 1 thì code cũng không lấy vào bảng kết quả. Và trong code sửa cho yêu cầu mới cũng thế - cột kết quả chỉ có tên hàng xuất hiện ở bảng 1.Cột K tên hàng lấy từ Bảng 1 ( cột B )
Dạ em đã hiểu. chân thành cảm ơn anh đã bỏ thời gian giúp emTôi chỉ làm cho bạn lần cuối cùng. Cứ kiểu chốc chốc lại thêm yêu cầu thì tôi không chơi. Bạn đã có cơ hội để bổ sung mọi yêu cầu nên tôi không chấp nhận bổ sung thêm lần nào nữa.
Lưu ý:
1. Ở bài #1 bảng kết quả chỉ có những tên hàng xuất hiện ở bảng 1
Trích trong bài
Tức trong các bảng tiếp theo nếu có tên hàng mới chưa có ở bảng 1 thì code cũng không lấy vào bảng kết quả. Và trong code sửa cho yêu cầu mới cũng thế - cột kết quả chỉ có tên hàng xuất hiện ở bảng 1.
2. mảng TH_dautien bây giờ có dạng
TH_dautien = Array(Array("'Sheet1'!B3", "'Sheet1'!E3", "'Sheet1'!H3", "'Sheet1'!K3"), Array(1, 1, -1, 1))
- Array("'Sheet1'!B3", "'Sheet1'!E3", "'Sheet1'!H3", "'Sheet1'!K3")
Bảng 1 luôn ở vị trí đầu tiên, còn bảng kết quả nằm ở vị trí cuối cùng.
Bây giờ phải nhập cả tên sheet vì mỗi bảng có thể nằm ở sheet khác.
Mỗi mục có dạng "'<tên sheet>'!<đia chỉ ô Tên hàng đầu tiên>"
"'Sheet1'!H3" có nghĩa là ô H3 trên sheet1.
'' là 2 dấu nháy đơn. Nếu tên sheet không có dấu cách thì cho phép bỏ cặp nháy đơn, ngược lại bắt buộc phải có.
- Array(1, 1, -1, 1)
Nhập những số bất kỳ dương hoặc âm. Số lớn nhỏ đều được vì code chỉ xét dấu cộng trừ mà thôi. Cột nào để cộng thêm thì nhập số dương, cột để trừ đi thì nhập số âm. Ngoại trừ cột đầu và cuối dù là nhập âm dương thì code vẫn cho đó là dương, vì cột cuối là kết qua còn cột đầu được coi là cột TỒN ĐẦU. Các cột khác được coi là các cột NHẬP (cộng thêm) và XUẤT (trừ đi). Các cột NHẬP, XUẤT có thể ở thứ tự bất kỳ, không nhất thiết phải hết NHẬP mới tới XUẤT.
3. Với code mới này mà giải quyết bài ở chủ đề "bên kia" thì không cần thêm các cột TRỐNG nữa. Lúc này chỉ cần liệt kê bảng 1 và bảng Kết Quả. vd.
TH_dautien = Array(Array("'Sheet1'!B5", "'Sheet1'!E5"), Array(1, 1))
4. Với code mới khi chạy code thì sheet hiện hành có thể là sheet bất kỳ. Miễn là tập tin chứa code là tập tin hiện hành (khi mở nhiều tâp tin)