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