Dữ liệu sheet NKC bạn tự nhập hay lấy từ phần mềm nào khác?Chào các A/c!
Nhờ các A/c chỉ giúp em Công thức dò Tài khoản theo số chứng từ như file đính kèm.
Khi em nhập 1 tài khoản bất kỳ thì sẽ hiện thông tin các tài khoản đối ứng theo số chứng từ bên sheet NKC. Nhờ các A/c chỉ giúp em ạ
Em cám ơn!
Vậy bạn thử xem file này, nhập TK cần lọc vào ô F3đó là dữ liệu trên phần mềm em kết xúât ra nó như vậy anh à
Không biết tài khoản đối ứng là gì nhưng xin giải thích dùm chỗ màu đỏ như nào? Sau khi nhập Tài khoản vào F7 thì chỗ màu đỏ nhập vào như nào?Chào các A/c!
Nhờ các A/c chỉ giúp em Công thức dò Tài khoản theo số chứng từ như file đính kèm.
Khi em nhập 1 tài khoản bất kỳ thì sẽ hiện thông tin các tài khoản đối ứng theo số chứng từ bên sheet NKC. Nhờ các A/c chỉ giúp em ạ
Em cám ơn!
Chào các A/c!
Nhờ các A/c chỉ giúp em Công thức dò Tài khoản theo số chứng từ như file đính kèm.
Khi em nhập 1 tài khoản bất kỳ thì sẽ hiện thông tin các tài khoản đối ứng theo số chứng từ bên sheet NKC. Nhờ các A/c chỉ giúp em ạ
Em cám ơn!
K10=IFERROR(OFFSET(NKC!$D$1,MATCH(ROW($A1),INDEX(COUNTIF(OFFSET(NKC!$F$2,,,ROW($1:$500)),$F$3&"*"),),0),),"")
M10=(L9>0)*SUM($L$9:L9)
D10=LOOKUP(ROW()-9,1/(1/$M$10:$M$40),$K$10:$K$40)
E10=IFERROR(T(OFFSET(NKC!E$1,MATCH(COUNTIF($D$10:$D10,$D10),INDEX(COUNTIF(OFFSET(NKC!$D$2,,,ROW($1:$500)),$D10),),0),)),"")
Tui có biết nghiệp vụ kế toán là gì "chết liền". Thấy sao làm vậy đúng kết quả mẫu là may lắm rồi.@ Anh Ba Tê:
Thay F3= 51111, hoặc 144, nó vẫn chưa thể hiện hết các chứng từ liên quan. Miễn sao, khi cộng Nợ và Có lúc nào số cũng bằng nhau. Hiện tại Code chỉ tính từ dòng nó (TK đang truy lục tại F3) phát sinh trở xuống, chứ chưa tính các dòng có cùng số chứng từ ở trên nó.
Thử bằng giải pháp cột phụ:
Sheet "SoChitietTK":
1/ Cột K: Liệt kê các chứng từ phát sinh trong kỳ liên hệ đến TK cần trích lục tại F3:
2/ Cột M: Số dòng mỗi chứng từ phát sinh.PHP:K10=IFERROR(OFFSET(NKC!$D$1,MATCH(ROW($A1),INDEX(COUNTIF(OFFSET(NKC!$F$2,,,ROW($1:$500)),$F$3&"*"),),0),),"")
3/ Chi tiết dòng chứng từ phát sinh:PHP:M10=(L9>0)*SUM($L$9:L9)
Fill xuống và copy cho các cột tương ứng.PHP:D10=LOOKUP(ROW()-9,1/(1/$M$10:$M$40),$K$10:$K$40) E10=IFERROR(T(OFFSET(NKC!E$1,MATCH(COUNTIF($D$10:$D10,$D10),INDEX(COUNTIF(OFFSET(NKC!$D$2,,,ROW($1:$500)),$D10),),0),)),"")
Bạn tham khảo file kèm.
Chúc anh em ngày cuối tuần vui vẻ.


Bài này dùng Countif mảng là hợp lý, bạn dùng CT mảng sau tại B10 sheet SoChiTietTK:Chào các A/c!
Nhờ các A/c chỉ giúp em Công thức dò Tài khoản theo số chứng từ như file đính kèm.
Khi em nhập 1 tài khoản bất kỳ thì sẽ hiện thông tin các tài khoản đối ứng theo số chứng từ bên sheet NKC. Nhờ các A/c chỉ giúp em ạ
Em cám ơn!
B10=IFERROR(INDEX(NKC!$B$2:$I$43,SMALL(IF(MMULT(--(NKC!$D$2:$D$43=TRANSPOSE(IF(IFERROR(SEARCH($F$3&"*",NKC!$F$2:$F$43),),NKC!$D$2:$D$43))),NKC!$B$2:$B$43^0),NKC!$B$2:$B$43),ROW(A1)),COLUMN(A1)),"")
Không sao đâu anh!Tui có biết nghiệp vụ kế toán là gì "chết liền". Thấy sao làm vậy đúng kết quả mẫu là may lắm rồi.
Ví dụ thì kết quả phải có vài trường hợp khác nhau mới "mò mẫm, sờ sẫm, rờ rẫm" cho "nó ra" kết quả giống mẫu.
Tui "làm cho nó ra" như vậy thì "hết sức" rồi.



Dùng mảng 2 chiều hơi nặng khi dữ liệu nhiều, mình chỉnh lại CT dùng mảng 1 chiều để CT nhẹ hơn, bạn dùng CT mảng ở B10:Chào các A/c!
Nhờ các A/c chỉ giúp em Công thức dò Tài khoản theo số chứng từ như file đính kèm.
Khi em nhập 1 tài khoản bất kỳ thì sẽ hiện thông tin các tài khoản đối ứng theo số chứng từ bên sheet NKC. Nhờ các A/c chỉ giúp em ạ
Em cám ơn!
B10=IFERROR(INDEX(NKC!$B$2:$I$1000,SMALL(IF(ISNUMBER(MATCH(NKC!$D$2:$D$1000,IF(SEARCH($F$3&"*",NKC!$F$2:$F$1000),NKC!$D$2:$D$1000),)),NKC!$B$2:$B$1000),ROW(A1)),COLUMN(A1)),"")
Tui hổng biết uống bia nên thường chỉ "1 ve đế" là xong. (Có nhiều TV GPE "chứng miêng"), 1 ngày sau mới biết còn "chiến đấu" được hông.Không sao đâu anh!
Làm vài ve là lấy lại "sức" ngay, rồi chiến đấu tiếp. Công thức làm là để giải trí làm "mồi đưa cay", chứ Nhật ký chung đến mấy ngàn dòng lận, nên giải pháp VBA là tối ưu.
Chúc anh em ngày thiệt vui.
Public Sub GPE()
Dim sArr(), dArr(), Tmp, I As Long, J As Long, K As Long, R As Long, DK As String, SCT As String
With Sheets("NKC")
sArr = .Range("B2", .Range("B2").End(xlDown)).Resize(, 8).Value
R = UBound(sArr)
End With
ReDim dArr(1 To R, 1 To 8)
DK = UCase(CStr(Sheets("SoChiTietTK").Range("F3")))
With CreateObject("Scripting.Dictionary")
For I = 1 To R
SCT = CStr(Trim(sArr(I, 3)))
If UCase(CStr(Trim(sArr(I, 5)))) = DK Then .Item(SCT) = ""
Next I
For I = 1 To R
SCT = CStr(Trim(sArr(I, 3)))
If .Exists(SCT) Then
K = K + 1: dArr(K, 1) = K
For J = 2 To 8
dArr(K, J) = Trim(sArr(I, J))
Next J
End If
Next I
End With
With Sheets("SoChiTietTK")
.Range("B10").Resize(1000, 8).ClearContents
If K Then .Range("B10").Resize(K, 8) = dArr
End With
End Sub
Công thức này em đã làm giống anh và đã ra kết quả, anh có thể giải thích giúp em công thức ô E10 có chữ "T" được không ạ?@ Anh Ba Tê:
Thay F3= 51111, hoặc 144, nó vẫn chưa thể hiện hết các chứng từ liên quan. Miễn sao, khi cộng Nợ và Có lúc nào số cũng bằng nhau. Hiện tại Code chỉ tính từ dòng nó (TK đang truy lục tại F3) phát sinh trở xuống, chứ chưa tính các dòng có cùng số chứng từ ở trên nó.
Thử bằng giải pháp cột phụ:
Sheet "SoChitietTK":
1/ Cột K: Liệt kê các chứng từ phát sinh trong kỳ liên hệ đến TK cần trích lục tại F3:
2/ Cột M: Số dòng mỗi chứng từ phát sinh.PHP:K10=IFERROR(OFFSET(NKC!$D$1,MATCH(ROW($A1),INDEX(COUNTIF(OFFSET(NKC!$F$2,,,ROW($1:$500)),$F$3&"*"),),0),),"")
3/ Chi tiết dòng chứng từ phát sinh:PHP:M10=(L9>0)*SUM($L$9:L9)
Fill xuống và copy cho các cột tương ứng.PHP:D10=LOOKUP(ROW()-9,1/(1/$M$10:$M$40),$K$10:$K$40) E10=IFERROR(T(OFFSET(NKC!E$1,MATCH(COUNTIF($D$10:$D10,$D10),INDEX(COUNTIF(OFFSET(NKC!$D$2,,,ROW($1:$500)),$D10),),0),)),"")
Bạn tham khảo file kèm.
Chúc anh em ngày cuối tuần vui vẻ.
Em không giỏi về VBA anh có thể giúp em làm sao để đưa Code này vào file excel này với ạ?Tui hổng biết uống bia nên thường chỉ "1 ve đế" là xong. (Có nhiều TV GPE "chứng miêng"), 1 ngày sau mới biết còn "chiến đấu" được hông.
Nếu tác giả yêu cầu như vậy thì phải thêm 1 vòng lặp, ghi lại tất cả các số chứng từ phát sinh liên quan rồi mới lấy dữ liệu.
PHP:Public Sub GPE() Dim sArr(), dArr(), Tmp, I As Long, J As Long, K As Long, R As Long, DK As String, SCT As String With Sheets("NKC") sArr = .Range("B2", .Range("B2").End(xlDown)).Resize(, 8).Value R = UBound(sArr) End With ReDim dArr(1 To R, 1 To 8) DK = UCase(CStr(Sheets("SoChiTietTK").Range("F3"))) With CreateObject("Scripting.Dictionary") For I = 1 To R SCT = CStr(Trim(sArr(I, 3))) If UCase(CStr(Trim(sArr(I, 5)))) = DK Then .Item(SCT) = "" Next I For I = 1 To R SCT = CStr(Trim(sArr(I, 3))) If .Exists(SCT) Then K = K + 1: dArr(K, 1) = K For J = 2 To 8 dArr(K, J) = Trim(sArr(I, J)) Next J End If Next I End With With Sheets("SoChiTietTK") .Range("B10").Resize(1000, 8).ClearContents If K Then .Range("B10").Resize(K, 8) = dArr End With End Sub
Bạn tải file bài #4, chọn Enable macros khi mở file, ấn Alt+F11, xoá sub cũ trong module, copy sub bài #11 paste vào thay. Nhập mã TK vào F3, code sẽ làm việc.Em không giỏi về VBA anh có thể giúp em làm sao để đưa Code này vào file excel này với ạ?
kế toán trong Excel dùng mảng 2, 1 chiều cũng chạy đua với rùa hếtDùng mảng 2 chiều hơi nặng khi dữ liệu nhiều, mình chỉnh lại CT dùng mảng 1 chiều để CT nhẹ hơn, bạn dùng CT mảng ở B10:
Ctrl+Shift+Enter rồi fill xuống vừa đủ, rồi fill sang phải!!!Mã:B10=IFERROR(INDEX(NKC!$B$2:$I$1000,SMALL(IF(ISNUMBER(MATCH(NKC!$D$2:$D$1000,IF(SEARCH($F$3&"*",NKC!$F$2:$F$1000),NKC!$D$2:$D$1000),)),NKC!$B$2:$B$1000),ROW(A1)),COLUMN(A1)),"")
Sub TK_ChungTu()
Dim Arr(), Darr(), LastR As Long, i As Long, j As Long, k As Long, iR As Long, TK As String, SCT As String
LastR = Sheets("NKC").Range("C" & Rows.Count).End(xlUp).Row
If LastR < 2 Then Exit Sub
Darr = Sheets("NKC").Range("B2:I" & LastR).Value
ReDim Arr(1 To UBound(Darr), 1 To 8)
TK = UCase(CStr(Sheets("ChungTu_TK").Range("F3")))
For i = 1 To UBound(Darr)
If Darr(i, 3) <> SCT Then iR = i: SCT = Darr(i, 3)
If UCase(CStr(Trim(Darr(i, 5)))) = TK Then
For n = iR To UBound(Darr)
If Darr(n, 3) = SCT Then
k = k + 1: Arr(k, 1) = k
For j = 2 To 8
Arr(k, j) = Trim(Darr(n, j))
Next j
Else
i = n - 1
Exit For
End If
Next n
End If
Next i
Sheets("ChungTu_TK").Range("B10:I2000").ClearContents
If k Then Sheets("ChungTu_TK").Range("B10").Resize(k, 8) = Arr
End Sub
Nếu không có hàm T(), thì khi lấy dữ liệu từ NKC qua nếu dòng tương ứng trống rỗng thì nó trả về số 0, để tránh hiện tượng này dùng T() sẽ loại bỏ được.Công thức này em đã làm giống anh và đã ra kết quả, anh có thể giải thích giúp em công thức ô E10 có chữ "T" được không ạ?



Anh được "1 ve đế" thì là bậc "cao thủ", đệ tử của Lưu Linh rồi, còn gì cần "chứng miêng"! khà khà khà.Tui hổng biết uống bia nên thường chỉ "1 ve đế" là xong. (Có nhiều TV GPE "chứng miêng"), 1 ngày sau mới biết còn "chiến đấu" được hông.
Nếu tác giả yêu cầu như vậy thì phải thêm 1 vòng lặp, ghi lại tất cả các số chứng từ phát sinh liên quan rồi mới lấy dữ liệu.



Quên! nếu nói về nghề thì phải "thọ giáo Phương trượng" chứ há!kế toán trong Excel dùng mảng 2, 1 chiều cũng chạy đua với rùa hết
ngứa nghề nên cũng góp vui
công thức dùng 4 cột phụ cho nhẹ file
thêm 1 sheet dùng code VBA....



Theo tôi thì nên tìm số chứng từ thì sẽ dễ dàng hơn nhiều dù cho nó có bao nhiêu số tài khoản cũng không quan trọng (sau khi xem File thì tôi chỉ ý kiến khách quan chứ tôi không là dân kế toán).Chào các A/c!
Nhờ các A/c chỉ giúp em Công thức dò Tài khoản theo số chứng từ như file đính kèm.
Khi em nhập 1 tài khoản bất kỳ thì sẽ hiện thông tin các tài khoản đối ứng theo số chứng từ bên sheet NKC. Nhờ các A/c chỉ giúp em ạ
Em cám ơn!
đâu dám nhận, chỉ làm nhiều nên quen tay và trở thành "thợ già" có kinh nghiệm xử lý dữ liệu kế toánQuên! nếu nói về nghề thì phải "thọ giáo Phương trượng" chứ há!
Chúc bạn hiền ngày thiệt vui.![]()





Anh HieuCD ơi, làm thế nào để đưa code này vào file này ạ, em không rành về VBA, anh chỉ giúp em với ạkế toán trong Excel dùng mảng 2, 1 chiều cũng chạy đua với rùa hết
ngứa nghề nên cũng góp vui
công thức dùng 4 cột phụ cho nhẹ file
thêm 1 sheet dùng code VBAMã:Sub TK_ChungTu() Dim Arr(), Darr(), LastR As Long, i As Long, j As Long, k As Long, iR As Long, TK As String, SCT As String LastR = Sheets("NKC").Range("C" & Rows.Count).End(xlUp).Row If LastR < 2 Then Exit Sub Darr = Sheets("NKC").Range("B2:I" & LastR).Value ReDim Arr(1 To UBound(Darr), 1 To 8) TK = UCase(CStr(Sheets("ChungTu_TK").Range("F3"))) For i = 1 To UBound(Darr) If Darr(i, 3) <> SCT Then iR = i: SCT = Darr(i, 3) If UCase(CStr(Trim(Darr(i, 5)))) = TK Then For n = iR To UBound(Darr) If Darr(n, 3) = SCT Then k = k + 1: Arr(k, 1) = k For j = 2 To 8 Arr(k, j) = Trim(Darr(n, j)) Next j Else i = n - 1 Exit For End If Next n End If Next i Sheets("ChungTu_TK").Range("B10:I2000").ClearContents If k Then Sheets("ChungTu_TK").Range("B10").Resize(k, 8) = Arr End Sub
trong file mình gởi lên có code trong đó, chạy trong sheet ChungTu_TK (file của bạn đặt tên là sochitiet là không ổn vì sẽ gây hiểu nhầm là sổ chi tiết, sổ chi tiết đâu có giống như vậy) bấm ngôi sao chạy code, để xem code bạn bấm Alt+F11 chọn Mudule để xemAnh HieuCD ơi, làm thế nào để đưa code này vào file này ạ, em không rành về VBA, anh chỉ giúp em với ạ


Có lẽ còn tùy thuộc vào công việc anh ạ, công việc của em là phân tích dạng "mì ăn liền", nên chỉ quan trong kết quả với thời gian nhanh nhất, đôi khi kết quả đó chỉ sài một lần duy nhất, khi đã quá gấp rút thời gian thì chỉ cần có hướng đi là được nói chung cách nào cũng được, còn vấn đề nặng nhẹ do phần mềm thì không thành vấn đề, xử lý được hết,với excel chuyển sang Manual và bấm F9 ngồi đợi, với những máy mạnh như I7 thế hệ 7, hay ryzen 1800x 20.000 excel với công thức mảng 2 chiều không quá 2 phút, yếu do mạng thì nâng cấp mạng, yếu do server thì nâng cấp server.... công việc kế toán là dạng công việc phần lớn khuôn mẫu vì nó lặp đi lặp lại, anh có quá nhiều thời gian để thiết kế để đạt mục đích tối ưu nhất, đôi khi kế toán cũng gặp rơi vào trường hợp thời gian này nên cũng phải giải quyết theo cách này anh không có quá nhiều thời gian để suy nghĩ và lựa chọn, sau khi kết thúc anh có thể quay lại để tìm giải pháp khác tối ưu nhất để dự phòng để sử dụng lần nữa. Cách làm của anh rất hay có thể nói là tối ưu rồi, nhưng đó là anh có thời gian chọn lọc anh phải suy nghĩ và phân tích lựa chọn tối ưu, chưa kể có thể cách anh chọn nó tốn nhiều thời gian và suy nghĩ hơn. Nói chung cách nào cũng vậy được này mất kia nhưng mỗi cách sẽ phù hợp với các công việc khác nhau. Với kế toán hiện nay, gần như các phần mềm đã làm hết công việc của họ rồi, các công thức phức tạp ít khi nào dùng tới, lâu lâu phát sinh một vài trường hợp nhưng cũng phải đưa thuật toán lên phần mềm để tự động, trừ trường hợp anh thích làm thủ công để định hướng tâm lý của người khác...Đôi khi thấy mấy anh nói kế toán là... nhưng excel không phải chỉ dùng cho kế toán, nên cứ đưa lên giải pháp của mình còn đánh giá phù hợp hay không là người sử dụng, trong thời buổi kinh tế hiện nay cái quan trọng nhất là ý tưởng, đôi khi gò bó trong một tiêu chuẩn hay nguyên tắc nào đấy thì những ý tưởng hay sẽ bị loại bỏ...kế toán trong Excel dùng mảng 2, 1 chiều cũng chạy đua với rùa hết
ngứa nghề nên cũng góp vui
công thức dùng 4 cột phụ cho nhẹ file
thêm 1 sheet dùng code VBA
Có lẽ còn tùy thuộc ................. hiện nay cái quan trọng nhất là ý tưởng, đôi khi gò bó trong một tiêu chuẩn hay nguyên tắc nào đấy thì những ý tưởng hay sẽ bị loại bỏ...
Sorry anh nếu có gì nói không phải!!!
bạn nói rất chính xác, tùy theo đặc thù của công việc mà chọn cách xử lý khác nhau và do yêu cầu công việc lặp đi lặp lại hằng ngày hình thành thói quen "bệnh nghề nghiệp"Có lẽ còn tùy thuộc vào công việc anh ạ,
Nói chung cách nào cũng vậy được này mất kia nhưng mỗi cách sẽ phù hợp với các công việc khác nhau.
Đôi khi thấy mấy anh nói kế toán là... nhưng excel không phải chỉ dùng cho kế toán...



bạn chép code vào sheet sochitietHi, anh HieuCD, nhân tiện topic em muốn hỏi vẫn từ data của bạn danhculao, em muốn ở ô F3 gõ số chứng từ thì sẽ hiện ra tất cả các dòng dữ liệu chứa số chứng từ đó bằng VBA có được không, mong anh giúp em với ạ.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$F$3" Then
Dim Arr(), Darr(), LastR As Long, i As Long, j As Long, k As Long, SCT As String
Application.ScreenUpdating = False
LastR = Range("C" & Rows.Count).End(xlUp).Row
If LastR > 9 Then Range("B10:J" & LastR).ClearContents
With Sheets("NKC")
'.UsedRange.AutoFilter
LastR = .Range("C" & Rows.Count).End(xlUp).Row
If LastR < 2 Then Exit Sub
Darr = .Range("B2:J" & LastR).Value
End With
ReDim Arr(1 To UBound(Darr), 1 To 8)
SCT = UCase(Trim(CStr(Range("F3"))))
For i = 1 To UBound(Darr)
If UCase(Trim(CStr(Darr(i, 3)))) = SCT Then
k = k + 1
For j = 1 To 8
Arr(k, j) = Trim(Darr(i, j))
Next j
End If
Next i
If k Then Range("B10").Resize(k, 8) = Arr
Application.ScreenUpdating = True
End If
End Sub
vào sheet Sochitiet -> nhấn Alt+F11 -> rồi copy code này như thế nào anh ? em ko giỏi bên VBA, em làm cho thực hiện mà ko được ạ?bạn chép code vào sheet sochitietMã:Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$F$3" Then Dim Arr(), Darr(), LastR As Long, i As Long, j As Long, k As Long, SCT As String Application.ScreenUpdating = False LastR = Range("C" & Rows.Count).End(xlUp).Row If LastR > 9 Then Range("B10:J" & LastR).ClearContents With Sheets("NKC") '.UsedRange.AutoFilter LastR = .Range("C" & Rows.Count).End(xlUp).Row If LastR < 2 Then Exit Sub Darr = .Range("B2:J" & LastR).Value End With ReDim Arr(1 To UBound(Darr), 1 To 8) SCT = UCase(Trim(CStr(Range("F3")))) For i = 1 To UBound(Darr) If UCase(Trim(CStr(Darr(i, 3)))) = SCT Then k = k + 1 For j = 1 To 8 Arr(k, j) = Trim(Darr(i, j)) Next j End If Next i If k Then Range("B10").Resize(k, 8) = Arr Application.ScreenUpdating = True End If End Sub
bạn xem file, muốn xem code bạn nhấn đồng thời 2 phím Alt+F11vào sheet Sochitiet -> nhấn Alt+F11 -> rồi copy code này như thế nào anh ? em ko giỏi bên VBA, em làm cho thực hiện mà ko được ạ?
Bạn xem thử file này, kiểm tra kết quả rồi cho ý kiến.Anh HieuCD, Ba Tê có thể giúp em thêm 1 vài điều kiện mà sử dụng code VBA với ạ:
- Khi em nhập 1 Tài khoản bất kỳ vào ô F3 (tìm theo số chứng từ), đồng thời em chọn thêm các điều kiện ở các ô F4, F5, F6 nữa.
- Còn nếu nhập 1 Tài khoản bất kỳ vào ô F3 (tìm theo số chứng từ), đồng thời em không chọn thêm các điều kiện ở các ô F4, F5, F6 thì sẽ hiện lên tất cả các thông tin của TK đã chọn (theo số chứng từ)




bạn dùng cột phụ là tốt rồi,Thanks anh @HieuCD rất nhiều nhé. Hôm nọ chờ mãi không thấy mà cần sử dụng nên e vẫn dùng cách của anh như trên nhưng xài thêm cột phụ nên giải quyết vấn đề được rồi ạ. Giờ e sẽ thử phân tích đoạn code của a xem cách thức hoạt động mới ntn để học hỏi thêm. E chỉ hiểu mang máng cách thức chạy và sửa để nó chạy ra hướng mình muốn chứ không biết viết code. Mục đích duy nhất là ứng dụng được nó vào công việc.
P/s: @sealand: Kiểu như của bạn @danhculao e gặp kha khá rồi, nó không phải nhật ký chung mà dạng bảng kê chứng từ và tuỳ vào yêu cầu của đơn vị doanh nghiệp sử dụng phần mềm yêu cầu mà bên viết phần mềm họ viết ra chứ không phải cái gì cũng theo đúng nguyên tắc đâu. Hi, thanks all
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("$F$3:SFS6")) Is Nothing Then
Dim Arr(), Darr(), LastR As Long, i As Long, j As Long, k As Long, Dk As String
Dim Tk As String, Ngay, SCT As String, MaKH As String, Str1, Str2, Str3, Str4
Dim TkBln As Boolean, NgayBln As Boolean, SctBln As Boolean, MakhBln As Boolean, Msg As String
Application.ScreenUpdating = False
LastR = Range("C" & Rows.Count).End(xlUp).Row
If LastR > 9 Then Range("B10:K" & LastR).ClearContents
With Sheets("NKC")
'.UsedRange.AutoFilter
LastR = .Range("C" & Rows.Count).End(xlUp).Row
If LastR < 2 Then Exit Sub
Darr = .Range("B2:N" & LastR).Value
End With
ReDim Arr(1 To UBound(Darr), 1 To 11)
Tk = UCase(Trim(CStr(Range("F3"))))
Ngay = Range("F4")
SCT = UCase(Trim(CStr(Range("F5"))))
MaKH = UCase(Trim(CStr(Range("F6"))))
Dk = Tk & "#" & Ngay & "#" & SCT & "#" & MaKH
For i = 1 To UBound(Darr)
Str1 = UCase(Trim(CStr(Darr(i, 9))))
If Str1 = Tk Then TkBln = True
If Ngay = "" Then
Str2 = ""
Else
Str2 = Darr(i, 2): If Str2 = Ngay Then NgayBln = True
End If
If SCT = "" Then
Str3 = ""
Else
Str3 = UCase(Trim(CStr(Darr(i, 5)))): If Str3 = SCT Then SctBln = True
End If
If MaKH = "" Then
Str4 = ""
Else
Str4 = UCase(Trim(CStr(Darr(i, 6)))): If Str4 = MaKH Then MakhBln = True
End If
If Str1 & "#" & Str2 & "#" & Str3 & "#" & Str4 = Dk Then
k = k + 1
Arr(k, 1) = Trim(Darr(i, 1))
Arr(k, 2) = Darr(i, 3)
Arr(k, 10) = Trim(Darr(i, 13))
For j = 3 To 9
Arr(k, j) = Trim(Darr(i, j + 2))
Next j
End If
Next i
If k Then
Range("B10").Resize(k, 10) = Arr
Else
If TkBln = False Then Msg = "Tai Khoan Khong co, "
If Ngay <> "" And NgayBln = False Then Msg = Msg & "Ngay Khong co, "
If SCT <> "" And SctBln = False Then Msg = Msg & "So chung tu Khong co, "
If MaKH <> "" And MakhBln = False Then Msg = Msg & "Ma KH Khong co, "
MsgBox Msg
End If
Application.ScreenUpdating = True
End If
End Sub
chú ý địa chỉ các ô trong code để tạo ô nhập liệu cho đúng hoặc chỉnh code lại theo file thực tếAnh ơi, anh có thể chỉ giúp em học thêm Code nữa là: em insert thêm 2 dòng ở ô E7 là Từ ngày và ô E8 là Đến ngày, khi em cần xem từ ngày đến ngày luôn được không ạ. Cụ thể như:
- Tài khoản:
- Ngày lập chứng từ:
- Số chứng từ:
- Mã Khách hàng:
- Từ ngày:
- Đến ngày:
Em cám ơn anh nhiều!
Tk = UCase(Trim(CStr(Range("F3")))) 'Tai khoan
Ngayd = Range("F4") 'Ngay dau
Ngayc = Range("G4") ' ngay cuoi
SCT = UCase(Trim(CStr(Range("F5")))) 'so chung tu
MaKH = UCase(Trim(CStr(Range("F6")))) 'Ma KH
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("$F$3:SFS6")) Is Nothing Then
Dim Arr(), Darr(), LastR As Long, i As Long, j As Long, k As Long, Dk As String
Dim Tk As String, Ngayd, Ngayc, SCT As String, MaKH As String, Str1, Str2, Str3, Str4
Dim TkBln As Boolean, NgayBln As Boolean, Ngay As Boolean, DkNgay As Boolean, SctBln As Boolean, MakhBln As Boolean, Msg As String
Application.ScreenUpdating = False
LastR = Range("C" & Rows.Count).End(xlUp).Row
If LastR > 9 Then Range("B10:K" & LastR).ClearContents
With Sheets("NKC")
'.UsedRange.AutoFilter
LastR = .Range("C" & Rows.Count).End(xlUp).Row
If LastR < 2 Then Exit Sub
Darr = .Range("B2:N" & LastR).Value
End With
ReDim Arr(1 To UBound(Darr), 1 To 11)
Tk = UCase(Trim(CStr(Range("F3"))))
Ngayd = Range("F4")
Ngayc = Range("G4")
SCT = UCase(Trim(CStr(Range("F5"))))
MaKH = UCase(Trim(CStr(Range("F6"))))
Dk = Tk & "#" & SCT & "#" & MaKH
If Ngayd = "" And Ngayc = "" Then DkNgay = True
For i = 1 To UBound(Darr)
Str1 = UCase(Trim(CStr(Darr(i, 9))))
If Str1 = Tk Then TkBln = True
If SCT = "" Then Str2 = "" Else Str2 = UCase(Trim(CStr(Darr(i, 5)))): If Str2 = SCT Then SctBln = True
If MaKH = "" Then Str3 = "" Else Str3 = UCase(Trim(CStr(Darr(i, 6)))): If Str3 = MaKH Then MakhBln = True
If Not DkNgay Then
Ngay = False
If Ngayd = "" Then
If Ngayc >= Darr(i, 2) Then: Ngay = True: NgayBln = True
Else
If Ngayc = "" Then
If Ngayd <= Darr(i, 2) Then: Ngay = True: NgayBln = True
Else
If Ngayc >= Darr(i, 2) And Ngayd <= Darr(i, 2) Then: Ngay = True: NgayBln = True
End If
End If
End If
If Str1 & "#" & Str2 & "#" & Str3 = Dk Then
If DkNgay Or Ngay Then
k = k + 1
Arr(k, 1) = Trim(Darr(i, 1))
Arr(k, 2) = Darr(i, 3)
Arr(k, 10) = Trim(Darr(i, 13))
For j = 3 To 9
Arr(k, j) = Trim(Darr(i, j + 2))
Next j
End If
End If
Next i
If k Then
Range("B10").Resize(k, 10) = Arr
Else
If TkBln = False Then Msg = "Tai Khoan Khong co, "
If DkNgay = False And NgayBln = False Then Msg = Msg & "Ngay Khong co, "
If SCT <> "" And SctBln = False Then Msg = Msg & "So chung tu Khong co, "
If MaKH <> "" And MakhBln = False Then Msg = Msg & "Ma KH Khong co, "
MsgBox Msg
End If
Application.ScreenUpdating = True
End If
End Sub