Cần Mọi người Lập giúp cho sổ cái . (1 người xem)

Liên hệ QC

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

cuongnguyencuong

Thành viên mới
Tham gia
8/5/14
Bài viết
43
Được thích
1
Mọi người ơi, ai biết thì giúp mình lập 1 sổ cái bằng vba Excel nhé. cám ơn mọi người nhiều.
 
Đây là code tạo sổ cái;
Mã:
Type TCong
DkNo As Long
DkCo As Long
PSNo As Long
PSCo As Long
End Type
Sub SoCaiTK()
Dim Tm, Tk, Kq(), Tng, Dng, i, j, k
Dim mS As TCong
Tm = Sheet3.Range("A3:M" & Sheet3.[k65536].End(3).Row)
Tk = Sheet8.[L9]: Tng = Sheet8.[L6]: Dng = Sheet8.[L7]
For i = 1 To UBound(Tm, 1)
If Tm(i, 5) & Tm(i, 6) <> "" Then
Tm(i, 7) = Tm(i, 5)
Tm(i, 8) = Tm(i, 6)
ElseIf Tm(i, 3) & Tm(i, 4) <> "" Then
Tm(i, 7) = Tm(i, 3)
Tm(i, 8) = Tm(i, 4)
End If
Next
ReDim Kq(1 To 50000, 1 To 9)
For i = 1 To UBound(Tm, 1)
If Tm(i, 8) < Tng And Tm(i, 11) Like Tk & "*" Then
mS.DkNo = mS.DkNo + Tm(i, 13)
ElseIf Tm(i, 8) < Tng And Tm(i, 12) Like Tk & "*" Then
mS.DkCo = mS.DkCo + Tm(i, 13)
ElseIf Tm(i, 8) >= Tng And Tm(i, 8) <= Dng And Tm(i, 11) Like Tk & "*" Then
k = k + 1
Kq(k, 1) = Tm(i, 9)
Kq(k, 2) = Tm(i, 7)
Kq(k, 3) = Tm(i, 8)
Kq(k, 4) = Tm(i, 10)
Kq(k, 7) = Tm(i, 12)
Kq(k, 8) = Tm(i, 13)
mS.PSNo = mS.PSNo + Tm(i, 13)
ElseIf Tm(i, 8) >= Tng And Tm(i, 8) <= Dng And Tm(i, 12) Like Tk & "*" Then
k = k + 1
Kq(k, 1) = Tm(i, 9)
Kq(k, 2) = Tm(i, 7)
Kq(k, 3) = Tm(i, 8)
Kq(k, 4) = Tm(i, 10)
Kq(k, 7) = Tm(i, 11)
Kq(k, 9) = Tm(i, 13)
mS.PSCo = mS.PSCo + Tm(i, 13)
End If
Next
Sheet8.[A12:I50000].Clear: Sheet8.[H11] = 0: Sheet8.[I11] = 0
If mS.DkNo > mS.DkCo Then Sheet8.[H11] = mS.DkNo - mS.DkCo
If mS.DkCo > mS.DkNo Then Sheet8.[I11] = mS.DkCo - mS.DkNo
k = k + 2
Kq(k, 4) = "Cong phat sinh trong ky : "
Kq(k, 8) = mS.PSNo * 1
Kq(k, 9) = mS.PSCo * 1
k = k + 1
Kq(k, 4) = "So du cuoi ky"
If mS.DkNo - mS.DkCo + mS.PSNo - mS.PSCo > 0 Then Kq(k, 8) = mS.DkNo - mS.DkCo + mS.PSNo - mS.PSCo
If mS.DkCo - mS.DkNo + mS.PSCo - mS.PSNo > 0 Then Kq(k, 9) = mS.DkCo - mS.DkNo + mS.PSCo - mS.PSNo
With Sheet8.Range("A12:I" & 11 + k)
.Value = Kq
.Borders.LineStyle = xlContinuous
.Borders.Weight = xlThin
    End With
    Sheet8.Range("A12:I" & 11 + k - 2).Borders(xlInsideHorizontal).Weight = xlHairline
    Sheet8.Cells(k + 10, 1).Resize(2, 9).Font.Bold = True
    Sheet8.Cells(12, "G").Resize(k).HorizontalAlignment = xlLeft
    Sheet8.Cells(12, "H").Resize(k, 2).NumberFormat = "#,##0"
End Sub
 

File đính kèm

Upvote 0
Cám ơn anh Sealand rất là nhiều. Nếu cũng với code này em muốn thêm dòng "Cộng luỹ kế " ở dòng cuối thì phải thêm code như thế nào vậy anh !
 
Upvote 0
Để xác định cộng luỹ kế nó phụ thuộc vào thời điểm đầu kỳ kế toán. Đa số các đơn vị xác định là ngày 01/01 hàng năm. Nhưng một số công ty khác do ảnh hưởng của thời vụ hay chu kỳ kinh doanh mà đăng ký khác đi.
Vậy để xác định được luỹ kế ta thêm trong biến TCong 2 biến Luỹ kế theo thời gian Đầu kỳ Kế toán---Đến ngày.
Việc sử lý về Code thì đơn giản nhưng thực tiễn là phức tạp nhiều.
 
Upvote 0
Trường hợp file cũ em thêm 2 cột để làm 1 cái sổ khác thì anh xem có thể áp dụng code trên được giúp em kg?. Cám ơn anh nhiều nhiều !
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn sự giúp đỡ của anh, anh ví dụ thử cho em code lũy kế từ đầu năm (01/01) nhé anh?
 
Upvote 0
Bạn này thật là, mở cửa cho "chôm" code mà không xong.
Bạn xem nha, có đủ các yêu cầu mới của bạn.
 

File đính kèm

Upvote 0
Cám ơn anh Sealand nhiều nhiều, sổ của em nhờ có anh giúp đỡ, nếu không thì đã xong rồi. Anh Sealand thiệt là nhân tài, anh ở Bình Dương phải không anh Sealand? mình gặp nhau nhé để em có dịp cảm tạ anh. hi hi !
 
Upvote 0
Bạn chép Code sau thay vào để sử lý:

1/ Lấy số dư trên DMTK
2/Đổi biến Long sang Double để đối phó với số tiền VN quá lớn
Mã:
Type TCong
[COLOR=#ff0000]DkNo As Double
DkCo As Double
PSNo As Double
PSCo As Double
NoLk As Double
CoLk As Double[/COLOR]
End Type
Sub SoCaiTK()
Dim Tm, Tk, Kq(), Tng, Dng, i, j, k
Dim mS As TCong[COLOR=#ff0000], Cl As Range[/COLOR]
Tm = Sheet3.Range("A3:M" & Sheet3.[k65536].End(3).Row)
Tk = Sheet8.[G4]: Tng = Sheet8.[K5]: Dng = Sheet8.[K6]
[COLOR=#ff0000]Set Cl = Sheet11.Range("D3:D1000").Find(Tk)
If Not Cl Is Nothing Then
mS.DkNo = Cl.Offset(, 2).Value
mS.DkCo = Cl.Offset(, 3).Value
Set Cl = Nothing
End If[/COLOR]

For i = 1 To UBound(Tm, 1)
If Tm(i, 5) & Tm(i, 6) <> "" Then
Tm(i, 7) = Tm(i, 5)
Tm(i, 8) = Tm(i, 6)
ElseIf Tm(i, 3) & Tm(i, 4) <> "" Then
Tm(i, 7) = Tm(i, 3)
Tm(i, 8) = Tm(i, 4)
End If
Next
ReDim Kq(1 To 50000, 1 To 11)
For i = 1 To UBound(Tm, 1)
If Tm(i, 8) < Tng And Tm(i, 11) Like Tk & "*" Then
mS.DkNo = mS.DkNo + Tm(i, 13)
If Tm(i, 8) >= DateSerial(Year(Dng), 1, 1) Then mS.NoLk = mS.NoLk + Tm(i, 13)
ElseIf Tm(i, 8) < Tng And Tm(i, 12) Like Tk & "*" Then
mS.DkCo = mS.DkCo + Tm(i, 13)
If Tm(i, 8) >= DateSerial(Year(Dng), 1, 1) Then mS.CoLk = mS.CoLk + Tm(i, 13)
ElseIf Tm(i, 8) >= Tng And Tm(i, 8) <= Dng And Tm(i, 11) Like Tk & "*" Then
k = k + 1
Kq(k, 1) = Tm(i, 9)
Kq(k, 2) = Tm(i, 7)
Kq(k, 3) = Tm(i, 8)
Kq(k, 4) = Tm(i, 10)
Kq(k, 7) = Tm(i, 12)
Kq(k, 8) = Tm(i, 13)
mS.PSNo = mS.PSNo + Tm(i, 13)
mS.NoLk = mS.NoLk + Tm(i, 13)
If mS.DkNo - mS.DkCo + mS.PSNo - mS.PSCo > 0 Then Kq(k, 10) = mS.DkNo - mS.DkCo + mS.PSNo - mS.PSCo
If mS.DkCo - mS.DkNo + mS.PSCo - mS.PSNo > 0 Then Kq(k, 11) = mS.DkCo - mS.DkNo + mS.PSCo - mS.PSNo
ElseIf Tm(i, 8) >= Tng And Tm(i, 8) <= Dng And Tm(i, 12) Like Tk & "*" Then
k = k + 1
Kq(k, 1) = Tm(i, 9)
Kq(k, 2) = Tm(i, 7)
Kq(k, 3) = Tm(i, 8)
Kq(k, 4) = Tm(i, 10)
Kq(k, 7) = Tm(i, 11)
Kq(k, 9) = Tm(i, 13)
mS.PSCo = mS.PSCo + Tm(i, 13)
mS.CoLk = mS.CoLk + Tm(i, 13)
If mS.DkNo - mS.DkCo + mS.PSNo - mS.PSCo > 0 Then Kq(k, 10) = mS.DkNo - mS.DkCo + mS.PSNo - mS.PSCo
If mS.DkCo - mS.DkNo + mS.PSCo - mS.PSNo > 0 Then Kq(k, 11) = mS.DkCo - mS.DkNo + mS.PSCo - mS.PSNo
End If
Next
Sheet8.[A12:K50000].Clear: Sheet8.[J11] = 0: Sheet8.[K11] = 0
If mS.DkNo > mS.DkCo Then Sheet8.[J11] = mS.DkNo - mS.DkCo
If mS.DkCo > mS.DkNo Then Sheet8.[K11] = mS.DkCo - mS.DkNo
k = k + 2
Kq(k, 4) = "Cong phat sinh trong ky : "
Kq(k, 8) = mS.PSNo
Kq(k, 9) = mS.PSCo
k = k + 1
Kq(k, 4) = "Luy ke phat sinh tu dau nam " & Year(Tng) & " :"
Kq(k, 8) = mS.NoLk
Kq(k, 9) = mS.CoLk
k = k + 1
Kq(k, 4) = "So du cuoi ky"
If mS.DkNo - mS.DkCo + mS.PSNo - mS.PSCo > 0 Then Kq(k, 10) = mS.DkNo - mS.DkCo + mS.PSNo - mS.PSCo
If mS.DkCo - mS.DkNo + mS.PSCo - mS.PSNo > 0 Then Kq(k, 11) = mS.DkCo - mS.DkNo + mS.PSCo - mS.PSNo
With Sheet8.Range("A12:K" & 11 + k)
.Value = Kq
.Borders.LineStyle = xlContinuous
.Borders.Weight = xlThin
    End With
    Sheet8.Range("A12:K" & 11 + k - 3).Borders(xlInsideHorizontal).Weight = xlHairline
    Sheet8.Cells(k + 9, 1).Resize(3, 11).Font.Bold = True
    Sheet8.Cells(12, "G").Resize(k).HorizontalAlignment = xlLeft
    Sheet8.Cells(12, "H").Resize(k, 4).NumberFormat = "#,##0"
End Sub
 
Upvote 0
Cảm ơn anh Sealand rất nhiều, cho em có cơ hội gặp anh để cảm ơn nhe ?
 
Upvote 0
Em bị 1 lỗi nhỏ là ....em coppy hết code của anh qua file sổ của em, mỗi lần em bấm nút "Tạo sổ" thì nó hiện định dạng sổ hết về Font VNI-Times. Vậy phải làm sao đây anh ?
 
Upvote 0
Em bị 1 lỗi nhỏ là ....em coppy hết code của anh qua file sổ của em, mỗi lần em bấm nút "Tạo sổ" thì nó hiện định dạng sổ hết về Font VNI-Times. Vậy phải làm sao đây anh ?


Em tìm đến đoạn Code (Đây là mình chuyển về font "Times New Roman" của Unicode còn bạn tự chọn font cho mình):

Sheet8.[A12:K50000].Clear: Sheet8.[J11] = 0: Sheet8.[K11] = 0

Em chèn thêm dòng Code:


Sheet8.[A12:K50000].Font.Name = "Times New Roman"
 
Lần chỉnh sửa cuối:
Upvote 0
Đây là code tạo sổ cái;
Mã:
Type TCong
DkNo As Long
DkCo As Long
PSNo As Long
PSCo As Long
End Type
Sub SoCaiTK()
Dim Tm, Tk, Kq(), Tng, Dng, i, j, k
Dim mS As TCong
Tm = Sheet3.Range("A3:M" & Sheet3.[k65536].End(3).Row)
Tk = Sheet8.[L9]: Tng = Sheet8.[L6]: Dng = Sheet8.[L7]
For i = 1 To UBound(Tm, 1)
If Tm(i, 5) & Tm(i, 6) <> "" Then
Tm(i, 7) = Tm(i, 5)
Tm(i, 8) = Tm(i, 6)
ElseIf Tm(i, 3) & Tm(i, 4) <> "" Then
Tm(i, 7) = Tm(i, 3)
Tm(i, 8) = Tm(i, 4)
End If
Next
ReDim Kq(1 To 50000, 1 To 9)
For i = 1 To UBound(Tm, 1)
If Tm(i, 8) < Tng And Tm(i, 11) Like Tk & "*" Then
mS.DkNo = mS.DkNo + Tm(i, 13)
ElseIf Tm(i, 8) < Tng And Tm(i, 12) Like Tk & "*" Then
mS.DkCo = mS.DkCo + Tm(i, 13)
ElseIf Tm(i, 8) >= Tng And Tm(i, 8) <= Dng And Tm(i, 11) Like Tk & "*" Then
k = k + 1
Kq(k, 1) = Tm(i, 9)
Kq(k, 2) = Tm(i, 7)
Kq(k, 3) = Tm(i, 8)
Kq(k, 4) = Tm(i, 10)
Kq(k, 7) = Tm(i, 12)
Kq(k, 8) = Tm(i, 13)
mS.PSNo = mS.PSNo + Tm(i, 13)
ElseIf Tm(i, 8) >= Tng And Tm(i, 8) <= Dng And Tm(i, 12) Like Tk & "*" Then
k = k + 1
Kq(k, 1) = Tm(i, 9)
Kq(k, 2) = Tm(i, 7)
Kq(k, 3) = Tm(i, 8)
Kq(k, 4) = Tm(i, 10)
Kq(k, 7) = Tm(i, 11)
Kq(k, 9) = Tm(i, 13)
mS.PSCo = mS.PSCo + Tm(i, 13)
End If
Next
Sheet8.[A12:I50000].Clear: Sheet8.[H11] = 0: Sheet8.[I11] = 0
If mS.DkNo > mS.DkCo Then Sheet8.[H11] = mS.DkNo - mS.DkCo
If mS.DkCo > mS.DkNo Then Sheet8.[I11] = mS.DkCo - mS.DkNo
k = k + 2
Kq(k, 4) = "Cong phat sinh trong ky : "
Kq(k, 8) = mS.PSNo * 1
Kq(k, 9) = mS.PSCo * 1
k = k + 1
Kq(k, 4) = "So du cuoi ky"
If mS.DkNo - mS.DkCo + mS.PSNo - mS.PSCo > 0 Then Kq(k, 8) = mS.DkNo - mS.DkCo + mS.PSNo - mS.PSCo
If mS.DkCo - mS.DkNo + mS.PSCo - mS.PSNo > 0 Then Kq(k, 9) = mS.DkCo - mS.DkNo + mS.PSCo - mS.PSNo
With Sheet8.Range("A12:I" & 11 + k)
.Value = Kq
.Borders.LineStyle = xlContinuous
.Borders.Weight = xlThin
    End With
    Sheet8.Range("A12:I" & 11 + k - 2).Borders(xlInsideHorizontal).Weight = xlHairline
    Sheet8.Cells(k + 10, 1).Resize(2, 9).Font.Bold = True
    Sheet8.Cells(12, "G").Resize(k).HorizontalAlignment = xlLeft
    Sheet8.Cells(12, "H").Resize(k, 2).NumberFormat = "#,##0"
End Sub
[/QU
Bạn chép Code sau thay vào để sử lý:

1/ Lấy số dư trên DMTK
2/Đổi biến Long sang Double để đối phó với số tiền VN quá lớn
Mã:
Type TCong
[COLOR=#ff0000]DkNo As Double
DkCo As Double
PSNo As Double
PSCo As Double
NoLk As Double
CoLk As Double[/COLOR]
End Type
Sub SoCaiTK()
Dim Tm, Tk, Kq(), Tng, Dng, i, j, k
Dim mS As TCong[COLOR=#ff0000], Cl As Range[/COLOR]
Tm = Sheet3.Range("A3:M" & Sheet3.[k65536].End(3).Row)
Tk = Sheet8.[G4]: Tng = Sheet8.[K5]: Dng = Sheet8.[K6]
[COLOR=#ff0000]Set Cl = Sheet11.Range("D3:D1000").Find(Tk)
If Not Cl Is Nothing Then
mS.DkNo = Cl.Offset(, 2).Value
mS.DkCo = Cl.Offset(, 3).Value
Set Cl = Nothing
End If[/COLOR]

For i = 1 To UBound(Tm, 1)
If Tm(i, 5) & Tm(i, 6) <> "" Then
Tm(i, 7) = Tm(i, 5)
Tm(i, 8) = Tm(i, 6)
ElseIf Tm(i, 3) & Tm(i, 4) <> "" Then
Tm(i, 7) = Tm(i, 3)
Tm(i, 8) = Tm(i, 4)
End If
Next
ReDim Kq(1 To 50000, 1 To 11)
For i = 1 To UBound(Tm, 1)
If Tm(i, 8) < Tng And Tm(i, 11) Like Tk & "*" Then
mS.DkNo = mS.DkNo + Tm(i, 13)
If Tm(i, 8) >= DateSerial(Year(Dng), 1, 1) Then mS.NoLk = mS.NoLk + Tm(i, 13)
ElseIf Tm(i, 8) < Tng And Tm(i, 12) Like Tk & "*" Then
mS.DkCo = mS.DkCo + Tm(i, 13)
If Tm(i, 8) >= DateSerial(Year(Dng), 1, 1) Then mS.CoLk = mS.CoLk + Tm(i, 13)
ElseIf Tm(i, 8) >= Tng And Tm(i, 8) <= Dng And Tm(i, 11) Like Tk & "*" Then
k = k + 1
Kq(k, 1) = Tm(i, 9)
Kq(k, 2) = Tm(i, 7)
Kq(k, 3) = Tm(i, 8)
Kq(k, 4) = Tm(i, 10)
Kq(k, 7) = Tm(i, 12)
Kq(k, 8) = Tm(i, 13)
mS.PSNo = mS.PSNo + Tm(i, 13)
mS.NoLk = mS.NoLk + Tm(i, 13)
If mS.DkNo - mS.DkCo + mS.PSNo - mS.PSCo > 0 Then Kq(k, 10) = mS.DkNo - mS.DkCo + mS.PSNo - mS.PSCo
If mS.DkCo - mS.DkNo + mS.PSCo - mS.PSNo > 0 Then Kq(k, 11) = mS.DkCo - mS.DkNo + mS.PSCo - mS.PSNo
ElseIf Tm(i, 8) >= Tng And Tm(i, 8) <= Dng And Tm(i, 12) Like Tk & "*" Then
k = k + 1
Kq(k, 1) = Tm(i, 9)
Kq(k, 2) = Tm(i, 7)
Kq(k, 3) = Tm(i, 8)
Kq(k, 4) = Tm(i, 10)
Kq(k, 7) = Tm(i, 11)
Kq(k, 9) = Tm(i, 13)
mS.PSCo = mS.PSCo + Tm(i, 13)
mS.CoLk = mS.CoLk + Tm(i, 13)
If mS.DkNo - mS.DkCo + mS.PSNo - mS.PSCo > 0 Then Kq(k, 10) = mS.DkNo - mS.DkCo + mS.PSNo - mS.PSCo
If mS.DkCo - mS.DkNo + mS.PSCo - mS.PSNo > 0 Then Kq(k, 11) = mS.DkCo - mS.DkNo + mS.PSCo - mS.PSNo
End If
Next
Sheet8.[A12:K50000].Clear: Sheet8.[J11] = 0: Sheet8.[K11] = 0
If mS.DkNo > mS.DkCo Then Sheet8.[J11] = mS.DkNo - mS.DkCo
If mS.DkCo > mS.DkNo Then Sheet8.[K11] = mS.DkCo - mS.DkNo
k = k + 2
Kq(k, 4) = "Cong phat sinh trong ky : "
Kq(k, 8) = mS.PSNo
Kq(k, 9) = mS.PSCo
k = k + 1
Kq(k, 4) = "Luy ke phat sinh tu dau nam " & Year(Tng) & " :"
Kq(k, 8) = mS.NoLk
Kq(k, 9) = mS.CoLk
k = k + 1
Kq(k, 4) = "So du cuoi ky"
If mS.DkNo - mS.DkCo + mS.PSNo - mS.PSCo > 0 Then Kq(k, 10) = mS.DkNo - mS.DkCo + mS.PSNo - mS.PSCo
If mS.DkCo - mS.DkNo + mS.PSCo - mS.PSNo > 0 Then Kq(k, 11) = mS.DkCo - mS.DkNo + mS.PSCo - mS.PSNo
With Sheet8.Range("A12:K" & 11 + k)
.Value = Kq
.Borders.LineStyle = xlContinuous
.Borders.Weight = xlThin
    End With
    Sheet8.Range("A12:K" & 11 + k - 3).Borders(xlInsideHorizontal).Weight = xlHairline
    Sheet8.Cells(k + 9, 1).Resize(3, 11).Font.Bold = True
    Sheet8.Cells(12, "G").Resize(k).HorizontalAlignment = xlLeft
    Sheet8.Cells(12, "H").Resize(k, 4).NumberFormat = "#,##0"
End Sub
Anh có thể giúp em tạo Function Tổng quát dạng này được không ạ
 
Upvote 0
Web KT

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

Back
Top Bottom