Tìm số không liên tục trong dãy số

Liên hệ QC
Vẫn chưa ngủ ngon được bạn ui !

:=\+ 2-Cho mình hỏi thêm cái này, mình đem so sánh cách làm của 2 bạn ChanhTQ va ndu96081631 thì kết qảu của 2 bạn là khác nhau mặc dù cùng 1 dữ liệu. (File sosanh).
Trong file có 2 sheet: Sheet 1 là làm theo của bạn ChanhTQ còn Sheet 2 là làm theo bạn ndu96081631.

Tìm theo cách của bạn ChanhTQ thìkhông tìm ra được số 045301
Còn theo cách của bạn ndu96081631 thì tìm ra số 045301.
Kiểm tra lại trên số liệu nhập trong phần mềm thì số hóa đơn này mình đã bị huỷ.

File so sánh mình có attached bên dưới .
 
Không tìm ra là đúng đó!

Vì mã số của 2 loại hóa đơn khác nhau mà:
|C|D
583| CT/2008N:00906 |045300
584| CT/2008N:00907 |045302
|@$@!^%|:-=
 
Lần chỉnh sửa cuối:
Vì mã số của 2 loại hóa đơn khác nhau mà:
|C|D
583| CT/2008N:00906 |045300
584| CT/2008N:00907 |045302
|@$@!^%|:-=
1-Bản dữ liệu này thì cột ký hiệu là cột thông tin thôi chứ không có ý nghĩa gì, nếu khác nhau hư bạn nói thì số đầu tiên của CT/2008N:00907 thì phải là 045301 chứ.

2-Ví dụ mình để trống luôn cột ký hiệu thì tìm ra quá trùi số luôn. Bạn thử xáo luôn cột KÝ HIỆU luôn xem sao.

chọn 1 trong hai cách:
(1) Muốn nó chép hóa đơn chưa có từ [L17] thì sửa lại lệnh có Clear cho đúng ??????
(2) muốn nó chép từ [L24], thì từ đầu chương trình (nói cho to tác) ta cho [l23]=0 ?????

potay rùi bạn ui, hỏng biết sữa sao hết, mấy ngày nay ăn không ngon ngủ vì cái này đây.)*&^). Giúp cho trót luôn đi bạn.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Sửa theo phương án 1 & cột 'C' không ảnh hưởng trong việc tìm HĐ thiếu

Bạn copy macro này, chép đè lên cái trước & chạy thử!


Mã:
Option Explicit

Sub TimThieu()
 Dim lRw As Long, Jj As Long, Ww As Long
 Dim bColor As Byte
 
 lRw = [d65500].End(xlUp).Row:                      bColor = 33
 Range("D3:D" & lRw).ClearFormats:                  Range("L17:L" & lRw).Clear
 Range("L17:L" & lRw).NumberFormat = "000###"
 For Jj = 4 To lRw
    With Cells(Jj, "D")
        If CLng(.Value) > 1 + CLng(.Offset(-1))  Then [COLOR=Blue][B] '!Loại cột 'C' ra khỏi vòng chiến!'[/B][/COLOR]
            For Ww = 1 To (.Value - .Offset(-1) - 1)
                [L65500].End(xlUp).Offset(1).Value = .Offset(-1) + Ww
                bColor = bColor + Ww
                If bColor > 41 Then bColor = 34
                [L65500].End(xlUp).Interior.ColorIndex = bColor
            Next Ww
            .Interior.ColorIndex = bColor
            bColor = 33
        End If
    End With
 Next Jj
End Sub
 
1-Vẫn chạy không được báo lỗi ngay dòng IF. Bạn xem lại hộ cái file.

Cột C nếu mình sữa lại thành 00907 thì tìm được 045301 còn để nguyên thì không, không biết nguyên do từ đâu ?
 

File đính kèm

Lần chỉnh sửa cuối:
Tôi có đoạn mã này chạy ra kết quả y xì như của ChanhTQ, chẳng biết có đúng không, bạn thử test xem thế nào nhé
PHP:
Sub TimSoTrong()
    Dim I As Long, K As Long, SoThieu As Long
    Dim Quyen As String
    Dim So As Long
    I = 3 'Dòng đầu tiên chứa mã số hóa đơn
    Quyen = Cells(I, 3).Value
    So = Cells(I, 4).Value
    SoThieu = 3 'Dòng đầu tiên bắt đầu ghi số thiếu
    While Cells(I, 3).Value = Quyen
        If Cells(I, 4).Value - So > 1 Then
            For K = So + 1 To Cells(I, 4).Value - 1
                Cells(SoThieu, 14).Value = Format(K, "00000#")  'Ghi số thiếu vào cột 14
                SoThieu = SoThieu + 1
            Next
        End If
        So = Cells(I, 4).Value
        I = I + 1
        If Cells(I, 3).Value <> Quyen And Cells(I, 3).Value <> "" Then
            If Split(Cells(I, 3).Value, ":")(1) - Split(Quyen, ":")(1) > 1 Then
                So = Cells(I, 4).Value
            Else
                So = Cells(I - 1, 4).Value
            End If
            Quyen = Cells(I, 3).Value
        End If
    Wend
End Sub
 
Lần chỉnh sửa cuối:
Tôi có đoạn mã này chạy ra kết quả y xì như của ChanhTQ, chẳng biết có đúng không, bạn thử test xem thế nào nhé
PHP:
        So = Cells(I, 4).Value

Bạn test lại giúp mình xem sao, minh test thử thì nó báo lỗi ở dòng này, không biết sao đây ? Với lại không thấy nó in kết quả ra ?
 

File đính kèm

Lần chỉnh sửa cuối:
Trời, ai mà biết được chứ, cái file lúc đầu down về thì cột 4 chứa số hóa đơn, cái file này lại là cột 9
Bạn sửa lại như sau nhé
PHP:
Sub TimSoTrong()
    Dim I As Long, K As Long, SoThieu As Long
    Dim Quyen As String
    Dim So As Long
    I = 3 'Dòng đầu tiên chứa mã số hóa đơn
    Quyen = Cells(I, 3).Value
    So = Cells(I, 9).Value'Ô chứa giá trị số hóa đơn
    SoThieu = 3 'Do`ng dâ`u tiên ba´t dâ`u ghi sô´ thiê´u
    While Cells(I, 3).Value = Quyen
        If Cells(I, 9).Value - So > 1 Then
            For K = So + 1 To Cells(I, 9).Value - 1
                Cells(SoThieu, 14).Value = Format(K, "00000#") 'Ghi sô´ thiê´u va`o cô?t 14
                SoThieu = SoThieu + 1
            Next
        End If
        So = Cells(I, 9).Value
        I = I + 1
        If Cells(I, 3).Value <> Quyen And Cells(I, 3).Value <> "" Then
            If Split(Cells(I, 3).Value, ":")(1) - Split(Quyen, ":")(1) > 1 Then
                So = Cells(I, 9).Value
            Else
                So = Cells(I - 1, 9).Value
            End If
            Quyen = Cells(I, 3).Value
        End If
    Wend
End Sub
Bạn tìm hiều kỹ hơn về đoạn mã này, nếu dữ liệu của bạn định dạng khác thì phải tùy biến đoạn mã theo cho phù hợp vì có thể các file dữ liệu của bạn sẽ có định dạng khác nhau.
Mà này, buôn lậu hóa đơn hay sao mà nhiều thế, có bị bắt thì đừng lôi tôi ra nhé.
 
Lần chỉnh sửa cuối:
vô lý nhi, tôi vưa test ok mà, bạn pót lai file do xem nao.
Sorry, dang dung mobile nen ngai viet dau.

bạn xem file này thủ nhé. Mình kểim tra là 29 số, test thì có 28 số thui

Vẫn giống như trước, nếu sữa lại CT/2008N: 00907 ngay chỗ 045300 thì mới tìm đực số 0045301
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
|C|D
189| UV/2007N:00015 |000750
190| LV/2008N:00376 |018751
|@$@!^%|18001
Như vậy tại đây phải liệt kê 18001 hóa đơn thiếu ư?
 
Tôi test lại rồi. OK, chính xác 29 số. Chẳng hiểu các bạn làm thế nào mà lại bị như thế.
Không cần thêm khoảng trống vào như thế này CT/2008N: 00907. Vẫn y nguyên như cũ, tôi thêm thủ tục Trim và Val để loại bỏ một số tình huống xấu.
Thử test lại theo File đính kèm nhé.
Ý kiến của ChanhTQ rất hay, cần bổ sung thêm trường hợp số đầu tiên của 1 quyển được bắt đầu là bao nhiêu và số kết thúc của 1 quyển là bao nhiêu để liệt kê ra cho chính xác.
 

File đính kèm

1-Tối về ngủ không được vì cái vụ số 045301, Sáng nay lên mở file của ban hoa35ktxd thì quả là có tìm được số này, nhưng có điều nếu mình xáo đi số đầu tiên la 000561 thì số thiếu hiện ra nhiều hơn 29 số. (bạn thử xoá 1 số đầu tiên của dãy số xem sao).

2- Trong trường hợp một cuốn hóa đơn có 50 số, nếu 50 số này nằm đầu tiền của dãy số mà trong 50 số này lại mất hết 10 số đầu tiên thì những số mất này không thể tìm được.


Các bạn thử suy nghỉ trường hợp này xem sao ? Thanks
 
Lần chỉnh sửa cuối:
2- Trong trường hợp một cuốn hóa đơn có 50 số, nếu 50 số này nằm đầu tiền của dãy số mà trong 50 số này lại mất hết 10 số đầu tiên thì những số mất này không thể tìm được.
Các bạn thử suy nghỉ trường hợp này xem sao ? Thanks
Mình nghỉ rằng phải có chí ít 1 cột, đa số dữ liệu trong cột này để trống, nhưng số đầu & số cuối của cuốn hóa đơn phải ghi số bắt đầu & số cuối của cuốn (Như vậy 50 ô trong cột sẽ có 2 ô chứa dữ liệu), cho rằng chúng là dòng Da & Dz
vậy ô bên cột 'D' cùng dòng sẽ ghi:
* Số hòa đơn đầu tiên của cuốn, nếu nó thỏa;
* Để trống, nếu nó thiếu
& như vậy các macro trên sẽ phải xử lý tiếp vụ này (khi gặp cột 'D' có ô trống.)


E rằng các cách đưa ra không biết bạn có thực hiện được không thôi - Có khi đó mới là điều quan trọng.


1-Tối về ngủ không được vì cái vụ số 045301, Sáng nay lên mở file của ban . . . .[/COLOR][/I][/B]

1/4 tứ khoái không ổn, chắc cũng sẽ ảnh hưởng đến các thứ khác. . . .
Nhưng bạn thấy không, từ khi có Topic này đến giờ, bạn đã được rất nhiều nỗi nhọc nhằn & kèm theo chúng là biết bao điều bổ ích đó nhỉ, phải thế không?

Nói vui vậy thôi; Nhưng chớ đem nhiều những tứ khoái lên diễn đàn trình bày tại những topic nghiêm túc như thế này, nào là
* tớ đói rồi, đi ăn thội
* Ngủ đi thội
* Nhậu ngất ngư . . .
* . . . .
(Đó là suy nghỉ của mình, bạn đừng trách nhiều, tội nghiệp nhe!)

Thân ái!
 
Mình nghỉ rằng phải có chí ít 1 cột, đa số dữ liệu trong cột này để trống, nhưng số đầu & số cuối của cuốn hóa đơn phải ghi số bắt đầu & số cuối của cuốn (Như vậy 50 ô trong cột sẽ có 2 ô chứa dữ liệu), cho rằng chúng là dòng Da & Dz
vậy ô bên cột 'D' cùng dòng sẽ ghi:
* Số hòa đơn đầu tiên của cuốn, nếu nó thỏa;
* Để trống, nếu nó thiếu
& như vậy các macro trên sẽ phải xử lý tiếp vụ này (khi gặp cột 'D' có ô trống.)


E rằng các cách đưa ra không biết bạn có thực hiện được không thôi - Có khi đó mới là điều quan trọng.




1/4 tứ khoái không ổn, chắc cũng sẽ ảnh hưởng đến các thứ khác. . . .
Nhưng bạn thấy không, từ khi có Topic này đến giờ, bạn đã được rất nhiều nỗi nhọc nhằn & kèm theo chúng là biết bao điều bổ ích đó nhỉ, phải thế không?

Nói vui vậy thôi; Nhưng chớ đem nhiều những tứ khoái lên diễn đàn trình bày tại những topic nghiêm túc như thế này, nào là
* tớ đói rồi, đi ăn thội
* Ngủ đi thội
* Nhậu ngất ngư . . .
* . . . .
(Đó là suy nghỉ của mình, bạn đừng trách nhiều, tội nghiệp nhe!)


1-Theo mình thì thông thường hóa đơn của bộ tài chí phát hành thì một cuốn có số bắt đầu thường là 01, 51 và kết thúc là số 00, 50, nên chỉ cần kiểm tra nếu không bắt đầu bằng những số này sẽ biết được những số thiếu là bao nhiêu.

2-Còn cái này " E rằng các cách đưa ra không biết bạn có thực hiện được không thôi - Có khi đó mới là điều quan trọng." potay.com rùi, mong bạn giúp mình.

3-Tú khoái thì khôgn giám đâu, mình có sao thì nói vậy thui. Mấy tuần này ăn không ngo ngủ khôgn yên là vì cái vụ này đây.
 
1-Theo mình thì thông thường hóa đơn của bộ tài chí phát hành thì một cuốn có số bắt đầu thường là 01, 51 và kết thúc là số 00, 50, nên chỉ cần kiểm tra nếu không bắt đầu bằng những số này sẽ biết được những số thiếu là bao nhiêu.

Đó là thông thường;
Còn có loại hóa đơn tự in nữa mà!

Hồi xưa, mình thấy có cơ quan tự in, cho đánh số 1.000 hóa đơn thành 1 cuốn nữa là.
Tất nhiên hóa đơn này phải đi đăng ký mới sử dụng được; Cắt cớ ông thuế Tỉnh lại chỉ cho đăng ký 1 lần 5.000 hóa đơn thôi, mệt. . .

Bạn nên hiểu rằng, có khi biết viết macro, nhưng chưa thấy cái hóa đơn Bộ Tài chánh ra làm sao đâu; Những thông tin mà bạn cho là bình thường như vậy, với người khác là 1 tin giật gân nữa là đằng khác. Mong bạn lưu tâm chổ này.
 
Đó là thông thường;
Còn có loại hóa đơn tự in nữa mà!

Hồi xưa, mình thấy có cơ quan tự in, cho đánh số 1.000 hóa đơn thành 1 cuốn nữa là.
Tất nhiên hóa đơn này phải đi đăng ký mới sử dụng được; Cắt cớ ông thuế Tỉnh lại chỉ cho đăng ký 1 lần 5.000 hóa đơn thôi, mệt. . .

Bạn nên hiểu rằng, có khi biết viết macro, nhưng chưa thấy cái hóa đơn Bộ Tài chánh ra làm sao đâu; Những thông tin mà bạn cho là bình thường như vậy, với người khác là 1 tin giật gân nữa là đằng khác. Mong bạn lưu tâm chổ này.

Khi mình đi mua hóa đơn bộ tài chính thì một lần 50 cuốn nhân với 50 số = 2500 số và số liên tục từ 002001 đến 002500 hoặc 002051 đến 00nên nhiều hay ít không quan trọng mà chủ yếu là quy luật đánh số hóa đơn như thế nào để tìm ra cách giải quyết bài toán cho phù hợp.

Còn hóa đơn tự in thì thông thường người ta cũng đăng ký lưu hành ở số chẳng cho dễ quản lý, chẳng ai dại gì mà đăng ký số lẻ để làm cực mình ra.

Trên đay là 1 số suy nghỉ của mình, cò gì không đúng mong bạn chỉ giáo thêm. Thanks
 
Lần chỉnh sửa cuối:
1-Tối về ngủ không được vì cái vụ số 045301, Sáng nay lên mở file của ban hoa35ktxd thì quả là có tìm được số này, nhưng có điều nếu mình xáo đi số đầu tiên la 000561 thì số thiếu hiện ra nhiều hơn 29 số. (bạn thử xoá 1 số đầu tiên của dãy số xem sao).

2- Trong trường hợp một cuốn hóa đơn có 50 số, nếu 50 số này nằm đầu tiền của dãy số mà trong 50 số này lại mất hết 10 số đầu tiên thì những số mất này không thể tìm được.
Các bạn thử suy nghỉ trường hợp này xem sao ? Thanks
Có lẽ bạn chưa hiểu về VBA và đối tượng của Excel nên bạn mới xóa số đó đi để kiểm tra đoạn mã của tôi.
Khi bạn xóa giá trị đó đi thì Cells.Value sẽ nhận giá trị 0 vì thế nó sẽ thêm vào 560 số trống.
Thực ra từ đầu đến giờ chúng ta bị cái tiêu đề do bạn đặt làm lệch hướng xử lý, chúng ta cú mải đi tìm số không liên tục nên mới vất vả như thế.
Qua các bài thảo luận tôi hiểu như thế này.
Bạn có nhiều quyển hóa đơn (buôn mà) mỗi quyển được in ấn phát hành theo 1 kiểu, mỗi quyển lại có số lượng hóa đơn khác nhau, không có chuẩn thống nhất (thế nên các cơ quan chức năng mới khó kiểm soát)
Bây giờ cần tìm ra những số hóa đơn chưa bán được trong cái mớ hỗn loạn kia để tính toán lãi lỗ ăn chia (chả lẽ lại đi giở các quyển ra để tìm à)
Tôi sẽ viết cho bạn 1 Form tìm số hóa đơn chưa được phát hành, với điều kiện bạn không được nhập số trống như bạn vừa thử xóa ở trên, cho phép các quyển hóa đơn có mã số hóa đơn trùng nhau, chỉ cần bạn cung cấp số đầu và số cuối là được.
Chờ 1 tiếng sau nhé.
 
Dự tính 1 tiếng nhưng mất gần 2 tiếng mới xong. Nói chung tạm ổn.
Lưu ý, có 2 cách tìm, tìm thủ công và tìm tự động.
Với cách tìm thủ công bạn bấm từ từ khi nào thấy nó thực hiện xong 1 quyển mới được bấm tiếp, đừng có bấm lia lịa sẽ bị lỗi đấy. Khi tìm thủ công bạn phải theo dõi số hóa đơn đầu và số hóa đơn cuối.
Với cách tìm tự động nó sẽ không ra 45301 vì số đầu và số cuối được nạp tự động từ biểu số liệu của bạn.
Tôi định bổ sung thêm chức năng tìm theo quy luật khá thú vị nhưng tạm thời để lại, phải xác minh chính xác động cơ của bạn, kẻo sau này lại bị kết tội tiếp tay con buôn.
Bạn xem file đính kèm nhé.
 

File đính kèm

Với cách tìm tự động nó sẽ không ra 45301 vì số đầu và số cuối được nạp tự động từ biểu số liệu của bạn.
Tôi định bổ sung thêm chức năng tìm theo quy luật khá thú vị nhưng tạm thời để lại, phải xác minh chính xác động cơ của bạn, kẻo sau này lại bị kết tội tiếp tay con buôn.

Cám ơn bạn cái form này, nó trên cả mong đợi của mình. (vì tính hỏi cách làm trên dòng bất kỳ, cột bất kỳ)

1-Về cách tìm thủ công, ngay chổ cuốn CT/2008N:00907, nếu mình không biết trước chổ này thiếu cái số 045301 thì mình dễ bị nhầm mõi khi tìm, vì thông thường cứ để nguyên dữ liệu mà bấm nút cho nó chạy, hay bị quên chổ này (làm việc máy móc mà). (bấm nhanh quá nó đứng luôn, bạn giúp luôn cái vụ).

2-Còn bấm tự động thì không có 045301 ? chắc mình tiu luôn quá.

3-Còn việc "có buôn bán không" thì nói thật, minh không giám làm đâu, mục đích của mình là chỉ cẩn tìm ra được chính xác bao nhiêu số hóa đơn đã bị huỷ, bao nhiêu số đã phát hành. Thế là đủ rùi. Vì mình đang làm cái báo cáo tình hình sủ hóa đơn của năm 2008 nên làm bằng tay thì hơi phê, mặc dù mình cũng tìm ra được.

4-Còn thêm chức năng mói thì bạn cứ nói luôn đi, mình chỉ mong cho nó chính xác là sướng lắm rùi.

Thanks.
 
Lần chỉnh sửa cuối:
OK, tôi có thể bổ sung chức năng tìm theo quy luật, và tất nhiên, các quyển hóa đơn của bạn cũng phải được đánh số theo 1 quy luật thống nhất.
Bạn hãy cho tôi biết những quy luật của nó là gì.
Theo biểu của bạn thì mỗi quyển chỉ có 50 tờ được bắt đầu bằng 01, kết thúc 50 hoặc bắt đầu bằng 51, kết thúc 00. Đây là 1 quy luật, tôi có thể tạo chức năng tự động phát hiện và fix luôn đối với trường hợp này.
 
Web KT

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

Back
Top Bottom