Xác nhận mã đơn hàng theo thống kê (1 người xem)

  • Thread starter Thread starter QQV586
  • Ngày gửi Ngày gửi
Liên hệ QC

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

QQV586

Thành viên chính thức
Tham gia
28/2/13
Bài viết
75
Được thích
1
bài toán bầy giờ của em bây giờ thống kê lại đơn hàng dã nhận. Em nhờ các bác viết cho code để xác nhận những gì đã nhận. Yêu cầu bài toán
B1: Xác định có mặt của 1 số hoặc cả 2 số tự nhiên(thuộc cột A) so với số thuộc hàng 3(bắt đầu từ B3 qua phải)

B2: Đánh dấu sự xuất hiện của 1 hoặc 2 số thuộc cột A so với hàng 3(bắt đầu từ B3 qua phải) như ví dụ mẫu.
các số em đã hóa đơn hàng rồi nhờ các bác coi qua file rồi cho e cái code

Cảm ơn a/e forum GPE quan tâm ...
 

File đính kèm

Lần chỉnh sửa cuối:
bài toán bầy giờ của em bây giờ thống kê lại đơn hàng dã nhận. Em nhờ các bác viết cho code để xác nhận những gì đã nhận. Yêu cầu bài toán
B1: Xác định có mặt của 1 số hoặc cả 2 số tự nhiên(thuộc cột A) so với số thuộc hàng 3

B2: Đánh dấu sự xuất hiện của 1 hoặc 2 số thuộc cột A so với hàng 3 như ví dụ mẫu.
các số em đã hóa đơn hàng rồi nhờ các bác coi qua file rồi cho e cái code

Cảm ơn a/e forum GPE quan tâm ...

Bạn hãy làm bằng tay trước tôi xem thử
 
Upvote 0

File đính kèm

Upvote 0
Bác ndu96081631 viết dùm em code cho trường hợp này với. xác nhận 1 hoặc 2 số tự nhiên thuộc cột A so với ô D3 tương tự cột B so với ô E3, cột C so với F3. nếu xuất hiện tích 1 vô ô tương ứng, nếu không để trống như ví dụ mẫu bác ah! em gửi file đính kèm bác và ae forum coi qua cho em kết quả.
Cảm ơn GPE!
 

File đính kèm

Upvote 0
Bác ndu96081631 viết dùm em code cho trường hợp này với. xác nhận 1 hoặc 2 số tự nhiên thuộc cột A so với ô D3 tương tự cột B so với ô E3, cột C so với F3. nếu xuất hiện tích 1 vô ô tương ứng, nếu không để trống như ví dụ mẫu bác ah! em gửi file đính kèm bác và ae forum coi qua cho em kết quả.
Cảm ơn GPE!
Một cách viết (giải theo dữ liệu trong bài)
Mã:
Public Sub HongBiet()
    Dim Vung, VungDo, I, J, Kq
    Vung = Range([A4], [A10000].End(xlUp)).Resize(, 3)
    Set VungDo = [D3:F3]
    ReDim Kq(1 To UBound(Vung), 1 To 3)
        For I = 1 To UBound(Vung)
            For J = 1 To 3
                If Len(Vung(I, J)) = 2 Then
                    If Vung(I, J) = VungDo(J) Or StrReverse(Vung(I, J)) = VungDo(J) Then
                        Kq(I, J) = 1
                    ElseIf InStr(VungDo(J), Left(Vung(I, J), 1)) Or InStr(VungDo(J), Right(Vung(I, J), 1)) Then
                        Kq(I, J) = 1
                    End If
                ElseIf Len(Vung(I, J)) = 1 Then
                    If InStr(VungDo(J), Vung(I, J)) Then Kq(I, J) = 1
                End If
            Next J
        Next I
    [H4:J10000].ClearContents
    [H4].Resize(UBound(Vung), 3) = Kq
End Sub
Thân
Chết "dzồi", bi giờ đọc kỹ lại mới thấy mình "dzô dziên", tác giả "réo" đúng tên Thầy Ndu mà. Híc
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Bác ndu96081631 viết dùm em code cho trường hợp này với. xác nhận 1 hoặc 2 số tự nhiên thuộc cột A so với ô D3 tương tự cột B so với ô E3, cột C so với F3. nếu xuất hiện tích 1 vô ô tương ứng, nếu không để trống như ví dụ mẫu bác ah! em gửi file đính kèm bác và ae forum coi qua cho em kết quả.
Cảm ơn GPE!

Bạn mời ndu nhưng cỗ ngon thì cứ lao vào. Đành vô duyên vậy
-------------
Cột A, B, C không nhất thiết phải có 1 hoặc 2 chữ số. Số chữ số có thể tùy ý

Mã:
Public Sub DoSomething()
    Dim data, threeCells As Range, r As Long, c As Long, n As Long
    data = Range([A4], [A65535].End(xlUp)).Resize(, 3)
    Set threeCells = Range("D3:F3")
    For r = 1 To UBound(data)
        For c = 1 To 3
            For n = 1 To Len(data(r, c))
                If InStr(threeCells(c), Mid(data(r, c), n, 1)) Then
                    data(r, c) = 1
                    Exit For
                End If
                If n = Len(data(r, c)) Then data(r, c) = ""
            Next n
        Next c
    Next r
    [D4:F65535].ClearContents
    [D4].Resize(UBound(data), 3) = data
End Sub
 
Upvote 0
Thầy nào cũng là thầy cả bác concogia và bác siwtom ah! Em biết ít nên kêu vậy, các bác đều là thành viên tận tâm với diễn đàn đều nhận những lời cảm ơn chân thành từ em và mọi người.
Cảm ơn các bác và 4 GPE!
 
Upvote 0
Các bác cho em hỏi xác định trường hợp thuận của 1 số thì code ntn. em có gửi file đính kèm
Cảm ơn GPE!
 

File đính kèm

Upvote 0
Các bác cho em hỏi xác định trường hợp thuận của 1 số thì code ntn. em có gửi file đính kèm
Cảm ơn GPE!
Bạn thử Code này xem
Mã:
Sub Check()
Dim Arr
Dim Col As Long, Rw As Long
Dim Str As String
Arr = Range([A4], [A65535].End(xlUp)).Resize(, 3)
For Col = 1 To 3
    Str = "#" & Cells(Col, 1) & "#" & Cells(Col, 2) & "#" & Cells(Col, 3) & "#"
    For Rw = 1 To UBound(Arr, 1)
           If InStr(1, Str, "#" & Arr(Rw, Col) & "#") Then
                Cells(Rw + 3, Col + 3) = 1
            End If
    Next
Next
End Sub
 
Upvote 0
Bạn thử Code này xem
Mã:
Sub Check()
Dim Arr
Dim Col As Long, Rw As Long
Dim Str As String
Arr = Range([A4], [A65535].End(xlUp)).Resize(, 3)
For Col = 1 To 3
    Str = "#" & Cells(Col, 1) & "#" & Cells(Col, 2) & "#" & Cells(Col, 3) & "#"
    For Rw = 1 To UBound(Arr, 1)
           If InStr(1, Str, "#" & Arr(Rw, Col) & "#") Then
                Cells(Rw + 3, Col + 3) = 1
            End If
    Next
Next
End Sub
bac cho em hoi file nay sao?
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
em quên mất tiếng việt. bài toán vẫn như trên. nhưng khác cái là số lượng lớn hơn chút. bác xem xét giúp em.
Cảm ơn bác và mọi người GPE!
 
Upvote 0
em quên mất tiếng việt. bài toán vẫn như trên. nhưng khác cái là số lượng lớn hơn chút. bác xem xét giúp em.
Cảm ơn bác và mọi người GPE!

Bài trước bạn có 3 dòng để đối chiếu (1, 2, 3) tương ứng với 3 cột dữ liệu (A, B, C)
Bây giờ bạn có 35 dòng để đối chiếu và tận 36 cột dữ liệu. Thế là sao?
 
Upvote 0
em quên mất tiếng việt. bài toán vẫn như trên. nhưng khác cái là số lượng lớn hơn chút. bác xem xét giúp em.
Cảm ơn bác và mọi người GPE!
Dữ liệu so sánh có 35 hàng, dữ liệu để check 36 cột => 1 cột sẽ so sánh như thế nào? Góp ý với bạn 1 chút: bạn nên để 2 vùng; vùng điều kiện và vùng so sánh ở 2 sheet khác nhau để nếu thay đổi thì không phải đổi Code.
 
Upvote 0
dòng 36 trống vẫn đối chiếu trống cho cột 36 dữ liệu cố bác ah
 
Upvote 0
Thôi thì bạn tạm xài cái Code này, các trường hợp khác bạn tự tùy biến
Mã:
Sub Check()
Dim Arr, ArrComp
Dim Col As Long, Rw As Long
Dim Str As String
ArrComp = [A1:AA36]
Arr = Range([A37], [A65535].End(xlUp)).Resize(, 36)
For Col = 1 To 36
    For k = 1 To 27
        Str = "#" & ArrComp(Col, k) & "#"
    Next
    For Rw = 1 To UBound(Arr, 1)
           If InStr(1, Str, "#" & Arr(Rw, Col) & "#") Then
                Cells(Rw + 36, Col + 36) = 1
            End If
    Next
Next
End Sub
 
Upvote 0
Thôi thì bạn tạm xài cái Code này, các trường hợp khác bạn tự tùy biến
Mã:
Sub Check()
Dim Arr, ArrComp
Dim Col As Long, Rw As Long
Dim Str As String
ArrComp = [A1:AA36]
Arr = Range([A37], [A65535].End(xlUp)).Resize(, 36)
For Col = 1 To 36
    [B][COLOR=#ff0000]For k = 1 To 27
        Str = "#" & ArrComp(Col, k) & "#"
    Next[/COLOR][/B]
    For Rw = 1 To UBound(Arr, 1)
           If InStr(1, Str, "#" & Arr(Rw, Col) & "#") Then
                Cells(Rw + 36, Col + 36) = 1
            End If
    Next
Next
End Sub

Nếu tôi hiểu được lôgíc - nối chuỗi - thì không phải là
Mã:
    For k = 1 To 27
        Str = "#" & ArrComp(Col, k) & "#"
    Next

mà phải là

Mã:
    Str = "#"
    For k = 1 To 27
        Str = Str & ArrComp(Col, k) & "#"
    Next
------------
Góp vui. Bạn kiểm tra tốc độ xem sao.
Mã:
Sub DoSomething()
Dim dulieu, mau, r As Long, c As Long, n As Long, text As String, t
    t = Timer
    
    dulieu = Range("A37:AJ3377")
    mau = Range("A1:AA36")
    For c = 1 To UBound(dulieu, 2)
        For r = 1 To UBound(dulieu)
            text = dulieu(r, c)
            For n = 1 To UBound(mau, 2)
                If text = mau(c, n) Then
                    dulieu(r, c) = 1
                    Exit For
                End If
                If n = UBound(mau, 2) Then dulieu(r, c) = ""
            Next n
        Next r
    Next c
    
    [AL37].Resize(UBound(dulieu), UBound(dulieu, 2)) = dulieu
    
    Debug.Print "DoSomething: " & Timer - t
End Sub
 
Upvote 0
Code chạy của bác dhn46 chạy bị lỗi tích dấu. Nói code bác siwtom chạy ok rồi bị lệch chút phải chỉnh thôi. Em cảm các bác về sự nhiệt tinh và tận tâm cho bài toán của em. Nhưng vẫn còn trường hợp đảo của 1 số thì còn đó chưa giải quyêt được các bác nghiên cứu cho em cái code. em xin gửi file lên chạy bởi hàm thôi.
 
Lần chỉnh sửa cuối:
Upvote 0
Code chạy của bác dhn46 chạy bị lỗi tích dấu. Nói code bác siwtom chạy ok rồi bị lệch chút phải chỉnh thôi. Em cảm các bác về sự nhiệt tinh và tận tâm cho bài toán của em. Nhưng vẫn còn trường hợp đảo của 1 số thì còn đó chưa giải quyêt được các bác nghiên cứu cho em cái code. em xin gửi file lên chạy bởi hàm thôi.

Đảo là thế nào?
Nếu bạn đã nói về "đảo, thuận" thì bạn phải định nghĩa khái niệm.
Nói chung bạn phải mô tả. Gửi tập tin lên rồi xong?

1. Dữ liệu trong mỗi ô luôn là 2 chữ số hay có thể là 1 hoặc hai chữ số?
2. Nếu tôi có ô Axyz = "mn" và Akl:AJkl có các số có 2 (luôn 2?) chữ số thì khi nào thì trả về 1 còn khi nào trả về rỗng?

Định nghĩa khái niệm, miêu tả cụ thể. Không ai rỗi hơi để mà sửa đi sửa lại. Đã ghi rõ "trường hợp THUẬN" (ở bài #9 mà bài này giống bài #9), bây giờ lại nói về cái "ĐẢO" gì đó.

Hoặc chi tiết và đi tiếp hoặc dừng tại đây.
 
Upvote 0
Em cũng chưa nói rõ xin lỗi các bác vậy. Trường hợp thuận bác biết rồi gì làm tương tự như vậy chỉ khác là số đảo thôi, trường hợp đảo khác ở chỗ sau. những con số ở hàng 1...hàng 27,28 so với những con số ở cột A(A30:A3333)...cột AB(AB30:AB3333) số đảo những sô sau ví dụ như hàng có 25 đảo là 52,25 hoặc 35 đảo là 35,53 . thì tích thôi.
 
Upvote 0
Em cũng chưa nói rõ xin lỗi các bác vậy. Trường hợp thuận bác biết rồi gì làm tương tự như vậy chỉ khác là số đảo thôi, trường hợp đảo khác ở chỗ sau. những con số ở hàng 1...hàng 27,28 so với những con số ở cột A(A30:A3333)...cột AB(AB30:AB3333) số đảo những sô sau ví dụ như hàng có 25 đảo là 52,25 hoặc 35 đảo là 35,53 . thì tích thôi.

Bạn kiểm tra lại xem. Nếu có thuận thì tích, và nếu có đảo thì cũng tích. Tức nếu ô là 07 thì nếu trong dòng có ít nhất là 07 hoặc 70 thì tích, ngược lại bỏ trống.

Mã:
Sub DoSomething()
Dim dulieu, mau, r As Long, c As Long, n As Long, so As Long, good As Boolean, t
    t = Timer
    
    dulieu = Range("A30:AB3333")
    mau = Range("A1:AA28")
    For c = 1 To UBound(dulieu, 2)
        For r = 1 To UBound(dulieu)
            so = dulieu(r, c)
            good = False
            For n = 1 To UBound(mau, 2)
                good = so = mau(c, n)
                If Not good Then good = (so \ 10 = mau(c, n) Mod 10) And (so Mod 10 = mau(c, n) \ 10)
                If good Then
                    dulieu(r, c) = 1
                    Exit For
                End If
                If n = UBound(mau, 2) Then dulieu(r, c) = ""
            Next n
        Next r
    Next c
    
    [AC30].Resize(UBound(dulieu), UBound(dulieu, 2)) = dulieu
    
    Debug.Print "DoSomething: " & Timer - t
End Sub
 
Upvote 0
Em hỏi chút. Em test qua thấy đúng ra tại cột BD k có vì ô trống tại sao vẫn được tích cột BD tương ứng hàng 28 (a28:aa27) là trống mà.(em giải thích luôn số đảo của 1 số là ab đảo là ab,hoặc ba cứ có mặt của 1 hoặc 2 thằng thì tích không có bỏ qua) Cảm ơn bác!
 
Upvote 0
Em hỏi chút. Em test qua thấy đúng ra tại cột BD k có vì ô trống tại sao vẫn được tích cột BD tương ứng hàng 28 (a28:aa27) là trống mà.(em giải thích luôn số đảo của 1 số là ab đảo là ab,hoặc ba cứ có mặt của 1 hoặc 2 thằng thì tích không có bỏ qua) Cảm ơn bác!

À đúng rồi. Vì code coi dòng trống là 0 nên các ô trong cột AB nếu là 00 thì sẽ được tích.
Nếu bạn coi là nếu dòng so sánh là trống thì cột ứng với nó không được tích thì ...
À, thế có trường hợp dòng có vài ô trống còn lại thì có dữ liệu không? Hay chỉ có 2 trường hợp là hoặc trống cả dòng hoặc có dữ liệu cả dòng?

Các ô trong cột có thể trống không?
 
Lần chỉnh sửa cuối:
Upvote 0
chuẩn hàng chỉ dữ liệu hoặc không có thôi.không có trường hợp nửa có nửa không, các cột đầy dữ liệu luôn bác ah. vậy ah bác xử lý sao đây. thanks bác!
 
Lần chỉnh sửa cuối:
Upvote 0
chuẩn hàng chỉ dữ liệu hoặc không có thôi.không có trường hợp nửa có nửa không, các cột đầy dữ liệu luôn bác ah. vậy ah bác xử lý sao đây. thanks bác!

Bạn kiểm tra. Chỗ đỏ đỏ là mới thêm

Mã:
Sub DoSomething()
Dim dulieu, mau, r As Long, c As Long, n As Long, so As Long, good As Boolean, t
    t = Timer
    
    dulieu = Range("A30:AB3333")
    mau = Range("A1:AA28")
    For c = 1 To UBound(dulieu, 2)
        [B][COLOR=#ff0000]If mau(c, 1) <> "" Then[/COLOR][/B]
            For r = 1 To UBound(dulieu)
                so = dulieu(r, c)
                good = False
                For n = 1 To UBound(mau, 2)
                    good = so = mau(c, n)
                    If Not good Then good = (so \ 10 = mau(c, n) Mod 10) And (so Mod 10 = mau(c, n) \ 10)
                    If good Then
                        dulieu(r, c) = 1
                        Exit For
                    End If
                    If n = UBound(mau, 2) Then dulieu(r, c) = ""
                Next n
            Next r
        [B][COLOR=#ff0000]Else
            For r = 1 To UBound(dulieu)
                dulieu(r, c) = ""
            Next r
        End If[/COLOR][/B]
    Next c
    
    [AC30].Resize(UBound(dulieu), UBound(dulieu, 2)) = dulieu
    
    Debug.Print "DoSomething: " & Timer - t
End Sub
 
Upvote 0
em cũng không phàn nàn được gì code chạy chuẩn rồi bác
 
Upvote 0

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

Back
Top Bottom