1/ Bạn nên sửa tiêu đề thành: Giúp đánh số thứ tự có điều kiện.Em có file như trên, giờ muốn đánh phiếu tự động thì code thế nào được, giúp em với ạ
Bạn thử.Em có file như trên, giờ muốn đánh phiếu tự động thì code thế nào được, giúp em với ạ
Sub danhso()
Dim arr, i As Long, lr As Long, kq, so As Long, dic As Object, dk As String, dks As String
Set dic = CreateObject("scripting.dictionary")
With Sheets("data")
lr = .Range("A" & Rows.Count).End(xlUp).Row
arr = .Range("D2:J" & lr).Value
ReDim kq(1 To UBound(arr), 1 To 1)
For i = 1 To UBound(arr)
If arr(i, 7) = "chi" Then
dk = "PC"
ElseIf arr(i, 7) = "thu" Then
dk = "PT"
ElseIf arr(i, 7) = "nhap" Then
dk = "PN"
ElseIf arr(i, 7) = Empty Then
dk = "PKT"
Else
dk = Empty
End If
If dk <> Empty Then
dks = dk & "#" & arr(i, 1) & "#" & arr(i, 2)
If Not dic.exists(dk) Then
dic.Add dk, 1
dic.Item(dks) = 1
kq(i, 1) = dk & Format(1, "000")
Else
so = dic.Item(dk)
If Not dic.exists(dks) Then
so = so + 1
dic.Add dks, ""
End If
kq(i, 1) = dk & Format(so, "000")
dic.Item(dk) = so
End If
End If
Next i
.Range("C2:C" & lr).Value = kq
End With
End Sub
Bạn thử.
Mã:Sub danhso() Dim arr, i As Long, lr As Long, kq, so As Long, dic As Object, dk As String, dks As String Set dic = CreateObject("scripting.dictionary") With Sheets("data") lr = .Range("A" & Rows.Count).End(xlUp).Row arr = .Range("D2:J" & lr).Value ReDim kq(1 To UBound(arr), 1 To 1) For i = 1 To UBound(arr) If arr(i, 7) = "chi" Then dk = "PC" ElseIf arr(i, 7) = "thu" Then dk = "PT" ElseIf arr(i, 7) = "nhap" Then dk = "PN" ElseIf arr(i, 7) = Empty Then dk = "PKT" Else dk = Empty End If If dk <> Empty Then dks = dk & "#" & arr(i, 1) & "#" & arr(i, 2) If Not dic.exists(dk) Then dic.Add dk, 1 dic.Item(dks) = 1 kq(i, 1) = dk & Format(1, "000") Else so = dic.Item(dk) If Not dic.exists(dks) Then so = so + 1 dic.Add dks, "" End If kq(i, 1) = dk & Format(so, "000") dic.Item(dk) = so End If End If Next i .Range("C2:C" & lr).Value = kq End With End Sub
Bài này còn nhiều vấn đềEm có file như trên, giờ muốn đánh phiếu tự động thì code thế nào được, giúp em với ạ
Không hiểu bạn cho ví dụ cụ thể nhé.Bạn thử.
Mã:Sub danhso() Dim arr, i As Long, lr As Long, kq, so As Long, dic As Object, dk As String, dks As String Set dic = CreateObject("scripting.dictionary") With Sheets("data") lr = .Range("A" & Rows.Count).End(xlUp).Row arr = .Range("D2:J" & lr).Value ReDim kq(1 To UBound(arr), 1 To 1) For i = 1 To UBound(arr) If arr(i, 7) = "chi" Then dk = "PC" ElseIf arr(i, 7) = "thu" Then dk = "PT" ElseIf arr(i, 7) = "nhap" Then dk = "PN" ElseIf arr(i, 7) = Empty Then dk = "PKT" Else dk = Empty End If If dk <> Empty Then dks = dk & "#" & arr(i, 1) & "#" & arr(i, 2) If Not dic.exists(dk) Then dic.Add dk, 1 dic.Item(dks) = 1 kq(i, 1) = dk & Format(1, "000") Else so = dic.Item(dk) If Not dic.exists(dks) Then so = so + 1 dic.Add dks, "" End If kq(i, 1) = dk & Format(so, "000") dic.Item(dk) = so End If End If Next i .Range("C2:C" & lr).Value = kq End With End Sub
Sub vidu()
Const chuoi_ktra = "chithu nhap"
Const chuoi_kqua = "PCPTPN"
Dim idex As Long, loai As String
For i = 1 To UBound(arr)
loai = arr(i, 7)
If Len(loai) = 0 Then
dk = "PKT"
Else
idex = InStr(1, chuoi_ktra, loai, vbTextCompare)
If idex > 0 Then dk = Mid(chuoi_kqua, Fix(idex / 2) + 1, 2)
End If
If Len(dk) > 0 Then
'dks=
'...
End If
Next i
End Sub
Cách làm của bạn không ổn, nên thuê công ty dịch vụ kế toán hướng dẫn toàn bộ quy trình hạch toánEm có file như trên, giờ muốn đánh phiếu tự động thì code thế nào được, giúp em với ạ
chuoi_ktra thì cần InStr nên để nguyên chuỗi là phải. Nhưng bên kqua thì cứ mỗi lần tính lại làm con toán tách chuỗi?Chỗ xác định loại phiếu có thể làm vầy.
PHP:idex = InStr(1, chuoi_ktra, loai, vbTextCompare) If idex > 0 Then dk = Mid(chuoi_kqua, Fix(idex / 2) + 1, 2)
Em có công thức tự động nhảy các loại phiếu rồi aBài này còn nhiều vấn đề
1/ Data bố trí chưa chuẩn như sau:
- Thực tế nên có định khoản như 111, 152, 153, 154 ... từ đó người ta xác định được nó là phiếu thu - chi- nhập hay xuất, nên việc nhập thêm ở cột J là thừa
- Giả sử một ngày nào đó sẽ có 2 hóa đơn xyz của 2 nhà cung cấp khác nhau mà cùng ra phiếu chi ở cùng 1 thời điểm thì sao? Nên có 1 cột mã khách hàng
...
Bản code đang có tình trạng những dòng trống không có dữ liệu thì vẫn bị nhập PKT ạKhông hiểu bạn cho ví dụ cụ thể nhé.
code này là cho đoạn nào anh ? em gép vào đâu đượcChỗ xác định loại phiếu có thể làm vầy.
PHP:Sub vidu() Const chuoi_ktra = "chithu nhap" Const chuoi_kqua = "PCPTPN" Dim idex As Long, loai As String For i = 1 To UBound(arr) loai = arr(i, 7) If Len(loai) = 0 Then dk = "PKT" Else idex = InStr(1, chuoi_ktra, loai, vbTextCompare) If idex > 0 Then dk = Mid(chuoi_kqua, Fix(idex / 2) + 1, 2) End If If Len(dk) > 0 Then 'dks= '... End If Next i End Sub
cái này là 1 phần của biểu của em ạ, để e xin code cơ bản thôi ko mất công mọi người ạCách làm của bạn không ổn, nên thuê công ty dịch vụ kế toán hướng dẫn toàn bộ quy trình hạch toán
Cột J là loại chứng từ và không hề thừa. Vấn đề ở chỗ nó nên là 1 List chọn để không sai sót khi gõ tay. Thêm cột định khoản rồi code nào đọc định khoản ra PC, PT, PN, ...? Người kế toán giỏi còn phải đọc bằng mắt và xác định bằng trí nhớ, chứ excel nào biết kế toán?Bài này còn nhiều vấn đề
1/ Data bố trí chưa chuẩn như sau:
- Thực tế nên có định khoản như 111, 152, 153, 154 ... từ đó người ta xác định được nó là phiếu thu - chi- nhập hay xuất, nên việc nhập thêm ở cột J là thừa
đúng bác, nếu căn cứ nợ có để xác định loại phiếu dẫn tới khó phức tạp và tùy biến cho người dùng ko am hiểu code, vì vậy loại phiếu sẽ được tạo list riêng cho kế toán tùy biến ạCột J là loại chứng từ và không hề thừa. Vấn đề ở chỗ nó nên là 1 List chọn để không sai sót khi gõ tay. Thêm cột định khoản rồi code nào đọc định khoản ra PC, PT, PN, ...? Người kế toán giỏi còn phải đọc bằng mắt và xác định bằng trí nhớ, chứ excel nào biết kế toán?
Vậy nên tạo list bằng đúng với tiền tồ số phiếu luôn (list = PT, PC, PN, PX, ...)đúng bác, nếu căn cứ nợ có để xác định loại phiếu dẫn tới khó phức tạp và tùy biến cho người dùng ko am hiểu code, vì vậy loại phiếu sẽ được tạo list riêng cho kế toán tùy biến ạ
Em vẫn dùng số tài khoản mà đã định khoản ở 2 cột để xác định nó là loại phiếu gìCột J là loại chứng từ và không hề thừa. Vấn đề ở chỗ nó nên là 1 List chọn để không sai sót khi gõ tay. Thêm cột định khoản rồi code nào đọc định khoản ra PC, PT, PN, ...? Người kế toán giỏi còn phải đọc bằng mắt và xác định bằng trí nhớ, chứ excel nào biết kế toán?
Em biết vì em là kế toán giỏi và thuộc định khoản. Nhưng em thử dùng công thức đánh số phiếu có tiếp đầu ngữ PT, PC, ... xem có dễ không? Nếu em không biết VBA và nhờ giúp như chủ đề này, người muốn giúp không biết kế toán họ sẽ nói sao?Em vẫn dùng số tài khoản mà đã định khoản ở 2 cột để xác định nó là loại phiếu gì
Thông thường thì người viết code không biết kế toán nhưng chủ thớt đưa Data thật và mô tả rỏ ràng thì người giúp vẫn nhận biết đượcNếu em không biết VBA và nhờ giúp như chủ đề này, người muốn giúp không biết kế toán họ sẽ nói sao?
Cái này tôi không tin. Dữ liệu thật chỉ là dữ liệu nhất thời. Người làm việc với code mà không nghĩ đến chuyện lâu dài là người code ẩu.Thông thường thì người viết code không biết kế toán nhưng chủ thớt đưa Data thật và mô tả rỏ ràng thì người giúp vẫn nhận biết được
Vẫn được ạ, nhưng trong trường hợp chuyển sang công ty mới, stk khác thì sẽ rất khó khăn cho việc update lại. Thứ 2 là dẫn đến các hàm và báo cáoEm vẫn dùng số tài khoản mà đã định khoản ở 2 cột để xác định nó là loại phiếu gì
Dạ cái này dùng cho dịch vụ kế toán ạ, sau cả năm làm cuối năm chạy lại phiếu để in chứng từ ạCái này tôi không tin. Dữ liệu thật chỉ là dữ liệu nhất thời. Người làm việc với code mà không nghĩ đến chuyện lâu dài là người code ẩu.
Trước mắt là tôi biết cả kế toán lẫn code mà cái này tôi nhận biết không nổi:
- cứ mỗi lần chạy code thì các số phiếu lại khởi đầu từ 001.
- sau một thời gian, ta có một đống phiếu PT001's ?
Trước khi code cần phải hỏi: chuyện này xảy ra bao lâu một lần, và cái số phiếu ghi được ấy dùng để làm gì?
Nếu mõi năm chạy một lần thì số phiếu phải có cái gì đó để xác định năm....
Dạ cái này dùng cho dịch vụ kế toán ạ, sau cả năm làm cuối năm chạy lại phiếu để in chứng từ ạ
Cái này tôi chưa hiểunhưng trong trường hợp chuyển sang công ty mới, stk khác thì sẽ rất khó khăn cho việc update lại. Thứ 2 là dẫn đến các hàm và báo cáo
Cái này tôi chưa hiểu
Không biết là bạn làm dịch vụ như thế nào?
Nhận hồ sơ các cty về làm hay lập file kế toán theo yêu cầu rồi chuyển cho họ tự làm?
Nếu bạn nhận về làm thì:Của e thuộc trường hợp nhận hồ sơ về làm. Tuy nhiên số lượng nhiều mà nhân viên kế toán không phải ai cũng biết về VBA, vậy khi họ sử dụng e cố gắng một số cái tùy biến được cho mỗi công ty mà bản thân các bạn ấy có thể sửa được
Dịch vụ kế toán mà có những hạch toán với diễn giải, định khoản và loại chứng từ ngộ vậyVẫn được ạ, nhưng trong trường hợp chuyển sang công ty mới, stk khác thì sẽ rất khó khăn cho việc update lại. Thứ 2 là dẫn đến các hàm và báo cáo
Dạ cái này dùng cho dịch vụ kế toán ạ, sau cả năm làm cuối năm chạy lại phiếu để in chứng từ ạ
Thu tiền bán hàng CH Adler ngày 2/3 | 156 | 1111 | nhap |
Thu tiền bán hàng CH Vas CMT8 ngày 2/3 | 156 | 1111 | nhap |
Thu tiền bán hàng CH Cat NT ngày 2/3 | 131 | 156 | xuat |
Thu tiền bán hàng CH Vas CQ ngày 2/3 | 131 | 156 | xuat |
Thu tiền bán hàng CH Vas LVS ngày 2/3 | 131 | 156 | chi |
Thu tiền bán hàng CH Vas NDC ngày 2/3 | 131 | 153 | xuat |
Vì bên e nhận hồ sơ các công ty khác về làm, nên mỗi công ty đặc thù định khoản và tk sẽ có 1 chút khác biệt. ( đôi khi số liệu cũ của kh thì tk cũng sẽ khác). Thứ 2 trình độ nhân viên kế toán mỗi người là khác nhau nên mỗi khi update công ty mới thì ko thể ngồi cài lại VBA được mà để bên ngoài cho các bạn tùy chỉnh ạCái này tôi chưa hiểu
Không biết là bạn làm dịch vụ như thế nào?
Nhận hồ sơ các cty về làm hay lập file kế toán theo yêu cầu rồi chuyển cho họ tự làm?
dạ cái này e coppy làm mẫu thôi ạ, nên nội dung hơi tào lao ạDịch vụ kế toán mà có những hạch toán với diễn giải, định khoản và loại chứng từ ngộ vậy
Thu tiền bán hàng CH Adler ngày 2/3 156 1111 nhap Thu tiền bán hàng CH Vas CMT8 ngày 2/3 156 1111 nhap Thu tiền bán hàng CH Cat NT ngày 2/3 131 156 xuat Thu tiền bán hàng CH Vas CQ ngày 2/3 131 156 xuat Thu tiền bán hàng CH Vas LVS ngày 2/3 131 156 chi Thu tiền bán hàng CH Vas NDC ngày 2/3 131 153 xuat
Nếu bạn nhận về làm thì:
Thì bạn phải thống nhất hệ thống kế toán như Tiền mặt là 1111 chứ không dùng 111
Trừ những cty đặc thù thì sẽ thêm gì gì ...
Bạn là đầu tàu thì bạn phải chỉnh sửa code trước khi giao cho nhân viên chứ họ làm sao biết
Nếu bạn đúng số tuổi như đã ghi trên diễn đàn thì vui lòng đừng xưng hô là "em"
Dạ vâng, việc xử lý code lại nếu là vài chục thì ok, nếu lên tới cả trăm và đôi khi còn theo năm thì mỗi lần giao lại sửa thì ko đủ thời gian. Mình đã update nhập dữ liệu nhanh rồi, kế toán chỉ cần tùy biến bên ngoài thì nó tự động hiện loại phiếu vào sổ ghi.
Ngoài ra việc bổ sung loại nghiệp vụ rất có lợi cho việc tích hợp lập sổ NXT cho bên mình
Trong 1 ngày chi tạm ứng và chi lương sẽ có mấy phiếu chi? nếu 2 phiếu làm sao phân biệt?Vì bên e nhận hồ sơ các công ty khác về làm, nên mỗi công ty đặc thù định khoản và tk sẽ có 1 chút khác biệt. ( đôi khi số liệu cũ của kh thì tk cũng sẽ khác). Thứ 2 trình độ nhân viên kế toán mỗi người là khác nhau nên mỗi khi update công ty mới thì ko thể ngồi cài lại VBA được mà để bên ngoài cho các bạn tùy chỉnh ạ
Bài đã được tự động gộp:
dạ cái này e coppy làm mẫu thôi ạ, nên nội dung hơi tào lao ạ
Bài đã được tự động gộp:
Bạn phải gởi dữ liệu gần với thực tế và tương đối đầy đủ các tình huống mới viết code được, lưu ý các định khoản cuối kỳ như phân bổ kết chuyển ...Em sẽ dựa vào nội dung phiếu để phân biệt ạ
Anh ơi em sd code của a rất ok, a có thể cho e địa chỉ liên lạc ko, em muốn bổ sung một vài tính năng có trả phí ạBạn thử.
Mã:Sub danhso() Dim arr, i As Long, lr As Long, kq, so As Long, dic As Object, dk As String, dks As String Set dic = CreateObject("scripting.dictionary") With Sheets("data") lr = .Range("A" & Rows.Count).End(xlUp).Row arr = .Range("D2:J" & lr).Value ReDim kq(1 To UBound(arr), 1 To 1) For i = 1 To UBound(arr) If arr(i, 7) = "chi" Then dk = "PC" ElseIf arr(i, 7) = "thu" Then dk = "PT" ElseIf arr(i, 7) = "nhap" Then dk = "PN" ElseIf arr(i, 7) = Empty Then dk = "PKT" Else dk = Empty End If If dk <> Empty Then dks = dk & "#" & arr(i, 1) & "#" & arr(i, 2) If Not dic.exists(dk) Then dic.Add dk, 1 dic.Item(dks) = 1 kq(i, 1) = dk & Format(1, "000") Else so = dic.Item(dk) If Not dic.exists(dks) Then so = so + 1 dic.Add dks, "" End If kq(i, 1) = dk & Format(so, "000") dic.Item(dk) = so End If End If Next i .Range("C2:C" & lr).Value = kq End With End Sub
Cột hóa đơn nếu còn dùng để xử lý vấn đề khác như lập bảng kê hóa đơn sẽ khá rốiVới tôi, trong Data có cột hóa đơn/ chứng từ thì ghi thêm là BL, UL01 ... thì code tự động xác nhận là 2 phiếu khác nhau
Thông thường thì Data tôi dùng để hạch toán tổng hợp các nghiệp vụ rồi từ Data này sẽ cho ra các phiếu và các sổ chi tiếtCột hóa đơn nếu còn dùng để xử lý vấn đề khác như lập bảng kê hóa đơn sẽ khá rối
Bảng kê đầu ra đầu vào nhập từ trước có nghĩa là công việc nhập liệu thành 2 lần. Bảng kê đầu ra đầu vào phải được xuất ra từ file nhập liệu.Thông thường thì Data tôi dùng để hạch toán tổng hợp các nghiệp vụ rồi từ Data này sẽ cho ra các phiếu và các sổ chi tiết
Còn bảng kê đầu ra đầu vào thì đã làm trước nên khi lập bảng kê tình hình sử dụng hóa đơn thì sẽ dùng nó
Bác ơi cho e xin số liên lạc ạBạn thử.
Mã:Sub danhso() Dim arr, i As Long, lr As Long, kq, so As Long, dic As Object, dk As String, dks As String Set dic = CreateObject("scripting.dictionary") With Sheets("data") lr = .Range("A" & Rows.Count).End(xlUp).Row arr = .Range("D2:J" & lr).Value ReDim kq(1 To UBound(arr), 1 To 1) For i = 1 To UBound(arr) If arr(i, 7) = "chi" Then dk = "PC" ElseIf arr(i, 7) = "thu" Then dk = "PT" ElseIf arr(i, 7) = "nhap" Then dk = "PN" ElseIf arr(i, 7) = Empty Then dk = "PKT" Else dk = Empty End If If dk <> Empty Then dks = dk & "#" & arr(i, 1) & "#" & arr(i, 2) If Not dic.exists(dk) Then dic.Add dk, 1 dic.Item(dks) = 1 kq(i, 1) = dk & Format(1, "000") Else so = dic.Item(dk) If Not dic.exists(dks) Then so = so + 1 dic.Add dks, "" End If kq(i, 1) = dk & Format(so, "000") dic.Item(dk) = so End If End If Next i .Range("C2:C" & lr).Value = kq End With End Sub
Mỗi quý nhận hồ sơ 1 lần, để kịp báo cáo GTGT thì phải làm để báo cáo. Sau đó dùng các bảng kê này xử lý và ghép vào Data tổng hợp. Tôi làm kế toán khác các bạn khác, đi từ tổng hợp ra chi tiếtBảng kê đầu ra đầu vào nhập từ trước có nghĩa là công việc nhập liệu thành 2 lần. Bảng kê đầu ra đầu vào phải được xuất ra từ file nhập liệu.