Giúp Code: lấy số liệu từ Sheet Tổng hợp và Sheet có liên quan.

Chia sẻ bởi:hands
★★★★★
Quảng cáo

Em chào Thầy cô & anh chị!
Xin vui lòng viết code giúp em: Trích dữ liệu từ Sheet Tổng hợp và Sheet có liên quan
Em có mô tả trong Sheet Yeucau
Em cảm ơn!

/(/ếu là mình, mình sẽ làm vầy:

Đổi tên trang 'T00' thành 'Ton' để lưu trữ sản lượng tồn của mọi tháng (Mỗi tháng 2 cột), bắt đầu từ T00 như bạn.

Các trang sau T01 bỏ đi; Trang T01 chuyển thành tên 'Report'

Khi nào bạn cần số liệu tháng nào thể hiện trên Report thì cho chạy macro từ CF có trên trang Report;

(/ì bạn ít nhiều đã biết VBA, nên mình khuyên bạn thế này:

Nếu dữ liệu CQ bạn đồ sộ thì fải nhờ đến mảng để xử lí, còn không thì bạn thử dùng AdvancedFillter xem sao;

Mỗi cách có ưu khuyết của nó; ví như xài mảng thì bạn cần học thêm để biết về cách xài mảng (Chẳng lẻ mỗi thay đổi chu trình QL bạn lại lên GPE nhờ chỉnh sửa sao?)

Xài AdvancedFilter tuy có chậm như dễ nắm bắt & bạn dễ chủ động trong chỉnh sửa, bảo trì & fát triển;

Sau đó có thêm thời gian thì nắm thêm cách xài mảng . . . .

Hi vọng không cảm thấy fiền lòng!

Cảm ơn sự góp ý của bạn.
Trước đây mình cũng có ý tạo một Trang Report, khi nào cần chỉ lọc số liệu "Từ ngày Đến ngày" là ra kết qủa, nhưng vì mỗi tháng còn fải lập định mức, so sánh giá vốn doanh thu của từng mặt hàng … để trình cho các sếp xem, vì các sếp muốn xem trực diện của từng tháng để so sánh hay làm gì đó … Nên mình ý tưởng lập thành các Sheet T01, …T12
Số liệu cũng khá nhiều, mình cũng đã viết code nhưng dựa trên công thức nên chạy khá chậm. Vì thế Nhờ thầy cô & anh chị viết giúp code này
Mình cũng đang lò mò code dạng mảng, nên cũng muốn các Thầy và anh chị giúp, và cũng từ đây mình có thể áp dụng nó vào một số bài thực tế khác có dạng tương tự
Em cảm ơn!
———————
P/S: Sự góp ý chính đáng có chi là fiền!

Thấy dạng bài này cũng "khoái" nhưng không phải trong nghề nên còn lờ mờ quá.
Để xem kỹ lại từng yêu cầu xem sao.

Thầy xem mà chưa hiểu chỗ nào thì em sẽ giải thích rõ ràng hơn
Em cảm ơn!

Bài này chắc cũng không khó lắm nhưng chưa hiểu rõ yêu cầu nên chưa biết khởi động thế nào
Số lượng dòng có thay đổi hay không? Dữ liệu từ cột A đến D có thay đổi không?
Nếu dựa vào công thức để viêt code chắc đơn giản thôi.

Bài này không khó, chỉ thử thách lòng kiên nhẫn của chúng ta thôi
Nếu xử lý trực tiếp trên sheet thì….dễ ẹct, nhưng nếu chơi mảng thì đúng là…..tra tấn
Anh Ba Tê & chú Quang Hải hổng biết làm kế toán dzồi, xem mình làm kế toán nè
Trong sheet tổng hợp phải đầy đủ các Mã Vật tư nhe bồ tèo, hổng đủ, code nó "tèo" dzáng chịu
Mình copy cái bảng qua kế bên để kiểm "cha" nhé, kết quả ở vùng A ==> N, bấm Ctrl + W chạy code
Hihi, viết xong cóc dám nhìn lại code, ghê quá. Kế toán rắc rối thật. Híc, xài được thì xài, còn không thì thôi, mình ngồi buồn viết đại, đừng hỏi tiếp
Thân

www.giaiphapexcel.com/diendan/threads/gi%C3%BAp-code-l%E1%BA%A5y-s%E1%BB%91-li%E1%BB%87u-t%E1%BB%AB-sheet-t%E1%BB%95ng-h%E1%BB%A3p-v%C3%A0-sheet-c%C3%B3-li%C3%AAn-quan.74570/

Khóa học Power PI – Ứng dung trong Nhân sự
Khóa học SprinGO phù hợp

Khóa học Power PI – Ứng dung trong Nhân sự

TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...

Xem khóa học
★★★★★ 5 ★ 1 👤 7 ▥ 0
Quảng cáo

Bạn nên đọc

7 Responses

  1. hands says:

    Cái sườn này mỗi tháng sẽ không giống nhau, mà tháng sau sẽ GIỐNG hoặc NHIỀU HƠN tháng trước (không có trường hợp ít hơn)
    Em ví dụ: Tháng 12 của năm trước (Sheet T00) và Tháng 01 năm nay (Sheet T01) chưa có nhóm mã 1561 và các mã con là H001, H002, ….
    |

    A

    |

    B

    |

    C

    |

    D
    7

    |STT|Mã|Mặt hàng|ĐVT

    8

    ||HH||

    9

    |II|152|KHO NGUYÊN VẬT LIỆU|

    10

    |1|L001|Dầu DO|Lít

    11

    |2|L002|Nhớt |Lít

    12

    |III|153|KHO CÔNG CỤ DỤNG CỤ|

    13

    |1|D001|Vỏ xe|Cái

    14

    |2|D002|Săm xe|Cái

    15

    |3|D003|Yếm xe|Cái

    16

    |IV|155|KHO THÀNH PHẨM|

    17

    |1|P001|Gạch thẻ|Viên

    18

    |2|P002|Gạch ống|Viên

    19

    |Cộng|||

    (Hình của T00 và T01)

    Bắt đầu từ Tháng 2 (Sheet T02) phát sinh mới Mã 1561 và các mã con (H001, H002…)
    Đồng thời phát sinh thêm L003 của nhóm 152 và P003 của nhóm 155

    |

    A

    |

    B

    |

    C

    |

    D
    7

    |STT|Mã|Mặt hàng|ĐVT

    8

    ||HH||

    9

    |I| 1561|KHO HÀNG HÓA|

    10

    |1| H001|Cát bê tông|m³

    11

    |2| H002|Cát xây tô|m³

    12

    |3| H003|Cát lấp|m³

    13

    |II|152|KHO NGUYÊN VẬT LIỆU|

    14

    |1|L001|Dầu DO|Lít

    15

    |2|L002|Nhớt |Lít

    16

    || L003|Mỡ bò|Kg

    17

    |III|153|KHO CÔNG CỤ DỤNG CỤ|

    18

    |1|D001|Vỏ xe|Cái

    19

    |2|D002|Săm xe|Cái

    20

    |3|D003|Yếm xe|Cái

    21

    |IV|155|KHO THÀNH PHẨM|

    22

    |1|P001|Gạch thẻ|Viên

    23

    |2|P002|Gạch ống|Viên

    24

    || P003|Gạch ngói|Viên

    25

    |Cộng|||

    (Hình của T02)
    —————-
    Lý do, em muốn áp dụng cho nhiều Cty, Nếu Cty khác mà không có nhóm (Ví dụ 155) thì khi đưa vào các tháng thì nhìn nó kỳ kỳ!
    —————–
    Code của Thầy Concogia, em Test thì thấy tất cả các tháng phải có cùng số nhóm, ví dụ 152, 153, 155, nếu qua tháng sau mà tăng thêm 1 nhóm, ví dụ thêm nhóm 1561 là bị báo lỗi
    —————
    Em xin cảm ơn

    Hihi, bài này bắt đầu vui rồi đây
    Gần hiểu rồi
    Bi giờ túm lại ( lần 1) nhé
    1- "Cái sườn" ( lời của anh Ba Tê) là do bạn nhập
    2- Sườn của tháng sau phải bằng hoặc nhiều hơn tháng trước, đương nhiên_ nhắc lại thôi ( nhưng lỡ tháng trước tồn bằng không (zero) vậy có mang qua tháng sau không Trời ??? )
    Công việc:
    1)- Lấy tồn tháng trước bỏ vào tháng sau
    2)- Dò xuất nhập ở sheet TH bỏ vào sheet hiện hành
    3)- Tính toán "lung sờ tung" theo một đống công thức của bạn
    Theo mình, có 2 yêu cầu:
    1– Trong sheet TH phải có đủ các Mã hàng hóa (H00..,L00….vv..) xuất hiện trong cái "sườn" của bạn theo từng tháng_ tức là trong bảng tổng hợp phải có đủ các Mã hàng hóa của Tồn đem qua, Xuất Nhập trong tháng_ "thú dzị": trong bài của bạn không có Mã D001 trong tháng T01 ( nếu không sẽ cực hơn tý tẹo )
    2– Công ty bạn có 4 cái kho đó hay nhiều hơn ???? Nếu nhiều hơn thì phải có cái bảng chứa những em này (152 ==> KHO NGUYÊN VẬT LIỆU, 1561==>KHO HÀNG HÓA, 15 gì đó==> KHO "GÌO ĐÍ"……)
    Híc, chắc phải túm lại vài lần & kiên nhẫn lắm mới hy vọng xử "em" này được. Cứ "Nhập Xuất Tồn" ….đau cả đầu
    Thân

    2- Sườn của tháng sau phải bằng hoặc nhiều hơn tháng trước, đương nhiên_ nhắc lại thôi ( nhưng lỡ tháng trước tồn bằng không (zero) vậy có mang qua tháng sau không Trời ???

    2- Sườn của tháng sau phải bằng hoặc nhiều hơn tháng trước, đương nhiên_ nhắc lại thôi ( nhưng lỡ tháng trước tồn bằng không (zero) vậy có mang qua tháng sau không Trời ???

    1/ Tháng trước tồn cuối kỳ bằng không hay lớn hơn 0 (thậm chí số ÂM), thì vẫn mang sang Tồn đầy kỳ của tháng sau và tương ứng với các nhóm kho (1561, 152…) và các mã hàng (H001, H002, …L001,…, …)
    2/ Nếu tháng trước chưa có Mã kho 1561 và các mã hàng H001, H002 … khi qua tháng sau có thêm mã Kho và các mã hàng vừa nói thì Tồn đầu kỳ của nó = 0

    Trong sheet TH phải có đủ các Mã hàng hóa (H00..,L00….vv..) xuất hiện trong cái "sườn" của bạn theo từng tháng_ tức là trong bảng tổng hợp phải có đủ các Mã hàng hóa của Tồn đem qua, Xuất Nhập trong tháng

    Trong Sheet TH không bắt buộc xuất hiện đủ Nhập hay Xuất của các mã H001,..; L001,…; D001, …; P001…. Bởi vì có những mặt hàng sẽ không nhập hoặc xuất trong một tháng, thậm chí một năm.
    Và sẽ có trường hợp đặc biệt như : Tháng 2 là TẾT -> nghĩ mua – bán, do đó bên Sheet TH sẽ không có các dòng phát sinh cho tháng 2, nhưng vẫn có Sheet T02 (như vậy Sheet T02 chỉ có các số liệu như sau: lấy tồn cuối kỳ của T001 làm Tồn đầu kỳ cho T002, Tính "ĐGBQ" cột J (cách tính giống như Công thức của em, để tránh báo lỗi #DIV/0!) và tính tồn cuối kỳ (cột L &M))

    _ "thú dzị": trong bài của bạn không có Mã D001 trong tháng T01 ( nếu không sẽ cực hơn tý tẹo)

    Trong bài 1 của em Mã D001 trong tháng 1, em không nhập xuất là ý em muốn như trên

    Công ty bạn có 4 cái kho đó hay nhiều hơn ???? Nếu nhiều hơn thì phải có cái bảng chứa những em này (152 ==> KHO NGUYÊN VẬT LIỆU, 1561==>KHO HÀNG HÓA, 15 gì đó==> KHO "GÌO ĐÍ"……)
    Dạ em chỉ 4 kho, xào đi xào lại chắc đủ sài!
    —————-
    Lưu ý cho em 1 trường hợp đặc biệt nữa: Ví dụ Công ty mới thành lập tháng 03/2012 (Nghĩa là tháng ba mới bắt đầu có mã Kho (1561, 152,…) và các mã hàng (H001, …;L001,…) Em vẫn để tồn tại các sheet T00 (của Tháng 12 năm trước) T01, T02 (của tháng 1, 2 năm nay) Nhưng các Mã kho và hàng sẽ không có (nghĩa là các sheet T00, T01, T02 sẽ không có số liệu từ hàng thứ 9 trở xuống) Như vậy, ai có chạy code tại các Sheet T01, T02 sẽ không bị báo lỗi
    Em cảm ơn!

    Tui không phải dân kế toán, nhưng với "công chuyện" của Excel thì tôi nghĩ như vầy:
    _ Cửa hàng tui bán 100 mặt hàng.
    _ Mỗi thàng tui thống kê 100 mặt hàng này, thằng nào giao dich bi nhiêu, bi nhiêu? (thằng nào không giao dịch trong tháng đó bỏ qua, không thống kê, không cho nó bằng 0, hổng phải là thống kê.)
    _ Làm những chuyện không giống ai, híc! khó làm lắm!
    (dù là cò già vẫn làm được)
    _

    Mình cũng thử viết code nhưng loay hoay mãi hình như hỏng hiểu nên đành dừng lại. Mấy file kế toán này khó nhai quá đi. mà hình như dữ liệu cung cấp ít quá nên thấy thiếu cơ sở để suy đoán.

    [URL='www.giaiphapexcel.com/diendan/goto/post?id=457766']Ba Tê said:
    Tui không phải dân kế toán, nhưng với "công chuyện" của Excel thì tôi nghĩ như vầy:
    _ Cửa hàng tui bán 100 mặt hàng.
    _ Mỗi thàng tui thống kê 100 mặt hàng này, thằng nào giao dich bi nhiêu, bi nhiêu? (thằng nào không giao dịch trong tháng đó bỏ qua, không thống kê, không cho nó bằng 0, hổng phải là thống kê.)
    _

    Phần chữ màu đỏ em không hiểu lắm
    tháng nào mã nào không phát sinh mua bán thì fần nhập xuất nó bằng 0, nó chỉ có thể tồn hàng đầy kỳ hay cuối kỳ mà thôi, hoặc chỉ tồn tại cái tên trên các sheet T01,… T12 mà thôi
    Chữ màu xanh: không cho nó bằng 0 , em cũng không hiểu luôn!
    Vì em không biết lập trình nêm không biết chỗ khó của lập trình!
    Thầy cứ giúp em viết code theo cách có thể nhất!
    Em cảm ơn các thầy & anh chị!

    Chắc ý bác Ba Tê muốn là các mục cột A B C D ở sheet kết quả T01 T02,…, là giống nhau và bao hàm tất cả các khoản mục lớn con và giống nhau, khi đó nếu khoản mục nào không có phát sinh trong tháng thì để 0 cái nào có thì đền vào
    ==> nếu được thế sẽ code nhanh hơn,

    ——————

    bạn nên cho biết rõ phần cột A B C D – ở các sheet Kết quả T01,T02,… vv Thì là do bạn nhập vào trước hay là muốn code tự động liệt kê ra
    -(dĩ nhiên T00 hoặc của tháng trước tháng bắt đầu phải luôn có sẵn cả số liệu)

    + Nếu bạn nhập trước thì phải đảm bảo list đủ các khoản mục phát sinh trong tháng đó
    + Nếu muốn code tự động – thì cần phải chỗ nào cung cấp dữ liệu vào là các tên cụ thể cho cột C (hay là để trống.

    Chắc ý bác Ba Tê muốn là các mục cột A B C D ở sheet kết quả T01 T02,…, là giống nhau và bao hàm tất cả các khoản mục lớn con và giống nhau, khi đó nếu khoản mục nào không có phát sinh trong tháng thì để 0 cái nào có thì đền vào
    ==> nếu được thế sẽ code nhanh hơn,

    Ở các cột A, B, C. D chì có thể giống nhau là kho hàng (1561, 152, 153, hay 155) nhưng không thể giống nhau ở các mã hàng con như H099, giả sử tháng 01 không có mã H099 nhưng đến tháng 12 thì phát sinh thêm mã này, lúc đó lại quay về các tháng trước để add mã này vào thì fức tạp

    bạn nên cho biết rõ phần cột A B C D – ở các sheet Kết quả T01,T02,… vv Thì là do bạn nhập vào trước hay là muốn code tự động liệt kê ra
    -(dĩ nhiên T00 hoặc của tháng trước tháng bắt đầu phải luôn có sẵn cả số liệu)

    + Nếu bạn nhập trước thì phải đảm bảo list đủ các khoản mục phát sinh trong tháng đó
    + Nếu muốn code tự động – thì cần phải chỗ nào cung cấp dữ liệu vào là các tên cụ thể cho cột C (hay là để trống.

    Phần cột A, B, C, D của các sheet kết qủa là do em tự nhập tay vào trước khi chạy code
    Và code không tự động chạy và nằm trên Module
    Em cảm ơn!

    Nếu thế thì code của [URL='https://www.giaiphapexcel.com/forum/showthread.php?74570-Gi%C3%BAp-Code-l%E1%BA%A5y-s%E1%BB%91-li%E1%BB%87u-t%E1%BB%AB-Sheet-T%E1%BB%95ng-h%E1%BB%A3p-v%C3%A0-Sheet-c%C3%B3-li%C3%AAn-quan&p=457480#post457480'%5Dbác concogia ở trên #8 có thể ứng dụng được

    bạn đã thử chưa, và còn muốn khác thế nào nữa? hay còn tồn tại gì?

    Em cũng đang test và sẽ Test cho các điều kiện khác nhau, em cảm ơn!

    Hihi, hiểu thêm tý tẹo
    Thử bài này, không biết dữ liệu thật nhiều hông, làm kết quả trên sheet, phải làm đúng đã, có gì tính sau

    vodoi2x
    Nếu thế thì code của [URL='https://www.giaiphapexcel.com/forum/showthread.php?74570-Gi%C3%BAp-Code-l%E1%BA%A5y-s%E1%BB%91-li%E1%BB%87u-t%E1%BB%AB-Sheet-T%E1%BB%95ng-h%E1%BB%A3p-v%C3%A0-Sheet-c%C3%B3-li%C3%AAn-quan&p=457480#post457480'%5Dbác concogia ở trên #8 có thể ứng dụng được

    Cái này vẫn chưa đủ bạn vodoi2x ạ vì những mã có trong cái sườn của bạn í mà cóc có trong bảng tổng hợp mới……. tèo chứ. Híc, kế với chả toán, chỉ tổ nhức đầu, Ba Tê trốn đâu mất tiêu dzồi, ra đây nhưc đầu chơi
    Híc

  2. hands says:

    Hihi, hiểu thêm tý tẹo
    Thử bài này, không biết dữ liệu thật nhiều hông, làm kết quả trên sheet, phải làm đúng đã, có gì tính sau

    Cái này vẫn chưa đủ bạn vodoi2x ạ vì những mã có trong cái sườn của bạn í mà cóc có trong bảng tổng hợp mới……. tèo chứ. Híc, kế với chả toán, chỉ tổ nhức đầu, Ba Tê trốn đâu mất tiêu dzồi, ra đây nhưc đầu chơi
    Híc

    Ah, code cũ đúng thế thật vì bác số sánh gữa dton và dNx và loằng ngoằng loạn xị khó đọc thật

    còn CODE mới lại không dùng Mảng cho vùng kết quả nữa ah, bác dùng RANGE rồi, lại khó đọc hơn đúng là chỉ bác cò mới thuộc đường đi lối về hihii

    Sao bác không dùng code cũ là được, rui căn cứ vào ký tự I , II, …IV của cột A vùng kết quả (hoặc cột B với SÓ 1561,152,…) mà xử các cái KHO
    (dĩ nhiên khi đó khuyến cáo cho người nhập dữ liệu cột A)
    thế là dễ dàng lên nhiều

    Híc, ban đầu định không làm, tính "ghẹo" Ba Tê thôi, làm thử tí tẹo khích Ba Tê không ngờ ……sa vào bãi cát lún luôn
    Nếu hiểu đúng & còn muốn viết thì phải viết lại từ đầu bạn ạ, đúng "nhàn cư vi ……mất ngủ"
    Híc 3 cái

    Em tung code này ra chắc anh Cò và anh Bate lắc đầu ngao ngán đây. Viết xong hỏng dám đọc lại code, thấy ghê quá.

    Bấm Ctrl + R để chạy code

  3. hands says:

    Thêm một cái ghê nữa nè, cũng không dám nhìn lại code
    Híc

  4. hands says:

    Vậy giờ dám nhìn lại chính code đã sửa từ code chính của bác không

    CODE này được phát triển từ code ver1 của bac concogia (nên công thức các cột tính toán độ chính xác có gì hỏi bác Concogia nhé), cảm ơn bác Concogia,
    ————
    Hoàn thiện code hơn, đảm bảo

    – cho phép kiểm soát lỗi: chỉ cho phép chạy macro khi đứng ở Sheet có tên T01,T02,…T12,
    – báo lỗi khi không có dữ liệu, không có sheet T## trước đó, vv

    – Bấm Ctrl+R để chạy chương trình
    – Bấm Ctrl+Shift+R để xóa kết quả (khi muốn xem chạy lại)

    ————
    Code đã tinh chỉnh lại:

    – nhanh hơn , vì chỉ nhặt vào dic những số liệu từ tổng hợp ứng với tháng đang tính toán mà thui

    – sử dụng Array tối đa, không sủ dụng hàm , công thức hay range khác

    – Viết gọn code lại chút,

    —————
    cuối cùng chú ý:
    Việc căn nhóm là dựa vào các ký tự chữ I II III,…. cột A của sheet kết quả –> vì thế chú ý khi nhập liệu cột A phải được chuẩn hóa là các Tài khoản (KHO) thì đánh số la mã (hoặc ký tự A B C…) còn các các mã mục nhỏ thì đánh số 1 2 3 …. như hiện tại, và đánh thứ tự liên tục (không có cell trống là tốt nhất )

    Hôm qua vì vội trả lời mà em quên cột A (cột số thứ tự La mã và số) của các sheet kết qủa được tạo ra là do chạy một code khác

    Như vậy dữ liệu ở các sheet kết qủa tại các cột B, C, D là nhập = tay (hoặc copy các tháng trước rồi thêm vào các mã mới nếu có phát sinh thêm)

    Anh có thể giúp em lại một lần nữa là sửa code lại
    Em thành thật xin lỗi anh và các Thầy vì đã làm mất thời gian và công sức của mọi người.
    Em cảm ơn!

    Dù do code khác tạo ra, nhưng vẫn theo quy luật tôi viết trên, thì vẫn không vấn đề gì

    ———–
    Còn muốn phân biệt KHO (khác so với các mã con) dựa vào cột B thì lấy file kèm sau,

    Chú ý tại B chỉ có các tài khoản khó là 1 số (number) các khoản mục (mã) con đều là dạng chuỗi ký tự nhé (hiện luôn là ký tự vì bắt đầu bằng chữ cái: H , L…)

    Mọi vấn đề khác giống như code trước đề cập bài trên với các bẫy lỗi đầy đủ
    như thử bấm Ctrl+R chạy code ở sheet TH , TH00 hay bất cứ sheets nào không thuộc T01-T12 thì đều có báo lỗi và không chạy code

  5. hands says:

    Em đã test thử một số điều kiện và thấy chạy tốt
    Còn một điểm hạn chế Các Thầy & anh giúp em chỗ này

    1/Trong sheet "TH" của em chưa có ghi số liệu tháng 3, Giả sử tháng 3 là tháng "ăn chơi" trong suốt tháng 3 công ty sẽ KHÔNG NHẬP VÀ XUẤT, Như vậy khi chạy code tháng 3 thì chỉ cho kết quả Tồn đầu kỳ của tháng 3. Bây giờ em muốn cho kết qủa ở cột "ĐGBQ" (cột J) (nếu điều này không fức tạp) và cho kết qủa tồn cuối kỳ (cột L và M). Vì nếu không có kết qủa này thì sang tháng 4 (T04) số dư đầu kỳ của tháng này sẽ không lấy được của cuối kỳ tháng 03

    2/ Mặt khác em thấy, nếu trong 1 tháng mà TOÀN BỘ Mã con Không CÓ NHẬP VÀ XUẤT thì kết qủa giống như mục 1 nói trên (VÍ DỤ: Bên sheet TH, trong tháng 02, ta Delete toàn bộ nhập xuất của các mã có chữ L đầu)

    ——————
    Nhân đây em xin các Thầy & anh viết giúp em code kết quả cho cả MỘT NĂM (nghĩa là lấy toàn bộ nhập xuất của một năm) và em đặt tên cho nó là sheet T13
    (Em có làm công thức trong T13)
    Em xin mô tả như sau:
    Về số liệu kho hàng như mã 1561, 152, 153, 155 thì vẫn giống như code lấy cho kết quả từng tháng

    Còn các mã con thì em lấy ví dụ mã H001 như sau
    Tồn đầu kỳ cột E & F : vẫn lấy tồn cuối kỳ của sheet T00
    Cột G, H, I : trước đây em dùng hàm SUMPRODUCT() để lấy kết quả, nay em chỉ dùng hàm SUMIF()
    Cột J : Không tính
    Cột K: trước đây em dùng công thức K10=I10*J10, nhưng bây giờ em dùng Hàm SUMIF()
    Và cột L và M tính giống như trước

    Em xin cảm ơn các Thầy cô & anh chị
    —————
    P/s: vì em đang muốn áp dụng code ở đề tài này để áp dụng cho một số bài thực tế khác có cấu trúc gần giống, nếu chỗ đọan code nào khó thì cho ghi cho em vài lời ghi chú giải thích

    Code bên trong dễ như đám rừng vậy đó nên không có chỗ nào cần chú thích cả đâu nhé.
    Sheet T13 thì có nút bấm, những sheet kia thì CTRL + R để chạy code

    PS: Nhớ phản hồi xem cái đám rừng kia mần ăn gì được không nhé

    Em đã Test với dữ liệu nhỏ thì thấy rất tốt, để em tạo dữ liệu nhiều thì xem kết qủa ra sao?
    Hi, như đám rừng thiệt, nhưng quan trọng em đọc có dễ hiểu không, từ đó có thể áp dụng vào các File khác.
    —————–
    Anh vodoi2x vẫn giúp em hoàn tất bài trên nha, code của anh có điểm đặc biệt là hiện các thông báo
    Mặt khác em vẫn muốn học cái hay của mỗi người.

    Em xin cảm ơn tất cả các Thầy & anh chị!

  6. hands says:

    Em đã Test với dữ liệu nhỏ thì thấy rất tốt, để em tạo dữ liệu nhiều thì xem kết qủa ra sao?
    Hi, như đám rừng thiệt, nhưng quan trọng em đọc có dễ hiểu không, từ đó có thể áp dụng vào các File khác.
    —————–
    Anh vodoi2x vẫn giúp em hoàn tất bài trên nha, code của anh có điểm đặc biệt là hiện các thông báo
    Mặt khác em vẫn muốn học cái hay của mỗi người.

    Em xin cảm ơn tất cả các Thầy & anh chị!

    Muốn học gì thì cứ túm co……..^^^^?cổ bác concogia nhe (hihiii) – vì code chính của bác ấy mà, tôi chỉ thêm mắm muối vào thôi và thêm chút bột ngọt nữa

    Giờ không căn cứ vào giá trị số hay text của cột B (sheets kết quả) nữa, mà xem mã của cột B này có thuộc 4 tài khoản trong HẰNG SỐ tkChinh = "#1561#152#153#155#"
    bấm Alt+F11 Mở code sẽ thấy 2 dòng này ngay module

    Const tkChinh = "#1561#152#153#155#" 'hang so cho phep Thay doi tai khoan CHINH
    Const stRow = 9 'hang so dong bat dau cho phan du lieu cua tat cac sheet du lieu, ket qua

    Bạn có thể bổ sung TÀI KHOẢN CHÍNH vào đây khi cần tăng thêm KHO (dĩ nhiên cho dư cũng được, nhưng nhớ là không thiếu và trùng các mã con hàng hóa )

    ————-
    Code vẫn thế chỉ sửa chút cho phép chạy ở sheet T13 – nên từ T01 ->T13 vẫn cứ bấm Ctrl+R để chạy và Ctrl+Shift+R để xóa
    Mọi báo lỗi vẫn thế

  7. hands says:

    Em đã kiểm tra và code còn một lỗi như sau:
    Tại Sheet TH, anh xóa cột B ( cột Ngày)
    Tại Sheet T01, anh chạy code. Kết quả là nó vẫn cho kết qủa tại cell G10 và H10
    Em cảm ơn
    ———–
    Mấy ngày nghiên cứu code của các Thầy & các anh, em thấy em còn mông lung quá! Không biết có thể áp dụng cho các bài khác của em được kg nữa!

    Có ngon thì xóa cột C của sheet TH thì biết liền

    Gần 1 tháng giờ mới phản hồi, hic….

    Xóa cột C thì em biết rồi

    Hôm nay em vô tình xóa cột B rồi chạy code, thấy nó như vậy nên thông báo với anh

    H Van thử thay thế điều kiện ở cột C thành cột B coi được không. Dùng hàm Month(cot B) +100 rồi dùng hàm right lấy 2 ký tự cuối, kết hợp chữ T thì được rồi.

    Em chào Thầy cô & anh chị!
    Em có áp dụng code bài #34 vào thực tế như sau

    Option Explicit
    
    Const tkChinh = "#1561#152#153#155#" 'hang so cho phep Thay doi tai khoan CHINH
    Const stRow = 9 'hang so dong bat dau cho phan du lieu cua tat cac sheet du lieu, ket qua
    
    'bam phim tat Ctrl+R
    'by vodoi2x vodoi2x vodoi2x vodoi2x vodoi2x
    'main code from Concogia GPE
    
    Sub TH()
    
    Dim CoT13 As Boolean, dTon As Object, dNx As Object, wSp As Worksheet, TongHop, ArrNx, aTon, kQ, ArrKq
        Dim i As Long, k As Long, kK As Long, MM As Long, j As Long, n As Long, nk As Long, tmP As String, WsPre, sT As String
    
    'Kiem soat loi va nhap du lieu
        sT = Trim(UCase(ActiveSheet.Name))
        If Not sT Like "T##" Then MsgBox "Phai chay macro nay tai sheet " & Chr(13) & " T##:  T01,T02,...,T12,  T13", , "sub TH": Exit Sub
        MM = Val(Right(sT, 2))
        If MM < 1 Or MM > 13 Then MsgBox "Phai chay macro nay tai sheet " & Chr(13) & " T##:  T01,T02,...,T12   T13", , "sub TH": Exit Sub
    
    CoT13 = (MM = 13): k = IIf(CoT13, 0, MM - 1)
        On Error Resume Next
        Set wSp = Sheets("T" & Format(k, "00"))
        On Error GoTo 0
        If wSp Is Nothing Then MsgBox "Khong ton tai sheet ky truoc " & "T" & Format(k, "00"), , "sub TH": Exit Sub
    
    With wSp
            k = .[B65536].End(xlUp).Row
            If k < stRow Then MsgBox "Khong ton tai du lieu TON o sheet " & wSp.Name, , "sub TH": Exit Sub
            aTon = .Range("B" & stRow & ":B" & k).Resize(, 12).Value
        End With
    
    With Sheets("TH")
            k = .[C65536].End(xlUp).Row
            If k < stRow Then MsgBox "Khong ton tai du lieu o file tong hop", , "sub TH": Exit Sub
            TongHop = .Range("C" & stRow & ":C" & k).Resize(, 15)
        End With
        ReDim ArrNx(1 To UBound(TongHop), 1 To 4)
    
    k = [B65536].End(xlUp).Row
        If k < stRow Then MsgBox "Khong ton tai du lieu o Sheet hien tai", , "sub TH": Exit Sub
        kQ = Range("B" & stRow & ":B" & k).Value
        nk = UBound(kQ) + 1: ReDim ArrKq(1 To nk, 1 To 9)
    
    'Tinh toan
        Set dNx = CreateObject("scripting.dictionary")
        n = IIf(CoT13, 4, 3)
        For i = 1 To UBound(TongHop)
            If CoT13 Or UCase(Trim(TongHop(i, 1))) = sT Then
                tmP = TongHop(i, 9)
                If Not dNx.exists(tmP) Then
                        k = k + 1:  dNx.Add tmP, k:  kK = k
                Else:   kK = dNx.Item(tmP):    End If
    
    For j = 1 To n
                    [COLOR=#ff0000][B]ArrNx(kK, j) = ArrNx(kK, j) + TongHop(i, 11 + j)[/B][/COLOR]
                Next j
            End If
       Next i
    
    Set dTon = CreateObject("scripting.dictionary")
       With wSp
            For i = 1 To UBound(aTon)
                If Not dTon.exists(aTon(i, 1)) Then dTon.Add aTon(i, 1), Array(aTon(i, 11), aTon(i, 12))
            Next i
       End With
    
    For i = 1 To nk - 1  'nk-1=Ubound(kq)
            tmP = Trim(kQ(i, 1))
            If tmP <> "" Then
                If InStr(1, tkChinh, "#" & tmP & "#", vbTextCompare) Then
                    k = i
                Else
                    If dTon.exists(tmP) Then
                        ArrKq(i, 1) = dTon.Item(tmP)(0):            ArrKq(i, 2) = dTon.Item(tmP)(1)
                        ArrKq(k, 1) = ArrKq(k, 1) + ArrKq(i, 1):    ArrKq(k, 2) = ArrKq(k, 2) + ArrKq(i, 2)
                        ArrKq(nk, 1) = ArrKq(nk, 1) + ArrKq(i, 1):  ArrKq(nk, 2) = ArrKq(nk, 2) + ArrKq(i, 2)
                    End If
    
    If dNx.exists(tmP) Then
                        For j = 3 To 5
                            ArrKq(i, j) = ArrNx(dNx.Item(tmP), j - 2)
                        Next j
                        If CoT13 Then ArrKq(i, 7) = ArrNx(dNx.Item(tmP), 4)
                    End If
    
    If Not CoT13 Then
                        If ArrKq(i, 1) + ArrKq(i, 3) <> 0 Then ArrKq(i, 6) = (ArrKq(i, 2) + ArrKq(i, 4)) / (ArrKq(i, 1) + ArrKq(i, 3))
                        If ArrKq(i, 5) <> 0 Then ArrKq(i, 7) = ArrKq(i, 5) * ArrKq(i, 6)
                    End If
    
    If ArrKq(i, 1) <> 0 Or ArrKq(i, 3) <> 0 Or ArrKq(i, 5) <> 0 Then ArrKq(i, 8) = ArrKq(i, 1) + ArrKq(i, 3) - ArrKq(i, 5)
                    If ArrKq(i, 2) <> 0 Or ArrKq(i, 4) <> 0 Or ArrKq(i, 7) <> 0 Then ArrKq(i, 9) = ArrKq(i, 2) + ArrKq(i, 4) - ArrKq(i, 7)
    
    For j = 3 To 9
                        If j <> 6 And ArrKq(i, j) <> 0 Then ArrKq(k, j) = ArrKq(k, j) + ArrKq(i, j):   ArrKq(nk, j) = ArrKq(nk, j) + ArrKq(i, j)
                    Next j
                End If
            End If
       Next i
    
    'Gan ket qua & ket thuc
       Range("E" & stRow).Resize(nk, 9) = ArrKq
       Set dTon = Nothing: Set dNx = Nothing
    End Sub

    Nhưng nó báo lỗi
    "Run – time error 9
    Subcript out of range"

    (dòng chữ màu đỏ)
    Em đã tìm nhưng vẫn chưa được, Nhờ Thầy cô & anh chị giúp sửa code.
    Em cảm ơn!

    Dòng này khai báo kích thước bị thiếu
    Sửa lại vầy coi sao

    ReDim ArrNx(1 To UBound(TongHop)*2, 1 To 4)

    Sửa thế chạy được , NHƯNG SAI và sai cơ bản,

    Vậy bạn hãy tìm đoạn có 3 dòng sau,

    'Tinh toan
        Set dNx = CreateObject("scripting.dictionary")
        n = IIf(CoT13, 4, 3)

    sửa thành

    Nhưng nó báo lỗi
    "Run – time error 9
    Subcript out of range"

    (dòng chữ màu đỏ)
    Em đã tìm nhưng vẫn chưa được, Nhờ Thầy cô & anh chị giúp sửa code.
    Em cảm ơn!

    'Tinh toan
        Set dNx = CreateObject("scripting.dictionary")
        n = IIf(CoT13, 4, 3): k = 0

    chỉ cần thêm : k = 0 đó ah,

Leave a Reply

Your email address will not be published. Required fields are marked *

Quảng cáo

Cũ vẫn chất

Xem thêm