Viết câu lệnh tự động điền số thứ tự chứng từ cho excel kế toán (1 người xem)

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

kijuto3128

Thành viên mới
Tham gia
25/10/09
Bài viết
9
Được thích
0
Em đang muốn viết câu lệnh cho công việc kế toán của em, tại ô số chứng từ sẽ tự động điền số thứ tự kèm mãct dựa vào mã chứng từ ở cột trước (Mact). Em đang có ý tưởng làm 1 vòng lặp cho nó đếm mã ct giống với nó, sau đó ghép mact và số thứ tự đếm được với nhau. Cái này không dùng countif được vì sẽ có dòng chứng từ giống nhau do chung 1 nghiệp vụ, nên em định sẽ thêm câu lệnh so sánh nội dung nữa.Bác nào giúp em với ạ. em cảm ơn trước
VD:
Mact Số CT
PC PC01
PC PC01
PC PC02
PT PT01
PC PC03
PC ?
Em thử viết cái này nhưng không chạy được.
Function SoCT(mact As Range)
Dim i, j As Integer
j = 1
For i = 2 To Range(mact).Rows.Count
If Cells(i, 1).Value = mact And Cells(i, 7).Value <> Cells(i - 1, 7).Value Then
j = j + 1
End If
Next i
Selection.Cells.Value = mact + j
End Function
 
Lần chỉnh sửa cuối:
Giả dụ dữ liệu của bạn đang ở cột [B:C] như bảng dưới đây:
PHP:
     B    C
1 MaCT  Số CT
2 PC    PC001
3 PC    PC001
4 PC    PC002
5 PT    PT001
6 PC    PC003
7 PC    ???

Tại ô [C7] bạn áp cú fáp hàm tự tạo sau: =LapFieu(B7,C1:C6)

Hàm tự tạo này có nội dung sau:

PHP:
Option Explicit

Function LapFieu(MaF As String, Rng As Range)
 Dim sRng As Range

 Set sRng = Rng.Find(MaF, , xlFormulas, xlPart, , xlPrevious)
 If sRng Is Nothing Then
    LapFieu = MaF & "001"
 Else
    LapFieu = MaF & Right("00" & CStr(CLng(Mid(sRng.Value, 3, 9)) + 1), 3)
 End If
End Function

Vì trong ví dụ của bạn có 2 dòng PC001, chuyện này hàm không thỏa theo iêu cầu của bạn được & bạn chuyển sang làm thủ công vậy!

Những mong khỏi đưa file lên!
 
Upvote 0
Thanks bạn ...nhưng mình muốn có hàm tự động chạy cho tất cả các ô luôn, chứ không viết riêng cho từng ô, với lại sẽ có nhiều trường hợp có 2 PC trùng nhau như mình nói là 1 nghiệp vụ mua hàng sẽ phải hạch toán 2 lần vừa N153 C111 và N1331 C111. nên mình muốn là nếu gặp trường hợp đó thì nó sẽ không đếm. Dù sao cũng cảm ơn bạn đã giúp đỡ. Bạn có thể sửa dòng lệnh của mình được thì mình cảm ơn do mình không biết thuộc tính của ô hiện kết quả viết sao nên còn sai ở chỗ đó.
 
Upvote 0
/(hông thể sửa được câu lệnh này, vì là lần đầu tiên tiếp xúc với nó:

PHP:
For i = 2 To Range(mact).Rows.Count And Cells(i, 7).Value <> Cells(i - 1, 7).Value
 
Upvote 0
Xin lỗi bạn hồi nãy mình post nhầm, mình vừa sửa lại được chút rồi, bây giờ mình muốn cho i chạy từ 5 đến số dòng của ô được chọn thì phải viết như thế nào?
mình viết mact.Rows.Count thì nó chĩ hiểu là 1 thôi. thanks bạn
Function SoCT(mact As Range)
Dim i, j As Integer
SoCT = mact.Rows.Count
j = 1
For i = 5 To mact.Rows.Count
If Cells(i, 2).Value = mact.Value Then
j = j + 1
End If
Next i
SoCT = mact & "0" & j

End Function
 
Upvote 0
Vậy theo bạn trong hàm của bạn:

PHP:
Function SoCT(mact As Range)
 Dim i, j As Integer
 
 SoCT = mact.Rows.Count
 j = 1
 For i = 5 To mact.Rows.Count
      If Cells(i, 2).Value = mact.Value Then
          j = j + 1
      End If
 Next i
 SoCT = mact & "0" & j
End Function

thì giá trị mact.Value sẽ là bao nhiêu?
 
Upvote 0
Xin lỗi bạn hồi nãy mình post nhầm, mình vừa sửa lại được chút rồi, bây giờ mình muốn cho i chạy từ 5 đến số dòng của ô được chọn thì phải viết như thế nào?
mình viết mact.Rows.Count thì nó chĩ hiểu là 1 thôi. thanks bạn
Function SoCT(mact As Range)
Dim i, j As Integer
SoCT = mact.Rows.Count
j = 1
For i = 5 To mact.Rows.Count
If Cells(i, 2).Value = mact.Value Then
j = j + 1
End If
Next i
SoCT = mact & "0" & j

End Function
Mình chưa rõ file của bạn thế nào nhưng chắc bạn nhầm ở chỗ mact.Rows.Count (là số lượng dòng của mact), cần thay bằng mact.Row (là số thứ tự của dòng).
 
Upvote 0
thanks bạn mình sửa lại là mact.Cells.Row thì nó đã hiện được số thứ tự của dòng.
 
Upvote 0

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

Back
Top Bottom