Nhờ viết Code để thay thế công thức tạo số thứ tự (1 người xem)

Liên hệ QC

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

dongducnhiem

Thành viên tiêu biểu
Tham gia
21/3/07
Bài viết
637
Được thích
378
Chào các bạn!
Tôi đã viết công thức tạo số phiếu thu, chi, nhập, xuất. Nhưng do Cơ sở dữ liệu nhiều nên File chạy chậm. Nên mong các bạn dựa vào công thức trong file để viết giùm tôi code có thể chạy nhanh hơn.
Tôi cũng đã tìm trên GPE, nhưng do công thức fức tạp nên cũng chưa tìm được bài tương ứng, nên rất mong các bạn giúp đỡ
Tôi muốn code thể hiện kết quả ở Cột C và D để thay thế công thức ở các cột C, D và các cột phụ Q, R, S, T, U, V (Xem file đính kèm)
Rất mong được quan tâm & giúp đỡ của các bạn, cảm ơn!
P/s: Tôi đang sử dụng Excel 2003
 

File đính kèm

Chào các bạn!
Tôi đã viết công thức tạo số phiếu thu, chi, nhập, xuất. Nhưng do Cơ sở dữ liệu nhiều nên File chạy chậm. Nên mong các bạn dựa vào công thức trong file để viết giùm tôi code có thể chạy nhanh hơn.
Tôi cũng đã tìm trên GPE, nhưng do công thức fức tạp nên cũng chưa tìm được bài tương ứng, nên rất mong các bạn giúp đỡ
Tôi muốn code thể hiện kết quả ở Cột C và D để thay thế công thức ở các cột C, D và các cột phụ Q, R, S, T, U, V (Xem file đính kèm)
Rất mong được quan tâm & giúp đỡ của các bạn, cảm ơn!
P/s: Tôi đang sử dụng Excel 2003
Xem thử file đính kèm có dùng 4 ô phụ trong cột P.
Xoá bớt sheet không cần cho nhẹ file. Bạn có thể lấy lại sheet cũ cho file bạn.
 

File đính kèm

Upvote 0
Xem thử file đính kèm có dùng 4 ô phụ trong cột P.
Xoá bớt sheet không cần cho nhẹ file. Bạn có thể lấy lại sheet cũ cho file bạn.

Cảm ơn Ba Tê đã giúp sức viết code
File gốc (do công thức) của tôi tạo ra có:
1/ Phiếu thu: 5 phiếu
2/ Phiếu chi: 61 phiếu
3/ Phiếu nhập: 130 phiếu
4/ Phiếu xuất: 84 phiếu

File của bạn tạo ra có:
1/ Phiếu thu: 4 phiếu
2/ Phiếu chi: 36 phiếu
3/ Phiếu nhập: 130 phiếu
4/ Phiếu xuất: 85 phiếu

Có sự lệch phiếu vì nguyên nhân như sau:
1/ Phiếu thu: Theo công thức, Khi nào các số liệu ở các dòng liền kề nhau của các cột B, F, G, Q cùng giống nhau thì thể hiện cùng một số phiếu. Số phiếu thu T002 của bạn đã gom 02 phiếu thu T002 (dòng 83) và T003 (dòng 86) ( của file gốc của tôi) thành 01 phiếu. Vì dòng 83 và dòng 86 không liền kề nhau
Thực tế là như thế này: Cty buổi sáng rút tiền ngân hàng 01 lần và buổi chiều rút tiền thêm một lần nữa, nên thủ quỹ phải làm 02 phiếu chi khác nhau.

2/ Phiếu xuất của bạn hơn tôi 01 phiếu: Phiếu xuất của tôi số X026 (dòng 146 và 147), code của bạn tách thành 02 phiếu X026 (dòng 146) và X027 (dòng 147). Vì bạn phân biệt Cell J146=152 và J147=153. Trên công thức của tôi không phân biệt điều này, Vì thực tế thủ kho có thể xuất nhiều mặt hàng của những tài khoản khác nhau (VD tài khoản 152 và 153 nói trên) trong cùng một phiếu (Miễn sao các dòng liền kề nhau và có cùng dữ liệu ở các cột đã quy định.

3/ Chênh lệch của phiếu chi giống như phiếu thu

Rất mong bạn Ba Tê và các thành viên hòan chỉnh giùm code này! Xin cảm ơn các bạn
 
Upvote 0
Hihi. Thấy Ba Tê muốn đi làm Kế toán thì mình cũng "đếch ngán", chơi luôn
Thú thật với bạn dongducnhiem mình "cóc" biết gì về kế toán nhưng coi đây là đề bài tập nên nhào vô giải đại, sai ở đâu thì bạn cho biết rồi mình tiếp tục kêu Ba Tê sửa tiếp ( hihi, nếu làm đúng nhào qua chơi tiếp bài của bác Kế Toán Già Gân)
Trong bài mình giữ lại mấy cái cột phụ của bạn để kiểm tra kết quả thôi, code không cần xài nó đâu
Thân
+-+-+-+Hic+-+-+-+
 

File đính kèm

Upvote 0
Hihi. Thấy Ba Tê muốn đi làm Kế toán thì mình cũng "đếch ngán", chơi luôn
Thú thật với bạn dongducnhiem mình "cóc" biết gì về kế toán nhưng coi đây là đề bài tập nên nhào vô giải đại, sai ở đâu thì bạn cho biết rồi mình tiếp tục kêu Ba Tê sửa tiếp ( hihi, nếu làm đúng nhào qua chơi tiếp bài của bác Kế Toán Già Gân)
Trong bài mình giữ lại mấy cái cột phụ của bạn để kiểm tra kết quả thôi, code không cần xài nó đâu
Thân
+-+-+-+Hic+-+-+-+
Hi hi, nếu các bạn muốn qua làm lĩnh vực kế toán thì các Cty sẽ tuyển các bạn làm trưởng phòng ngay vì phần hành đã có các em chân NGẮN làm rồi !?
Code của bạn Concogia chạy đúng ý mình rồi, nhưng sau khi nó chạy thì nó tạo ra "RÁC" từ dòng 819 đến 829 (ở cột C và D) (Xem hình). Vậy mong bạn xem & chỉnh sửa cho nó hoàn chỉnh.
Một lần nữa xin cảm ơn hai bạn.
 

File đính kèm

Upvote 0
Hi hi, nếu các bạn muốn qua làm lĩnh vực kế toán thì các Cty sẽ tuyển các bạn làm trưởng phòng ngay vì phần hành đã có các em chân NGẮN làm rồi !?
Code của bạn Concogia chạy đúng ý mình rồi, nhưng sau khi nó chạy thì nó tạo ra "RÁC" từ dòng 819 đến 829 (ở cột C và D) (Xem hình). Vậy mong bạn xem & chỉnh sửa cho nó hoàn chỉnh.
Một lần nữa xin cảm ơn hai bạn.
Híc, cái này mình cũng hổng hiểu, sao trong bài mình hổng có bị.
Khả năng là do cái bảng của bạn là List, khi nhảy vào ==> nó tự động thêm hàng ==> code tìm hàng cuối nên dư ra chăng ???
Thôi tạm thời bạn thử thế này nhé:
Bấm Alt + F11 ==> Module 1 ==> chép đè code này vào code cũ giúp mình nhé
Mã:
Public Sub SoThuTu()
Dim I, Vung, Mg, iThu, iChi, iNhap, iXuat, Gom, GomTren, GomDuoi, NX
Vung = Range([B9], [B9].End(xlDown)).Resize(, 10)
ReDim Mg(1 To UBound(Vung), 1 To 2):    NX = "152 153 155 1561"
For I = 2 To UBound(Vung)
    Gom = Vung(I, 8) & " " & Vung(I, 9)
    If InStr(Gom, 1111) Then
        If InStr(Gom, 1111) = 1 Then
            GomTren = Vung(I - 1, 1) & Vung(I - 1, 5) & Vung(I - 1, 6) & Vung(I - 1, 8)
            GomDuoi = Vung(I, 1) & Vung(I, 5) & Vung(I, 6) & Vung(I, 8)
            If GomTren <> GomDuoi Then
                iThu = iThu + 1
                Mg(I - 1, 1) = "T" & Format(iThu, "000")
            Else
                Mg(I - 1, 1) = "T" & Format(iThu, "000")
            End If
        Else
            GomTren = Vung(I - 1, 1) & Vung(I - 1, 5) & Vung(I - 1, 6) & Vung(I - 1, 9)
            GomDuoi = Vung(I, 1) & Vung(I, 5) & Vung(I, 6) & Vung(I, 9)
            If GomTren <> GomDuoi Then
                iChi = iChi + 1
                Mg(I - 1, 1) = "C" & Format(iChi, "000")
            Else
                Mg(I - 1, 1) = "C" & Format(iChi, "000")
            End If
      End If
   End If
            If InStr(NX, Vung(I, 8)) Then
                GomTren = Vung(I - 1, 1) & Vung(I - 1, 5) & Vung(I - 1, 6)
                GomDuoi = Vung(I, 1) & Vung(I, 5) & Vung(I, 6)
                If GomTren = GomDuoi And InStr(NX, Vung(I - 1, 8)) Then
                    Mg(I - 1, 2) = "N" & Format(iNhap, "000")
                Else
                    iNhap = iNhap + 1
                    Mg(I - 1, 2) = "N" & Format(iNhap, "000")
                End If
            ElseIf InStr(NX, Vung(I, 9)) Then
                GomTren = Vung(I - 1, 1) & Vung(I - 1, 5) & Vung(I - 1, 6)
                GomDuoi = Vung(I, 1) & Vung(I, 5) & Vung(I, 6)
                If GomTren = GomDuoi And InStr(NX, Vung(I - 1, 9)) Then
                    Mg(I - 1, 2) = "X" & Format(iXuat, "000")
                Else
                    iXuat = iXuat + 1
                    Mg(I - 1, 2) = "X" & Format(iXuat, "000")
               End If
       End If
Next I
[C10].Resize(I - 1, 2) = Mg
End Sub
Sử dụng code này dữ liệu ở cột B phải liên tục nhé bạn
Xí quên, mình nói có gì trục trặc bạn ới bạn Ba Tê lầm tiếp mà
Thân
+-+-+-+Híc+-+-+-+
 
Upvote 0
Cảm ơn Ba Tê đã giúp sức viết code
File gốc (do công thức) của tôi tạo ra có:
1/ Phiếu thu: 5 phiếu
2/ Phiếu chi: 61 phiếu
3/ Phiếu nhập: 130 phiếu
4/ Phiếu xuất: 84 phiếu

File của bạn tạo ra có:
1/ Phiếu thu: 4 phiếu
2/ Phiếu chi: 36 phiếu
3/ Phiếu nhập: 130 phiếu
4/ Phiếu xuất: 85 phiếu

Có sự lệch phiếu vì nguyên nhân như sau:
1/ Phiếu thu: Theo công thức, Khi nào các số liệu ở các dòng liền kề nhau của các cột B, F, G, Q cùng giống nhau thì thể hiện cùng một số phiếu. Số phiếu thu T002 của bạn đã gom 02 phiếu thu T002 (dòng 83) và T003 (dòng 86) ( của file gốc của tôi) thành 01 phiếu. Vì dòng 83 và dòng 86 không liền kề nhau
Thực tế là như thế này: Cty buổi sáng rút tiền ngân hàng 01 lần và buổi chiều rút tiền thêm một lần nữa, nên thủ quỹ phải làm 02 phiếu chi khác nhau.

2/ Phiếu xuất của bạn hơn tôi 01 phiếu: Phiếu xuất của tôi số X026 (dòng 146 và 147), code của bạn tách thành 02 phiếu X026 (dòng 146) và X027 (dòng 147). Vì bạn phân biệt Cell J146=152 và J147=153. Trên công thức của tôi không phân biệt điều này, Vì thực tế thủ kho có thể xuất nhiều mặt hàng của những tài khoản khác nhau (VD tài khoản 152 và 153 nói trên) trong cùng một phiếu (Miễn sao các dòng liền kề nhau và có cùng dữ liệu ở các cột đã quy định.

3/ Chênh lệch của phiếu chi giống như phiếu thu

Rất mong bạn Ba Tê và các thành viên hòan chỉnh giùm code này! Xin cảm ơn các bạn
Xin lỗi vì không phải chuyên ngành KT, thấy vậy nên "làm đại", thật sự sau này không dám đụng vào mấy vụ KT nữa.
Híc, dữ liệu loạn cả lên, cả trăm dòng làm sao hiểu hết sự cố nếu không báo trước.
 
Upvote 0
Híc, cái này mình cũng hổng hiểu, sao trong bài mình hổng có bị.
Khả năng là do cái bảng của bạn là List, khi nhảy vào ==> nó tự động thêm hàng ==> code tìm hàng cuối nên dư ra chăng ???
Xí quên, mình nói có gì trục trặc bạn ới bạn Ba Tê lầm tiếp mà
Thân
+-+-+-+Híc+-+-+-+
Tôi cũng nghĩ khả năng do cái List tạo ra, nhưng sau khi bỏ cái List đi nó vẫn thế
Đọan code mới chạy OK rồi. Tôi còn File Nhập xuất tồn cũng tạo ra phiếu Nhập xuất, tôi sẽ chỉnh đổi code để áp dụng, nếu không được thì nhờ bạn giúp tiếp !?
Chúc các bạn hưởng mùa nghỉ lễ vui vẻ!
 
Upvote 0
Xin lỗi vì không phải chuyên ngành KT, thấy vậy nên "làm đại", thật sự sau này không dám đụng vào mấy vụ KT nữa.
Híc, dữ liệu loạn cả lên, cả trăm dòng làm sao hiểu hết sự cố nếu không báo trước.
Thực tế kế toán không khó như bạn nghĩ đâu, nó là sự cân đối: Tiền không ở túi người này thì ở túi người kia chứ không mất đi. Một người học kế toán 3 tháng thì có thể làm việc được, nhưng 3 tháng đối với học lập trình thì chỉ là bước khởi đầu và họ có thành công hay không thì hãy xem có có cái đầu "Thuật toán" nữa.
File kế toán có thể lên đến vài ngàn hay vài chục ngàn dòng nhưng nó chỉ là sự lập đi lập lại, có nhiều lập trình viên đâu biết kế toán nhưng do họ nắm nguyên lý kế toán là sự cân đối nên họ vẫn làm tuốt.
Hi mong bạn đừng nản lòng để cứu giúp dân kế toán chúng tôi nha!
 
Upvote 0
Xí quên, mình nói có gì trục trặc bạn ới TÔI lầm tiếp mà
Thân
+-+-+-+Híc+-+-+-+
Chào bạn Concogia & các thành viên
Tôi đã áp dụng đọan Code trên để áp dụng vào File nhập xuất tồn có cấu trúc gần tương đồng, nhưng do tôi là dân tay mơ nên cả 1 ngày code có lúc chạy sai có lúc báo lỗi, Vậy mình nhờ bạn Concogia & các thành viên chỉnh sửa code này cho nó hoàn chỉnh.

* Giải thích File:
1/ Code tạo số phiếu nhập & xuất kho tại cột A, bắt đầu từ cell A90 (tôi có làm sẵn công thức ở cột A và các cột phụ V, W, X)
2/ Nếu số liệu ở các cột B, E, F, G của các dòng liền kề nhau mà giống nhau thì lấy cùng một số phiếu

Mong các bạn hỗ trợ và giúp đỡ. Xin cảm ơn!
 

File đính kèm

Upvote 0
Chào bạn Concogia & các thành viên
Tôi đã áp dụng đọan Code trên để áp dụng vào File nhập xuất tồn có cấu trúc gần tương đồng, nhưng do tôi là dân tay mơ nên cả 1 ngày code có lúc chạy sai có lúc báo lỗi, Vậy mình nhờ bạn Concogia & các thành viên chỉnh sửa code này cho nó hoàn chỉnh.

* Giải thích File:
1/ Code tạo số phiếu nhập & xuất kho tại cột A, bắt đầu từ cell A90 (tôi có làm sẵn công thức ở cột A và các cột phụ V, W, X)
2/ Nếu số liệu ở các cột B, E, F, G của các dòng liền kề nhau mà giống nhau thì lấy cùng một số phiếu

Mong các bạn hỗ trợ và giúp đỡ. Xin cảm ơn!
Nó đây, bạn sửa.......xém trúng rồi.
Mã:
Public Sub SoThuTu()
Dim I, Vung, Mg, iNhap, iXuat, Gom, GomTren, GomDuoi, NX
Vung = Range([B89], [B89].Offset(1).End(xlDown)).Resize(, 8)
ReDim Mg(1 To UBound(Vung), 1 To 1):    NX = "152 153 155 1561"
For I = 2 To UBound(Vung)
                If InStr(NX, Vung(I, 7)) Then
                    GomTren = Vung(I - 1, 1) & Vung(I - 1, 4) & Vung(I - 1, 5) & Vung(I - 1, 6)
                    GomDuoi = Vung(I, 1) & Vung(I, 4) & Vung(I, 5) & Vung(I, 6)
                If GomTren = GomDuoi And InStr(NX, Vung(I - 1, 7)) Then
                    Mg(I - 1, 1) = "N" & Format(iNhap, "000")
                Else
                    iNhap = iNhap + 1
                    Mg(I - 1, 1) = "N" & Format(iNhap, "000")
                End If
            ElseIf InStr(NX, Vung(I, 8)) Then
                GomTren = Vung(I - 1, 1) & Vung(I - 1, 4) & Vung(I - 1, 5) & Vung(I - 1, 6)
                GomDuoi = Vung(I, 1) & Vung(I, 4) & Vung(I, 5) & Vung(I, 6)
                If GomTren = GomDuoi And InStr(NX, Vung(I - 1, 8)) Then
                    Mg(I - 1, 1) = "X" & Format(iXuat, "000")
                Else
                    iXuat = iXuat + 1
                    Mg(I - 1, 1) = "X" & Format(iXuat, "000")
               End If
       End If
Next I
[A90].Resize(I - 1, 1) = Mg
End Sub

Sửa vài lần nữa hy vọng........hổng trật
Bạn kiểm tra giúp, mình nhìn chóng mặt quá, mà sao dữ liệu có từ hàng 90 (cái này là một phần nguyên nhân làm bạn sửa hổng được), thế ở trên không có cái quái gì hết à ???. Kế toán rắc rối & khó hiểu thật, hèn chi 3 Tê chạy vất cả dép. Hihi
Thân
+-+-+-+Híc+-+-+-+
 
Lần chỉnh sửa cuối:
Upvote 0
Thân gởi anh concogia và các bạn thành viên
Tôi đã dựa vào bài của anh concogia để tạo code Số thứ tự của các phiếu "N", "X" như sau

Mã:
Public Sub SoThuTu_NX()


    Dim I, Vung, Mg, iNhap, iXuat, Gom, GomTren, GomDuoi, NX
    Vung = Range([B8], [B20000].Offset(1).End(3)).Resize(, 8)
    ReDim Mg(1 To UBound(Vung), 1 To 1): NX = "152 153 155 1561"
    For I = 2 To UBound(Vung)
        If Vung(I, 7) <> "" And Vung(I, 8) <> "" Then    'them vao
            If InStr(NX, Vung(I, 7)) Then
                GomTren = Vung(I - 1, 1) & Vung(I - 1, 4) & Vung(I - 1, 5) & Vung(I - 1, 6)
                GomDuoi = Vung(I, 1) & Vung(I, 4) & Vung(I, 5) & Vung(I, 6)
                If GomTren = GomDuoi And InStr(NX, Vung(I - 1, 7)) Then
                    Mg(I - 1, 1) = "N" & Format(iNhap, "000")
                Else
                    iNhap = iNhap + 1
                    Mg(I - 1, 1) = "N" & Format(iNhap, "000")
                End If
            ElseIf InStr(NX, Vung(I, 8)) Then
                GomTren = Vung(I - 1, 1) & Vung(I - 1, 4) & Vung(I - 1, 5) & Vung(I - 1, 6)
                GomDuoi = Vung(I, 1) & Vung(I, 4) & Vung(I, 5) & Vung(I, 6)
                If GomTren = GomDuoi And InStr(NX, Vung(I - 1, 8)) Then
                    Mg(I - 1, 1) = "X" & Format(iXuat, "000")
                Else
                    iXuat = iXuat + 1
                    Mg(I - 1, 1) = "X" & Format(iXuat, "000")
                End If
            End If
        End If    ' them vao
    Next I
    [A9].Resize(I - 1, 1) = Mg
End Sub
Bây giờ tôi nhờ các bạn sửa giùm tôi code trên như sau:

Điều kiện đánh số phiếu thì vẫn như củ: Nếu số liệu ở các cột B, E, F, G của các dòng liền kề nhau mà giống nhau thì lấy cùng một số phiếu và cũng dựa vào các số tài khỏan này "152 153 155 1561" sẽ nằm bên cột H hay cột I để ra số phiếu "N" hay "X"

Và thêm 1 điều kiện mới như sau:

1/ Code sẽ đánh số thứ tự theo tháng, dựa vào cột tháng (Cột C) ví dụ Phiếu N001 sẽ thành N001/1, số 1 ở đây hiểu là tháng 1 , X001 -> X001/1 .....

2/ Sang tháng 2 thì bắt đầu đánh số lại từ đầu ví dụ như N001/2, X001/2 và tương tự cho các tháng khác
---------------
P/S: 1/ Tôi đã lập số liệu kết quả bằng tay ở cột A

2/ Số liệu thực của tôi sẽ có những dòng trống như trong File & trên file tôi đã ghi chú các trường hợp

3/ Vì sao tôi fải thiết lập cách đánh số mới? Giả sử hiện nay là tháng 10, tôi muốn thêm bớt các dòng nhập xuất ở tháng 1 thì các số phiếu sẽ thay đổi, nhưng trước đó tôi đã in ấn tất cả các phiếu trên, vậy sau khi sửa thì tôi sẽ in lại toàn bộ. Còn khi chuyển sang cách đánh phiếu mới thì tôi chỉ cần in lại trong 1 tháng mà thôi!

Tôi cũng đã tìm mọi cách để thử sửa code nhưng kg được, vậy nhờ anh concogia và các bạn sửa giúp code trên.
Xin chân thành cảm ơn các bạn
 

File đính kèm

Upvote 0
Híc, từ năm nảo năm nào bi giờ lôi nó dậy
Bạn thử code này, mình cóc biết gì về mấy cái nhập nhập xuất xuất nên khả năng "trật lấc" là rất cao, có gì la lên tiếp nhé.+-+-+-++-+-+-++-+-+-++-+-+-+
Thân
Mã:
Public Sub LaiPhieuNX()
    Dim Vung, I, doNX, iThang, Gom, Kt, Mg, K, kK, A, B
        Vung = Range([B8], [B50000].End(xlUp)).Resize(, 8)
        ReDim Mg(1 To UBound(Vung), 1 To 1)
        doNX = "152 153 155 1561"
        Mg(1, 1) = "So NX"
            For I = 2 To UBound(Vung)
                If Vung(I, 1) <> "" Then
                    A = Vung(I, 1) & Vung(I, 4) & Vung(I, 5) & Vung(I, 6)
                    B = Vung(I - 1, 1) & Vung(I - 1, 4) & Vung(I - 1, 5) & Vung(I - 1, 6)
                        If A = B Then
                            Mg(I, 1) = Mg(I - 1, 1)
                        Else
                            If Val(Right(Vung(I, 2), 2)) > iThang Then iThang = Val(Right(Vung(I, 2), 2)): K = 0: kK = 0
                                If InStr(doNX, Vung(I, 7)) Then
                                    K = K + 1
                                    Mg(I, 1) = "N" & Right("00" & K, 3) & "/" & iThang
                                Else
                                    kK = kK + 1
                                    Mg(I, 1) = "X" & Right("00" & kK, 3) & "/" & iThang
                                End If
                        End If
                End If
            Next I
    [A8].Resize(UBound(Vung)) = Mg
End Sub
 
Upvote 0
Híc, từ năm nảo năm nào bi giờ lôi nó dậy
Bạn thử code này, mình cóc biết gì về mấy cái nhập nhập xuất xuất nên khả năng "trật lấc" là rất cao, có gì la lên tiếp nhé.+-+-+-++-+-+-++-+-+-++-+-+-+
Thân
Cảm ơn sự giúp đỡ của bạn!
Sau khi chạy code thì nó còn chưa cho kết quả như ý muốn.

Tôi xin nói lại cách đánh số phiếu "N" hay "X" như sau
1/ Nếu các ô ở cột H mà có 1 trong các số 152;153;155;1561 thì đánh là số "N" ở dòng tương ứng

2/ Nếu các ô ở cột I mà có 1 trong các số 152;153;155;1561 thì đánh là số "X" ở dòng tương ứng

3/ Nếu các ô ở cột H và cột I mà không có 1 trong các số 152;153;155;1561 thì để trống ở dòng tương ứng

Tôi có làm ví dụ & ghi chú trên cell ở các dòng 21 và 26 ở trong File
---------------------
Ở code bài trước, tôi thấy bạn có viết câu lệnh
Mã:
If GomTren = GomDuoi [COLOR=#0000ff][B]And InStr(NX, Vung(I - 1, 7))[/B][/COLOR] Then
Còn code bài này tôi thấy bạn viết
Mã:
If A = B Then
tôi thử chỉnh sửa và thêm đọan code chữ màu xanh vào nhưng nó vẫn chưa chịu chạy đúng!!!!
Rất mong anh bỏ thêm thời gian để giúp tôi sửa code . Xin cảm ơn
 

File đính kèm

Upvote 0
Cảm ơn sự giúp đỡ của bạn!
Sau khi chạy code thì nó còn chưa cho kết quả như ý muốn.

Tôi xin nói lại cách đánh số phiếu "N" hay "X" như sau
1/ Nếu các ô ở cột H mà có 1 trong các số 152;153;155;1561 thì đánh là số "N" ở dòng tương ứng

2/ Nếu các ô ở cột I mà có 1 trong các số 152;153;155;1561 thì đánh là số "X" ở dòng tương ứng

3/ Nếu các ô ở cột H và cột I mà không có 1 trong các số 152;153;155;1561 thì để trống ở dòng tương ứng

Tôi có làm ví dụ & ghi chú trên cell ở các dòng 21 và 26 ở trong File
---------------------
Ở code bài trước, tôi thấy bạn có viết câu lệnh
Mã:
If GomTren = GomDuoi [COLOR=#0000ff][B]And InStr(NX, Vung(I - 1, 7))[/B][/COLOR] Then
Còn code bài này tôi thấy bạn viết
Mã:
If A = B Then
tôi thử chỉnh sửa và thêm đọan code chữ màu xanh vào nhưng nó vẫn chưa chịu chạy đúng!!!!
Rất mong anh bỏ thêm thời gian để giúp tôi sửa code . Xin cảm ơn
1) -
3/ Nếu các ô ở cột H và cột I mà không có 1 trong các số 152;153;155;1561 thì để trống ở dòng tương ứng
trong bài trước không có điều kiện này nên mình nghĩ một trong mấy em này 152;153;155;1561 luôn có mặt một trong 2 cột [H] & . Ai dè.......Híc
2)- Mình không hiểu phần này
Điều kiện đánh số phiếu thì vẫn như củ: Nếu số liệu ở các cột B, E, F, G của các dòng liền kề nhau mà giống nhau thì lấy cùng một số phiếu và cũng dựa vào các số tài khỏan này "152 153 155 1561" sẽ nằm bên cột H hay cột I để ra số phiếu "N" hay "X"
Sao làm thế này được nhỉ ???+-+-+-++-+-+-++-+-+-+
Nếu số liệu ở các cột B, E, F, G của các dòng liền kề nhau mà giống nhau thì lấy cùng một số phiếu
Thí dụ dòng 59 cho ra số phiếu N068/1, dòng 60 có 4 cột B, E, F, G giống dòng 59 nhưng số tài khoản ("152 153 155 1561" ) nằm ở cột sẽ cho ra phiếu X068/1 - vì số phiếu phải giống số phiếu hàng kề trên( nhưng nếu lúc này phiếu xuất đang ở stt - thí dụ X023/1 thì sao ???? hay mình hiểu sai chỗ nào nhỉ
Sửa code thì dễ thôi nhưng mình.....phải hiểu đã
Bạn hãy tạo một file có những tình huống như thế rồi ghi kết quả bạn muốn vào đó luôn nhé
Thân
 
Upvote 0
Cảm ơn sự giúp đỡ của bạn!
Sau khi chạy code thì nó còn chưa cho kết quả như ý muốn.

Tôi xin nói lại cách đánh số phiếu "N" hay "X" như sau
1/ Nếu các ô ở cột H mà có 1 trong các số 152;153;155;1561 thì đánh là số "N" ở dòng tương ứng

2/ Nếu các ô ở cột I mà có 1 trong các số 152;153;155;1561 thì đánh là số "X" ở dòng tương ứng

3/ Nếu các ô ở cột H và cột I mà không có 1 trong các số 152;153;155;1561 thì để trống ở dòng tương ứng

Tôi có làm ví dụ & ghi chú trên cell ở các dòng 21 và 26 ở trong File
---------------------
Ở code bài trước, tôi thấy bạn có viết câu lệnh
Mã:
If GomTren = GomDuoi [COLOR=#0000ff][B]And InStr(NX, Vung(I - 1, 7))[/B][/COLOR] Then
Còn code bài này tôi thấy bạn viết
Mã:
If A = B Then
tôi thử chỉnh sửa và thêm đọan code chữ màu xanh vào nhưng nó vẫn chưa chịu chạy đúng!!!!
Rất mong anh bỏ thêm thời gian để giúp tôi sửa code . Xin cảm ơn
Mần "ké" với bác Cò kiểu "truyền thống" của tui xem sao.
Miễn thấy xài "Dic to" được là "mần liền".
PHP:
Public Sub GPE3T()
Dim Dic As Object, sArr(), dArr(), I As Long, NumN As Long, NumX As Long, Tem As String, Str As String, Thang As Long
Set Dic = CreateObject("Scripting.Dictionary")
sArr = Array(152, 153, 155, 1561)
For I = 0 To UBound(sArr)
    If Not Dic.Exists(sArr(I)) Then Dic.Add sArr(I), "GiaiPhapExcel"
Next I
sArr = Range([B8], [B65536].End(xlUp)).Resize(, 8).Value
ReDim dArr(1 To UBound(sArr, 1), 1 To 1)
For I = 2 To UBound(sArr, 1)
    If sArr(I, 1) <> Empty And Month(sArr(I, 1)) <> Thang Then
        NumN = 0: NumX = 0
        Thang = Month(sArr(I, 1))
    End If
    Str = sArr(I - 1, 1) & sArr(I - 1, 4) & sArr(I - 1, 5) & sArr(I - 1, 6) & sArr(I - 1, 7) & sArr(I - 1, 8)
    Tem = sArr(I, 1) & sArr(I, 4) & sArr(I, 5) & sArr(I, 6) & sArr(I, 7) & sArr(I, 8)
    If Tem <> Str Then
        If Dic.Exists(sArr(I, 7)) Then NumN = NumN + 1
        If Dic.Exists(sArr(I, 8)) Then NumX = NumX + 1
    End If
    If Dic.Exists(sArr(I, 7)) Then dArr(I - 1, 1) = "N" & Format(NumN, "000") & "/" & Thang
    If Dic.Exists(sArr(I, 8)) Then dArr(I - 1, 1) = "X" & Format(NumX, "000") & "/" & Thang
Next I
[A9].Resize(I - 2) = dArr
Set Dic = Nothing
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Bây giờ tôi sẽ mô tả chi tiết và cụ thể hơn:

1/ Trên File tôi đã sửa cột [H] là "Nhập" và cột là "Xuất" và để đơn giản sẽ lấy tháng 01 và 02 làm ví dụ
Các trường hợp sẽ xảy ra như sau

a/ Nếu cột [H] VÀ cột không có 1 trong những con số 152,153,155,1561 thì không tạo phiếu "N" và "X" (ví dụ dòng 12 hoặc dòng 35)

b/ Tạo phiếu "N": Nếu cột [H] có 1 trong những con số 152,153,155,1561 và nếu đồng thời các dòng liền kề nhau của các cột B,E,F,G mà cùng giống nhau thì tạo cùng 1 số phiếu "N" như nhau (ví dụ dòng 14 &15)

c/ Tạo phiếu "X": Nếu cột có 1 trong những con số 152,153,155,1561 và nếu đồng thời các dòng liền kề nhau của các cột B,E,F,G mà cùng giống nhau thì tạo cùng 1 số phiếu "X" như nhau (ví dụ dòng 18,19 & 20)

d/ Mặc dù các dòng liền kề nhau của các cột B,E,F,G cùng giống nhau nhưng các con số 152,153,155,1561 không đồng thời nằm cùng một bên ở cột [H] hay cột thì sẽ đánh số phiếu "N" hay "X" tùy theo các con số 152... nằm ở cột [H] hay (Ví dụ dòng 23,24,25 thì dòng 23 và 24 sẽ cùng 1 số phiếu là N003/1; dòng 25 là X002/1) hoặc ( dòng 28,29 cùng số phiếu X003/1; dòng 30, 31 cùng số phiếu N004/1)

e/ Chỉ số dưới của số phiếu : Ví dụ N110/9, thì số 9 là chỉ số tháng

f/ Sang tháng khác thì đánh số phiếu lại từ đầu mà chỉ khác chỉ số dưới

Tôi diễn đạt như vậy chắc còn lũng cũng, nếu chỗ nào anh chưa rỏ thì vui lòng hồi âm
Cảm ơn bạn rất nhiều!
 

File đính kèm

Upvote 0
Mần "ké" với bác Cò kiểu "truyền thống" của tui xem sao.
Miễn thấy xài "Dic to" được là "mần liền".
PHP:
Public Sub GPE3T()
Dim Dic As Object, sArr(), dArr(), I As Long, NumN As Long, NumX As Long, Tem As String, Str As String, Thang As Long
Set Dic = CreateObject("Scripting.Dictionary")
sArr = Array(152, 153, 155, 1561)
For I = 0 To UBound(sArr)
    If Not Dic.Exists(sArr(I)) Then Dic.Add sArr(I), "GiaiPhapExcel"
Next I
sArr = Range([B8], [B65536].End(xlUp)).Resize(, 8).Value
ReDim dArr(1 To UBound(sArr, 1), 1 To 1)
For I = 2 To UBound(sArr, 1)
    If sArr(I, 1) <> Empty And Month(sArr(I, 1)) <> Thang Then
        NumN = 0: NumX = 0
        Thang = Month(sArr(I, 1))
    End If
    Str = sArr(I - 1, 1) & sArr(I - 1, 4) & sArr(I - 1, 5) & sArr(I - 1, 6) & sArr(I - 1, 7) & sArr(I - 1, 8)
    Tem = sArr(I, 1) & sArr(I, 4) & sArr(I, 5) & sArr(I, 6) & sArr(I, 7) & sArr(I, 8)
    If Tem <> Str Then
        If Dic.Exists(sArr(I, 7)) Then NumN = NumN + 1
        If Dic.Exists(sArr(I, 8)) Then NumX = NumX + 1
    End If
    If Dic.Exists(sArr(I, 7)) Then dArr(I - 1, 1) = "N" & Format(NumN, "000") & "/" & Thang
    If Dic.Exists(sArr(I, 8)) Then dArr(I - 1, 1) = "X" & Format(NumX, "000") & "/" & Thang
Next I
[A9].Resize(I - 2) = dArr
Set Dic = Nothing
End Sub
Code vẫn chưa cho kết qủa như ý anh ạ! anh vui lòng đọc bài 18 tôi vừa mô tả xong
Cảm ơn anh!
 
Upvote 0
Code vẫn chưa cho kết qủa như ý anh ạ! anh vui lòng đọc bài 18 tôi vừa mô tả xong
Cảm ơn anh!
Đúng là ví dụ cũng chưa hết các trường hợp.
Thử lại cái này lu bu hơn một chút.
Tôi cho kết quả ở cột J cho bạn so sánh.
-------------
PHP:
Public Sub GPE3T()
Dim Dic As Object, sArr(), dArr(), I As Long, NumN As Long, NumX As Long, Tem As String, Str As String, Thang As Long
Set Dic = CreateObject("Scripting.Dictionary")
sArr = Array(152, 153, 155, 1561)
For I = 0 To UBound(sArr)
    If Not Dic.Exists(sArr(I)) Then Dic.Add sArr(I), "GiaiPhapExcel"
Next I
sArr = Range([B8], [B65536].End(xlUp)).Resize(, 8).Value
ReDim dArr(1 To UBound(sArr, 1), 1 To 1)
For I = 2 To UBound(sArr, 1)
    If sArr(I, 1) <> Empty And Month(sArr(I, 1)) <> Thang Then
        NumN = 0: NumX = 0
        Thang = Month(sArr(I, 1))
    End If
        Str = sArr(I - 1, 1) & sArr(I - 1, 4) & sArr(I - 1, 5) & sArr(I - 1, 6)
        Tem = sArr(I, 1) & sArr(I, 4) & sArr(I, 5) & sArr(I, 6)
    If Tem <> Str Then
        If Dic.Exists(sArr(I, 7)) Then NumN = NumN + 1
        If Dic.Exists(sArr(I, 8)) Then NumX = NumX + 1
    Else
        If Dic.Exists(sArr(I, 7)) And Not Dic.Exists(sArr(I - 1, 7)) Then NumN = NumN + 1
        If Dic.Exists(sArr(I, 8)) And Not Dic.Exists(sArr(I - 1, 8)) Then NumX = NumX + 1
    End If
        If Dic.Exists(sArr(I, 7)) Then dArr(I - 1, 1) = "N" & Format(NumN, "000") & "/" & Thang
        If Dic.Exists(sArr(I, 8)) Then dArr(I - 1, 1) = "X" & Format(NumX, "000") & "/" & Thang
Next I
[J9].Resize(I - 2) = dArr
Set Dic = Nothing
End Sub
------------
Thay [J9] bằng [A9] trong dòng này nếu xài được
PHP:
[J9].Resize(I - 2) = dArr
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom