Một yêu cầu về nhặt số liệu để cho vào bảng tương ứng

Liên hệ QC
Em đã xem các hàm a lập trong VBA & đã ngộ ra đc một chút... tuy nhiên,vì file này a làm trên cơ sở file excel cũ chưa hoàn chỉnh, nên vẫn mắc một số lỗi. VD:
với chứng từ như sau:
(ta theo dõi cho khoản mục TAM)
Số CT---- Ngày CT ----- Số tiền -----TK Nợ -----TK Có ---- Km nợ ----KM có
007 -----01/06/2007 ---1,363,637 ----1331 ------141 -------CDC ------TAM

thì như vậy, với các hàm trong VBA a lập, chứng từ này thoả mã điều kiện, nhưng khi tính sumproduct đã nhặt cả TK 1331 vào là thừa (mà lẽ ra TK này chỉ nhặt khi theo dõi mã CDC). Đối với chứng từ này thì chỉ nhặt 141 vào TAM mà thôi
Lỗi là do thiết lập hàm sumproduct:

.Range("F" & 11 + i).FormulaR1C1 = "=SUMPRODUCT((left(TkNo,3)=""133"")*(CtNg=RC2)*(CtSo=RC1)*CtSt)"

vấn đề này, trong hàm của excel đã được sửa:
ở cột TK 1331, nhập hàm:
=SUMPRODUCT((LEFT(TkNo,3)="133")*(CtNg=Out!$C14)*(CtSo=Out!$B14)*(CtSt)*(KMno=MaKM))

hàm VBA trên bị thiếu fần xét điều kiện Mã khoản mục nợ phải bằng Mã khoản mục mà mình nhập ở ô nhập mã khoản mục thì mới tính tổng. Tương tự cho các cột của các TK khác cũng như vậy.

Em thử thêm vào hàm VBA đkiện trên như sau:
trong excel, em thêm name KMno, KMco tương tự như a đã làm với TkNo, TkCo... sau đó trong VBA e tiến hành sửa như sau:

- ở đoạn này e thêm phần đánh dấu đỏ:
With Sheet4
eR = .Range("I65000").End(xlUp).Row 'dong cuoi
Set CtDg = .Range("C2:C" & eR)
.Range("P1:P" & eR).ClearContents
.Range("I1:I" & eR).Name = "SoCt"
.Range("A2:A" & eR).Name = "CtSo"
.Range("D2:D" & eR).Name = "CtSt"
.Range("B2:B" & eR).Name = "CtNg"
.Range("E2:E" & eR).Name = "TkNo"
.Range("F2:F" & eR).Name = "TkCo"
.Range("G2:G" & eR).Name = "KmNo"
.Range("H2:H" & eR).Name = "KmCo"

End With

và ở phần sau, e thử sửa đối với TK1331: (em thêm phần đánh dấu đỏ)

Sheet2.Select
With Sheet2
.Range("A12:L1000").ClearContents
For i = 1 To eR - 1
iR = WorksheetFunction.Match(SoCtLoc(i), Range("Soct"), 0)
.Range("A" & 11 + i) = WorksheetFunction.Index(Range("CtSo"), iR, 0)
.Range("B" & 11 + i) = WorksheetFunction.Index(Range("CtNg"), iR, 0)
.Range("C" & 11 + i) = WorksheetFunction.Index(CtDg, iR, 0)
.Range("D" & 11 + i).FormulaR1C1 = "=SUMPRODUCT(((left(TkNo,3)=""336"")+(left(TkNo,3)=""141""))*(CtNg=RC2)*(CtSo=RC1)*CtSt)"
.Range("E" & 11 + i).FormulaR1C1 = "=SUMPRODUCT(((left(TkCo,3)=""336"")+(left(TkCo,3)=""141""))*(CtNg=RC2)*(CtSo=RC1)*CtSt)"
.Range("F" & 11 + i).FormulaR1C1 = "=SUMPRODUCT((left(TkNo,3)=""133"")*(KmNo=E7)*(CtNg=RC2)*(CtSo=RC1)*CtSt)"
.Range("G" & 11 + i).FormulaR1C1 = "=SUMPRODUCT((left(TkNo,3)=""621"")*(CtNg=RC2)*(CtSo=RC1)*CtSt)"
.Range("H" & 11 + i).FormulaR1C1 = "=SUMPRODUCT((left(TkNo,3)=""622"")*(CtNg=RC2)*(CtSo=RC1)*CtSt)"
.Range("I" & 11 + i).FormulaR1C1 = "=SUMPRODUCT((left(TkNo,3)=""627"")*(CtNg=RC2)*(CtSo=RC1)*CtSt)"
Next
End With

trong đó E7 là ô trong sheet2 mà mình phải nhập mã khoản mục vào, tuy nhiên câu lệnh ko đc chấp nhận. Em thử thay bằng
(KMno="E7") cũng ko đc. Em thay bằng (KMno=""TAM"") thì lại đc, tuy nhiên như thế thì lại chỉ lọc với mã TAM thoai, mà ý em có nghĩa là mún đối chiếu đk KMno có giống với mã mà mình nhập vào ô E7 ko... Đoạn này trong excel thì em chỉ việc gõ (KMno=E7) là xong, nhưng trong VBA e ko bít fải khai báo thế nào để VBA hiểu như thế...+-+-+-+

Thêm nữa là nếu a thử nhập mã CDC vào thì sẽ thấy là ở sheet out, từ dòng thứ 25 trở đi là ngày tháng hiển thị thế nào ấy, e chả hỉu j cả... a xem lại dùm... với lại các ô trống thì bị thay bằng số 0, phía bên trên, các ô trống bị thay bằng dấu gạch ngang, nhìn rất khó chịu... có cách nào để trống các ô ko có dữ liệu ko ạ?

Thêm nữa, phần khoá sổ chưa có, thì e phải làm thế nào để nó xuất hiện liền sau chứng từ cuối cùng?
 
Em đã xem các hàm a lập trong VBA & đã ngộ ra đc một chút... tuy nhiên,vì file này a làm trên cơ sở file excel cũ chưa hoàn chỉnh, nên vẫn mắc một số lỗi. VD:
với chứng từ như sau:
(ta theo dõi cho khoản mục TAM)
Số CT---- Ngày CT ----- Số tiền -----TK Nợ -----TK Có ---- Km nợ ----KM có
007 -----01/06/2007 ---1,363,637 ----1331 ------141 -------CDC ------TAM

thì như vậy, với các hàm trong VBA a lập, chứng từ này thoả mã điều kiện, nhưng khi tính sumproduct đã nhặt cả TK 1331 vào là thừa (mà lẽ ra TK này chỉ nhặt khi theo dõi mã CDC). Đối với chứng từ này thì chỉ nhặt 141 vào TAM mà thôi
Lỗi là do thiết lập hàm sumproduct:

.Range("F" & 11 + i).FormulaR1C1 = "=SUMPRODUCT((left(TkNo,3)=""133"")*(CtNg=RC2)*(CtSo=RC1)*CtSt)"

vấn đề này, trong hàm của excel đã được sửa:
ở cột TK 1331, nhập hàm:
=SUMPRODUCT((LEFT(TkNo,3)="133")*(CtNg=Out!$C14)*(CtSo=Out!$B14)*(CtSt)*(KMno=MaKM))

hàm VBA trên bị thiếu fần xét điều kiện Mã khoản mục nợ phải bằng Mã khoản mục mà mình nhập ở ô nhập mã khoản mục thì mới tính tổng. Tương tự cho các cột của các TK khác cũng như vậy.

Em thử thêm vào hàm VBA đkiện trên như sau:
trong excel, em thêm name KMno, KMco tương tự như a đã làm với TkNo, TkCo... sau đó trong VBA e tiến hành sửa như sau:

- ở đoạn này e thêm phần đánh dấu đỏ:
With Sheet4
eR = .Range("I65000").End(xlUp).Row 'dong cuoi
Set CtDg = .Range("C2:C" & eR)
.Range("P1:P" & eR).ClearContents
.Range("I1:I" & eR).Name = "SoCt"
.Range("A2:A" & eR).Name = "CtSo"
.Range("D2:D" & eR).Name = "CtSt"
.Range("B2:B" & eR).Name = "CtNg"
.Range("E2:E" & eR).Name = "TkNo"
.Range("F2:F" & eR).Name = "TkCo"
.Range("G2:G" & eR).Name = "KmNo"
.Range("H2:H" & eR).Name = "KmCo"

End With

và ở phần sau, e thử sửa đối với TK1331: (em thêm phần đánh dấu đỏ)

Sheet2.Select
With Sheet2
.Range("A12:L1000").ClearContents
For i = 1 To eR - 1
iR = WorksheetFunction.Match(SoCtLoc(i), Range("Soct"), 0)
.Range("A" & 11 + i) = WorksheetFunction.Index(Range("CtSo"), iR, 0)
.Range("B" & 11 + i) = WorksheetFunction.Index(Range("CtNg"), iR, 0)
.Range("C" & 11 + i) = WorksheetFunction.Index(CtDg, iR, 0)
.Range("D" & 11 + i).FormulaR1C1 = "=SUMPRODUCT(((left(TkNo,3)=""336"")+(left(TkNo,3)=""141""))*(CtNg=RC2)*(CtSo=RC1)*CtSt)"
.Range("E" & 11 + i).FormulaR1C1 = "=SUMPRODUCT(((left(TkCo,3)=""336"")+(left(TkCo,3)=""141""))*(CtNg=RC2)*(CtSo=RC1)*CtSt)"
.Range("F" & 11 + i).FormulaR1C1 = "=SUMPRODUCT((left(TkNo,3)=""133"")*(KmNo=E7)*(CtNg=RC2)*(CtSo=RC1)*CtSt)"
.Range("G" & 11 + i).FormulaR1C1 = "=SUMPRODUCT((left(TkNo,3)=""621"")*(CtNg=RC2)*(CtSo=RC1)*CtSt)"
.Range("H" & 11 + i).FormulaR1C1 = "=SUMPRODUCT((left(TkNo,3)=""622"")*(CtNg=RC2)*(CtSo=RC1)*CtSt)"
.Range("I" & 11 + i).FormulaR1C1 = "=SUMPRODUCT((left(TkNo,3)=""627"")*(CtNg=RC2)*(CtSo=RC1)*CtSt)"
Next
End With

trong đó E7 là ô trong sheet2 mà mình phải nhập mã khoản mục vào, tuy nhiên câu lệnh ko đc chấp nhận. Em thử thay bằng
(KMno="E7") cũng ko đc. Em thay bằng (KMno=""TAM"") thì lại đc, tuy nhiên như thế thì lại chỉ lọc với mã TAM thoai, mà ý em có nghĩa là mún đối chiếu đk KMno có giống với mã mà mình nhập vào ô E7 ko... Đoạn này trong excel thì em chỉ việc gõ (KMno=E7) là xong, nhưng trong VBA e ko bít fải khai báo thế nào để VBA hiểu như thế...+-+-+-+

Thêm nữa là nếu a thử nhập mã CDC vào thì sẽ thấy là ở sheet out, từ dòng thứ 25 trở đi là ngày tháng hiển thị thế nào ấy, e chả hỉu j cả... a xem lại dùm... với lại các ô trống thì bị thay bằng số 0, phía bên trên, các ô trống bị thay bằng dấu gạch ngang, nhìn rất khó chịu... có cách nào để trống các ô ko có dữ liệu ko ạ?

Thêm nữa, phần khoá sổ chưa có, thì e phải làm thế nào để nó xuất hiện liền sau chứng từ cuối cùng?


(KmNo=E7) => (KmNo=R7C5) ie dòng 7 cột 5
Vậy là có tiến bộ nhiều rồi đấy, sẽ hoàn thiện cho.
TN
 
(KmNo=E7) => (KmNo=R7C5) ie dòng 7 cột 5
Vậy là có tiến bộ nhiều rồi đấy, sẽ hoàn thiện cho.
TN

hik, hóa ra trong VB dùng cách viết địa chỉ thứ 2 của excel, làm em cứ mò mẫm mãi từ hôm wa đến h, ko bít phải viết thế nào cho đúng**~**... rõ ràng là cấu trúc hàm như thế là đúng rùi mà e cứ ko hỉu tại sao lại toàn báo lỗi, thử đủ các kiểu+-+-+-+ ... Em sửa được rùi a à... em sẽ sửa thêm một chút nữa đề phù hợp với mục đích của mình & e sẽ gửi sớm cho a file e chỉnh sửa rùi a giúp em hoàn thiện nhá@$@!^%
 
hik, hóa ra trong VB dùng cách viết địa chỉ thứ 2 của excel, làm em cứ mò mẫm mãi từ hôm wa đến h, ko bít phải viết thế nào cho đúng**~**... rõ ràng là cấu trúc hàm như thế là đúng rùi mà e cứ ko hỉu tại sao lại toàn báo lỗi, thử đủ các kiểu+-+-+-+ ... Em sửa được rùi a à... em sẽ sửa thêm một chút nữa đề phù hợp với mục đích của mình & e sẽ gửi sớm cho a file e chỉnh sửa rùi a giúp em hoàn thiện nhá@$@!^%
Em xem thử file sau, đã hoàn thiện.
 

File đính kèm

Em xem thử file sau, đã hoàn thiện.

Hu hu, a ơi, e ko bít nói lời nào để cảm ơn a nữa...-=.,,
File a gửi đã hoàn chỉnh hết phần core rùi... & e cảm thấy rất hài lòng với file này.../-*+/ Trên cơ sở file hoàn chỉnh này e có thể tùy biến theo ý của mình rùi @$@!^%
Thank a nhìu nhắm!
 
A ThuNghi ơi, có cách nào để chỉ hiện sheet Out! ko a? Hoặc có cách nào để tạo thành file exe & chỉ hiện bảng ở sheet Out! ko ạ? Ý em muốn ko cho ng xem sửa chữa dữ liệu ở các sheet khác...
 
A ThuNghi ơi, có cách nào để chỉ hiện sheet Out! ko a? Hoặc có cách nào để tạo thành file exe & chỉ hiện bảng ở sheet Out! ko ạ? Ý em muốn ko cho ng xem sửa chữa dữ liệu ở các sheet khác...
Vậy chạy xong code tạo sheet out ra 1 file riêng có tên là mã khoản mục được không. Còn không cho người xem và sửa, xin hỏi người xem là thế nào. Liệu protect thì ng xem có biết unprotect???
 
Vậy chạy xong code tạo sheet out ra 1 file riêng có tên là mã khoản mục được không. Còn không cho người xem và sửa, xin hỏi người xem là thế nào. Liệu protect thì ng xem có biết unprotect???

Ý e ko phải như vậy, nghĩa là chỉ cho ng xem làm việc trên sheet out thoai, còn các sheet khác ẩn đi & chỉ có em mới có quyền làm việc trên các sheet này... nhỡ đâu ng ta vào sửa hết dữ liệu trong sheet data của e thì chết e//////... Em thử dùng chức năng security đặt password bảo vệ, nhưng như thế mỗi lần ng xem bật lên lại hiện ra bảng hỏi mã thì thật là khó chịu...

Giải quyết theo cách như thế nào để làm được như e mong muốn cũng đc... có thể mã hoá dữ liệu trong các sheet, hoặc làm thế nào đó....

Có một vấn đề nữa là khi một mã KM có nhìu hơn 70 chứng từ thoả mãn đk thì khi xuất ra sheet out, từ dòng 86 trở đi là dữ liệu trong cột ngày chứng từ hiển thị bị lỗi, vd hiển thị như các số sau:

39244
39244
39245
39245
39245
39246
39246
39247
...

và bị mất fần khoá sổ ở dưới... (như a mặc định là chỉ hide đến dòng 100, từ 101 trở đi thì dành cho phần khoá sổ...) thì fần khoá sổ e xử lý bằng sửa code của a đặt sẵn đc, còn fần hiển thị ngày tháng chứng từ bị lỗi trên thì e chưa tìm ra là fải sửa ở đâu...

E sẽ gửi cho a file đính kèm data của 2 mã TAM & CDC... trong đó mã TAM hiển thị thì OK, còn khi lọc mã CDC thì bị lỗi như trên để a tham khảo...
 
Web KT

Bài viết mới nhất

Back
Top Bottom