Chuyển đổi Form sổ NKC (1 người xem)

Người dùng đang xem chủ đề này

hoangdanh282vn

Nguyễn Cảnh Hoàng Danh
Thành viên danh dự
Tham gia
21/12/07
Bài viết
1,902
Được thích
5,308
Nghề nghiệp
Kinh doanh các mặt hàng văn phòng phẩm
Nếu các bạn đã sử dụng các phần mềm thì sẽ nhận thấy là các form sổ NCK đều có cột Số hiệu tài khoản chung, còn số tiền thì chia làm 2 cột Nợ và Có. Điều này gây không ít khó khăn trong việc xem và kiểm tra các nghiệp vụ hạch toán cũng như xem đối ứng của các tài khoản.
Mình xin gửi đến các bạn file chuyển đổi Form sổ nhật ký chung dùng cho phần mềm FAST :
PHP:
Số CT     Ngày     Diễn Giải     Tài khoản     Số tiền Nợ     Số tiền Có
Chuyển thành :
PHP:
Số CT     Ngày     Diễn Giải     Tài khoản Nợ    Tài khoản Có    Số tiền

Các bạn chỉ việc copy nguyên sheet NKC xuất từ phần mềm ra và dán vào sheet DATA là xong.
Do mình không rành về VBA lắm nên các bạn góp ý thêm cho mình nha
 

File đính kèm

Lần chỉnh sửa cuối:
Mình gửi file mới, dùng chung cho các loại phần mềm, ở sheet DATA các bạn làm theo mẫu chuẩn là được.
 

File đính kèm

Lần chỉnh sửa cuối:
Còn trường hợp 1Có - 3Nợ hình như file không chạy, Danh kiểm lại thử xem!
 
Cái NKC này do Danh tự nghĩ ra rồi. Làm gì có PMnào mà xuất ra lúc thì 1 số CT có 2N,
2C, lúc thì 2N, 1C
Cụ thể như:
1/CN07191:
C331: 722519600
N133: 65683600
N621: 656836000
2/Và CTừ 02730
N621: 8145446
C111:8145446

N133: 814544
C111: 814544
Hai kiểu này chả đồng nhất.
Thường những trường hợp như thế này mình sẽ yêu cầu bên PM làm lại hay là mình tự kết xuất từ data.
Còn làm =excel thì mình cũng đã nghiên cứu nhưng chả giống ai.
a/ Lấy những dữ liệu có count(số CT) =2 => dễ
b/ Còn lại sort theo soct, theo sotienNo
c/ Tiếp tục Còn lại sort theo soct, theo sotienNo
Và ...
 
Cái NKC này do Danh tự nghĩ ra rồi. Làm gì có PMnào mà xuất ra lúc thì 1 số CT có 2N,
2C, lúc thì 2N, 1C
Cụ thể như:
1/CN07191:
C331: 722519600
N133: 65683600
N621: 656836000
2/Và CTừ 02730
N621: 8145446
C111:8145446

N133: 814544
C111: 814544
Hai kiểu này chả đồng nhất.
Em gửi hình minh hoa, anh xem thử
- Đối với tiền mặt thì nó chia ra 2 phần : TM ứng với Tiền hàng, TM ứng với tiền thuế
- Đối với công nợ thì tổng tiền nợ bao gồm luôn cả tiền hàng và tiền thuế.
Không những vậy mà còn :
- Đối với TM thì hạch toán Nợ trước.
- Đối với công nợ thì hạch toán có trước.
Vì thế mới nhức đầu chứ.
 

File đính kèm

Còn trường hợp 1Có - 3Nợ hình như file không chạy, Danh kiểm lại thử xem!

Cái này do em chưa kiểm tra lại trường hợp nên sót.
Em gửi file mới ở bài #2. Anh xem nếu thiếu trường hợp thì em chỉnh tiếp cho hoàn thiện.
Code tuy không hay cho lắm nhưng được cái là dễ kiểm tra và sửa lại trường hợp.
PHP:
Sub Taoso()
Dim i As Long, Rw As Long, t As Double
Dim Chungtu As Range, Ci8 As Range, Ci9 As Range
Dim DK1 As Boolean, Dk2 As Boolean, Dk3 As Boolean, Dk4 As Boolean
Application.ScreenUpdating = False
t = Timer
Range("A7:I65536").ClearContents
With Sheets("DATA")
    Rw = .[D65536].End(xlUp).Row
    Set Chungtu = .Range("A7:A" & Rw)
End With
With Chungtu
    .Resize(, 4).Copy Destination:=[A7]
    .Offset(, 6).Copy Destination:=[G7]
    .Offset(, 4).Resize(, 2).Copy Destination:=[H7]
End With
Set Chungtu = Nothing
For i = 7 To [D65536].End(xlUp).Row
With Cells(i, 5)
    Set Ci8 = .Offset(, 3):  Set Ci9 = .Offset(, 4)
    DK1 = ((Cells(i, 1) = Cells(i + 1, 1)) * (.Offset(, 3) > 0)) = 1
    Dk2 = ((Cells(i, 1) = Cells(i - 1, 1)) * (.Offset(, 3) > 0)) = 1
    Dk3 = ((Cells(i, 1) = Cells(i + 1, 1)) * (.Offset(, 4) > 0)) = 1
    Dk4 = ((Cells(i, 1) = Cells(i - 1, 1)) * (.Offset(, 4) > 0)) = 1
    '-------------------------------------------------------------------------------------
    '1a.> 1 No 1 Co voi No truoc
    If DK1 And Ci8 = Cells(i + 1, 9) Then
        .Value = Cells(i + 1, 4)
    '1b.> 1 No 1 Co voi Co truoc
    ElseIf Dk2 And Ci8 = Cells(i - 1, 9) Then
        .Value = Cells(i - 1, 4)
    '2a.> 2 No 1 Co voi No truoc
    ElseIf DK1 And Ci8 + Cells(i + 1, 8) = Cells(i + 2, 9) Then
        .Value = Cells(i + 2, 4)
    ElseIf DK1 And Ci8 + Cells(i - 1, 8) = Cells(i + 1, 9) Then
        .Value = Cells(i + 1, 4)
    '2b.> 2 No 1 Co voi Co truoc
    ElseIf Dk2 And Ci8 + Cells(i + 1, 8) = Cells(i - 1, 9) Then
        .Value = Cells(i - 1, 4)
    ElseIf Dk2 And Ci8 + Cells(i - 1, 8) = Cells(i - 2, 9) Then
        .Value = Cells(i - 2, 4)
    '3a.> 3 No 1 Co voi No truoc
    ElseIf DK1 And Ci8 + Cells(i + 1, 8) + Cells(i + 2, 8) = Cells(i + 3, 9) Then
        .Value = Cells(i + 3, 4)
    ElseIf DK1 And Ci8 + Cells(i - 1, 8) + Cells(i + 1, 8) = Cells(i + 2, 9) Then
        .Value = Cells(i + 2, 4)
    ElseIf DK1 And Ci8 + Cells(i - 1, 8) + Cells(i - 2, 8) = Cells(i + 1, 9) Then
        .Value = Cells(i + 1, 4)
    '3b.> 3 No 1 Co voi Co truoc
    ElseIf DK1 And Ci8 + Cells(i + 1, 8) + Cells(i + 2, 8) = Cells(i - 1, 9) Then
        .Value = Cells(i - 1, 4)
    ElseIf DK1 And Ci8 + Cells(i + 1, 8) + Cells(i - 1, 8) = Cells(i - 2, 9) Then
        .Value = Cells(i - 2, 4)
    ElseIf Dk2 And Ci8 + Cells(i - 1, 8) + Cells(i - 2, 8) = Cells(i - 3, 9) Then
            .Value = Cells(i - 3, 4)
    'Tu truong hop 4a tro ve sau thuat toan se khac, do la dao chieu giua No va Co
    '4a.> 1 No 2 Co voi No truoc
    ElseIf Dk3 And Cells(i + 1, 9) <> 0 And Ci9 + Cells(i + 1, 9) = Cells(i - 1, 8) Then
        .Value = .Offset(, -1)
        .Offset(, -1) = .Offset(-1, -1)
    ElseIf Dk4 And Ci9 + Cells(i - 1, 9) = Cells(i - 2, 8) Then
        .Value = .Offset(, -1)
        .Offset(, -1) = .Offset(-2, -1)
    '4b.> 1 No 2 Co voi Co truoc
    ElseIf Dk3 And Cells(i + 1, 9) <> 0 And Ci9 + Cells(i + 1, 9) = Cells(i + 2, 8) Then
        .Value = .Offset(, -1)
        .Offset(, -1) = .Offset(2, -1)
    ElseIf Dk3 And Cells(i - 1, 9) <> 0 And Ci9 + Cells(i - 1, 9) = Cells(i + 1, 8) Then
        .Value = .Offset(, -1)
        .Offset(, -1) = .Offset(1, -1)
    '5a.> 1 No 3 Co voi No truoc
    ElseIf Dk3 And Cells(i + 1, 9) <> 0 And Ci9 + Cells(i + 1, 9) + Cells(i + 2, 9) = Cells(i - 1, 8) Then
        .Value = .Offset(, -1)
        .Offset(, -1) = .Offset(-1, -1)
    ElseIf Dk3 And Cells(i + 1, 9) <> 0 And Ci9 + Cells(i + 1, 9) + Cells(i - 1, 9) = Cells(i - 2, 8) Then
        .Value = .Offset(, -1)
        .Offset(, -1) = .Offset(-2, -1)
    ElseIf Dk4 And Cells(i - 1, 9) <> 0 And Ci9 + Cells(i - 1, 9) + Cells(i - 2, 9) = Cells(i - 3, 8) Then
        .Value = .Offset(, -1)
        .Offset(, -1) = .Offset(-3, -1)
    '5b.> 1 No 3 Co voi Co truoc
    ElseIf Dk3 And Cells(i + 1, 9) <> 0 And Ci9 + Cells(i + 1, 9) + Cells(i + 2, 9) = Cells(i + 3, 8) Then
        .Value = .Offset(, -1)
        .Offset(, -1) = .Offset(3, -1)
    ElseIf Dk3 And Cells(i + 1, 9) <> 0 And Ci9 + Cells(i + 1, 9) + Cells(i - 1, 9) = Cells(i + 2, 8) Then
        .Value = .Offset(, -1)
        .Offset(, -1) = .Offset(2, -1)
    ElseIf Dk3 And Cells(i - 1, 9) <> 0 And Ci9 + Cells(i - 1, 9) + Cells(i - 2, 9) = Cells(i + 1, 8) Then
        .Value = .Offset(, -1)
        .Offset(, -1) = .Offset(1, -1)
    End If
    '-------------------------------------------------------------------------------------
    If .Value <> "" And .Offset(, -1) <> "" Then .Offset(, 1).Value = Ci8 + Ci9
    End With
Next i
Set Ci8 = Nothing: Set Ci9 = Nothing
DelRow ' Huy dong lenh nay de xem va sua chua cac thuat toan o tren
[A2] = Timer - t
[A6:G6].AutoFilter
Application.ScreenUpdating = True
End Sub
'=============================================================================================
Sub DelRow()
Dim Cell As Range, Rng As Range, r As Long
Set Rng = Range("F7:F" & [D65536].End(xlUp).Row)
For Each Cell In Rng
    Cell.Offset(, 2).Value = Cell.Row
    If Cell.Value = 0 Then Cell.EntireRow.Clear
Next
Range("A7:H65536").Sort key1:=[H7], order1:=xlAscending
[D7:D65536].HorizontalAlignment = xlCenter
[E7:E65536].HorizontalAlignment = xlCenter
[G7:G65536].HorizontalAlignment = xlCenter
[F7:F65536].NumberFormat = "#,##0"
Columns("H:I").Clear
Set Rng = Nothing: Set Cell = Nothing
End Sub
 
Lần chỉnh sửa cuối:
Mình gửi file mới, có bổ sung thêm 1 vài trường hợp hạch toán và thêm code trích lọc dữ liệu từ sổ NKC ra sổ cái.
Code tạo sổ cái
PHP:
Sub Taosocai()
Dim Cell As Range, r As Long, t As Double, DK1 As Boolean, Ngay1 As Boolean, Ngay2 As Boolean
Application.ScreenUpdating = False
t = Timer: [A7:G65536].ClearContents: r = 7
If Not IsDate([B2]) Or Not IsDate([B3]) Then Exit Sub
With Sheets("Convert")
    For Each Cell In .Range("A7:A" & .[A65536].End(xlUp).Row)
    If Cell.Offset(, 1).Row = 5 Then MsgBox "Sheet Convert chua co du lieu!": Exit Sub
    If Not IsDate(Cell.Offset(, 1)) Then MsgBox "Gia tri ngay trong Cell : Convert!" & Cell.Offset(, 1).Address & " Khong dung": Exit Sub
    Ngay1 = DateValue(Cell.Offset(, 1)) >= DateValue([B2])
    Ngay2 = DateValue(Cell.Offset(, 1)) <= DateValue([B3])
    DK1 = InStr(1, Cell.Offset(, 3), [F3], 1) = 1
            If DK1 Or InStr(1, Cell.Offset(, 4), [F3], 1) = 1 Then
            Select Case [C3]
                Case 0
                    Cells(r, 1) = Cell
                    Cells(r, 2) = Cell.Offset(, 1)
                    Cells(r, 3) = Cell.Offset(, 2)
                    If DK1 Then
                        Cells(r, 4) = Cell.Offset(, 4)
                        Cells(r, 5) = Cell.Offset(, 5)
                    Else
                        Cells(r, 4) = Cell.Offset(, 3)
                        Cells(r, 6) = Cell.Offset(, 5)
                    End If
                    Cells(r, 7) = Cell.Offset(, 6)
                    r = r + 1
                Case 1
                    If Ngay1 * Ngay2 = 1 Then
                    Cells(r, 1) = Cell
                    Cells(r, 2) = Cell.Offset(, 1)
                    Cells(r, 3) = Cell.Offset(, 2)
                    If DK1 Then
                        Cells(r, 4) = Cell.Offset(, 4)
                        Cells(r, 5) = Cell.Offset(, 5)
                    Else
                        Cells(r, 4) = Cell.Offset(, 3)
                        Cells(r, 6) = Cell.Offset(, 5)
                    End If
                    Cells(r, 7) = Cell.Offset(, 6)
                    r = r + 1
                    End If
                End Select
            Cells(r, 4).HorizontalAlignment = xlCenter
            Cells(r, 5).NumberFormat = "#,##0"
            Cells(r, 6).NumberFormat = "#,##0"
            Cells(r, 7).HorizontalAlignment = xlCenter
        End If
    Next
End With
[C3] = 0
[G3] = Timer - t
[A6:G6].AutoFilter
Application.ScreenUpdating = True
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Convert bị lỗi

Nhờ Danh xem lại giúp mình file dưới đây, sau khi mình nhập data vào rồi convert thì bị lỗi.
 

File đính kèm

Mình gửi file mới, có bổ sung thêm 1 vài trường hợp hạch toán và thêm code trích lọc dữ liệu từ sổ NKC ra sổ cái.
Code tạo sổ cái
PHP:
Sub Taosocai()
Dim Cell As Range, r As Long, t As Double, DK1 As Boolean, Ngay1 As Boolean, Ngay2 As Boolean
Application.ScreenUpdating = False
t = Timer: [A7:G65536].ClearContents: r = 7
If Not IsDate([B2]) Or Not IsDate([B3]) Then Exit Sub
With Sheets("Convert")
    For Each Cell In .Range("A7:A" & .[A65536].End(xlUp).Row)
    If Cell.Offset(, 1).Row = 5 Then MsgBox "Sheet Convert chua co du lieu!": Exit Sub
    If Not IsDate(Cell.Offset(, 1)) Then MsgBox "Gia tri ngay trong Cell : Convert!" & Cell.Offset(, 1).Address & " Khong dung": Exit Sub
    Ngay1 = DateValue(Cell.Offset(, 1)) >= DateValue([B2])
    Ngay2 = DateValue(Cell.Offset(, 1)) <= DateValue([B3])
    DK1 = InStr(1, Cell.Offset(, 3), [F3], 1) = 1
            If DK1 Or InStr(1, Cell.Offset(, 4), [F3], 1) = 1 Then
            Select Case [C3]
                Case 0
                    Cells(r, 1) = Cell
                    Cells(r, 2) = Cell.Offset(, 1)
                    Cells(r, 3) = Cell.Offset(, 2)
                    If DK1 Then
                        Cells(r, 4) = Cell.Offset(, 4)
                        Cells(r, 5) = Cell.Offset(, 5)
                    Else
                        Cells(r, 4) = Cell.Offset(, 3)
                        Cells(r, 6) = Cell.Offset(, 5)
                    End If
                    Cells(r, 7) = Cell.Offset(, 6)
                    r = r + 1
                Case 1
                    If Ngay1 * Ngay2 = 1 Then
                    Cells(r, 1) = Cell
                    Cells(r, 2) = Cell.Offset(, 1)
                    Cells(r, 3) = Cell.Offset(, 2)
                    If DK1 Then
                        Cells(r, 4) = Cell.Offset(, 4)
                        Cells(r, 5) = Cell.Offset(, 5)
                    Else
                        Cells(r, 4) = Cell.Offset(, 3)
                        Cells(r, 6) = Cell.Offset(, 5)
                    End If
                    Cells(r, 7) = Cell.Offset(, 6)
                    r = r + 1
                    End If
                End Select
            Cells(r, 4).HorizontalAlignment = xlCenter
            Cells(r, 5).NumberFormat = "#,##0"
            Cells(r, 6).NumberFormat = "#,##0"
            Cells(r, 7).HorizontalAlignment = xlCenter
        End If
    Next
End With
[C3] = 0
[G3] = Timer - t
[A6:G6].AutoFilter
Application.ScreenUpdating = True
End Sub
Hi, chào bạn. Code convert của bạn chạy ok lắm, nhưng chỉ ok với với những trường hợp các cặp định khoản đi liền kề nhau.Mình có một mẫu data và convert bạn xem hình nhé (chỉ có 2 chứng từ thôi), mình chạy rồi nhưng bị lỗi. Trong data chỗ màu xanh thì khi convert nó không hiểu, còn chỗ màu vàng thì nhảy sai tài khoản và đúp lên 1 định khoản nữa. Dữ liệu này từ ERP xuất sang. Nếu ở dòng màu xanh mình sắp xếp lại dòng nợ xong rồi mới đến dòng có hoặc ngược lại (cùng một phiếu) thì ok, nhưng nếu có 3 định khoản như vậy nợ xong rồi đến có rồi nợ tiếp, xem kẽ nhau thì code này khi chạy nó không hiểu.

convert.JPGdata.JPG
 
Lần chỉnh sửa cuối:
Nhờ anh Danh xem giúp mình thử khi dùng file NKC chuyển Nợ-Có 1 dòng ở #2 của anh, khi dùng máy mình bấm convert thì bị báo lỗi như file đính kèm. Xin cảm ơn!
 

File đính kèm

Mình gửi file mới, dùng chung cho các loại phần mềm, ở sheet DATA các bạn làm theo mẫu chuẩn là được.
sao về mình sử dụng không được vậy nè bạn. sổ mình chạy ra lúc nào cũng bị lệch hết ak. còn các sheet dư bạn để làm j thế có thể giâỉ thích giúp mình được không
 
Có code mới không anh HoangDanh ơi? %#^#$
Em làm mãi nhưng mà toàn lệch thôi ạ.
 

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

Back
Top Bottom