THỐNG KÊ DỮ LIỆU DỰA VÀO NHIỀU ĐIỀU KIỆN. (1 người xem)

Liên hệ QC

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

huonglien1901

GPE là ngôi nhà thứ 2 của tôi!!!
Tham gia
17/4/16
Bài viết
2,702
Được thích
2,434
Giới tính
Nam
Nghề nghiệp
Nhân viên kỹ thuật in ấn
Chào mọi người!

Em có file này có những vấn đề nhờ mọi người hỗ trợ.
Sheet NEGATIVE STOCK: Lọc Cột SKU QUANLITY ở sheet GPE nhỏ hơn 0(<0) rồi copy hết dữ liệu qua sheet NEGATIVE.
Lọc cột WEIGH/SKU giá trị nhỏ hơn 0, Chọn cột ARTICLE STATUS là số 3 và số 5, Chọn cột CEXTdùng hàm MID(CEXT,3,2) để lấy ra mã quầy 05 rồi copy dữ liệu qua sheet NEGATIVE ở ví trí kế tiếp.(Lấy cả tên tiêu đê)
Sheet F3,F5 H.STOCK: Lọc cột SKU QUANLITY ở sheet GPE giá trị lớn hơn 0(>0),Chọn cột ARTICLE STATUS là số 3 và 5,Chọn cột CEXT dùng hàm MID(CEXT,3,2) để lấy ra mã quầy 04 rồi copy dữ liệu qua sheet F3,F5 H.STOCK (kể cả tên tiêu đề
Sheet HIGH STOCK: Lọc SKU QUANLITY các giá trị từ cao đến thấp.
Ở tiêu đề TOP 100 CHẠY THEO SỐ LƯỢNG.
DÙNG HÀM MID(CEXT,3,2) bỏ mã quầy 03,05, rồi copy 100 dòng rồi dán vào ô D3 ở sheet HIGH STOCK.
ở tiêu đề TOP 100 CHẠY THEO GIÁ TRỊ
Lọc cột STock Cost Value các giá trị từ cao đến thấp, dùng hàm mid(CEXT,3,2) bỏ mã quầy 03,05, rồi copy 100 dòng dán vào ô d106 của sheet HIGH STOCK.
Sheet SAOA: cột K(SUPPLIER CODE): dò kết quả bên sheet Oderdass dựa vào điều kiện cột BARCODE., Nếu dữ liệu không tìm thấy vần giữ định dạng lỗi #NA.
Cột L(SUPPLIER NAME): dò kết quả bên sheet Oderdass dựa vào điều kiện cột BARCODE., Nếu dữ liệu không tìm thấy vần giữ định dạng lỗi #NA.
Cột M(STOCK): dựa vào kết quả ơt cột SKU QUANLITY dựa vào điều kiện Cột BARCODE.(ở sheet GPE)
Nếu không tìm thấy thì tìm dựa vào Cột CODE(ở sheet GPE) để tìm.
Nếu không tìm thấy thì vẫn giữ định dạng lỗi #NA.
Cột N(Awating): dựa vào kết quả bên sheet Awating dùng hàm sumif để tính dựa vào điều kiện cột BARCODE.
Sheet SAOA STOCK AVAILBLE: Chọn cột STOCK bên Sheet SAOA các giá trị lớn hơn 0. rồi copy tất cả dữ rồi dán vào sheet SAOA STOCK AVAILBLE ở ô A2.
Sheet SAOA NON STOCK: Chọn cột STOCK bên Sheet SAOA các giá trị bằng 0 rồi copy tất cả dữliệu rồi dán vào sheet SAOA NON STOCK ở ô A2.
Chọn cột STOCK (ở sheet SAOA) là các giá trị lỗi #NA, rồi copy dán vào sheet SAOA NON STOCKở dòng kế tiếp.
Sheet Ruptute: dùng công thức dò bên sheet SAOA kết hợp Sheet GPE :(Vlookup(Cột BARCODE,(ở sheet GPE),bảng dò (kết quả ở cột E(FGR),3,0) rôi lọc lấy những giá trị là số rồi copy tất cả dữ liệu thảo mãn vào sheet RUPTURE(lấy cả tên tiêu đề)
Em cảm ơn mọi người nhiều|~!
 
Lần chỉnh sửa cuối:
Chào mọi người!

Em có file này có những vấn đề nhờ mọi người hỗ trợ.
Sheet NEGATIVE STOCK: Lọc Cột SKU QUANLITY ở sheet GPE nhỏ hơn 0(<0) rồi copy hết dữ liệu qua sheet NEGATIVE.
Lọc cột WEIGH/SKU giá trị nhỏ hơn 0, Chọn cột ARTICLE STATUS là số 3 và số 5, Chọn cột CEXTdùng hàm MID(CEXT,3,2) để lấy ra mã quầy 05 rồi copy dữ liệu qua sheet NEGATIVE ở ví trí kế tiếp.(Lấy cả tên tiêu đê)
Sheet F3,F5 H.STOCK: Lọc cột SKU QUANLITY ở sheet GPE giá trị lớn hơn 0(>0),Chọn cột ARTICLE STATUS là số 3 và 5,Chọn cột CEXT dùng hàm MID(CEXT,3,2) để lấy ra mã quầy 04 rồi copy dữ liệu qua sheet F3,F5 H.STOCK (kể cả tên tiêu đề
Sheet HIGH STOCK: Lọc SKU QUANLITY các giá trị từ cao đến thấp.
Ở tiêu đề TOP 100 CHẠY THEO SỐ LƯỢNG.
DÙNG HÀM MID(CEXT,3,2) bỏ mã quầy 03,05, rồi copy 100 dòng rồi dán vào ô D3 ở sheet HIGH STOCK.
ở tiêu đề TOP 100 CHẠY THEO GIÁ TRỊ
Lọc cột STock Cost Value các giá trị từ cao đến thấp, dùng hàm mid(CEXT,3,2) bỏ mã quầy 03,05, rồi copy 100 dòng dán vào ô d106 của sheet HIGH STOCK.
Sheet SAOA: cột K(SUPPLIER CODE): dò kết quả bên sheet Oderdass dựa vào điều kiện cột BARCODE., Nếu dữ liệu không tìm thấy vần giữ định dạng lỗi #NA.
Cột L(SUPPLIER NAME): dò kết quả bên sheet Oderdass dựa vào điều kiện cột BARCODE., Nếu dữ liệu không tìm thấy vần giữ định dạng lỗi #NA.
Cột M(STOCK): dựa vào kết quả ơt cột SKU QUANLITY dựa vào điều kiện Cột BARCODE.(ở sheet GPE)
Nếu không tìm thấy thì tìm dựa vào Cột CODE(ở sheet GPE) để tìm.
Nếu không tìm thấy thì vẫn giữ định dạng lỗi #NA.
Cột N(Awating): dựa vào kết quả bên sheet Awating dùng hàm sumif để tính dựa vào điều kiện cột BARCODE.
Sheet SAOA STOCK AVAILBLE: Chọn cột STOCK bên Sheet SAOA các giá trị lớn hơn 0. rồi copy tất cả dữ rồi dán vào sheet SAOA STOCK AVAILBLE ở ô A2.
Sheet SAOA NON STOCK: Chọn cột STOCK bên Sheet SAOA các giá trị bằng 0 rồi copy tất cả dữliệu rồi dán vào sheet SAOA NON STOCK ở ô A2.
Chọn cột STOCK (ở sheet SAOA) là các giá trị lỗi #NA, rồi copy dán vào sheet SAOA NON STOCKở dòng kế tiếp.
Sheet Ruptute: dùng công thức dò bên sheet SAOA kết hợp Sheet GPE :(Vlookup(Cột BARCODE,(ở sheet GPE),bảng dò (kết quả ở cột E(FGR),3,0) rôi lọc lấy những giá trị là số rồi copy tất cả dữ liệu thảo mãn vào sheet RUPTURE(lấy cả tên tiêu đề)
Em cảm ơn mọi người nhiều|~!
Đọc hoa cả mắt mà chưa chắc đã hiểu.
Tải file về mở ra lại càng "chẳng hiểu".
Híc!
 
Upvote 0
Mở file chẳng có sheet nào liên quan. Ví dụ sheet NEGATIVE STOCK ? sheet NEGATIVE.? .... Một đống sheet "ma" nữa.
Em gửi nhầm file Bác ơi, file của em 13M làm sao gủi lên diễn đàn đây Bác?
Bác chi em gửi file với.
 
Upvote 0
Em gửi nhầm file Bác ơi, file của em 13M làm sao gủi lên diễn đàn đây Bác?
Bác chi em gửi file với.
Đúng là..... Đọc file thấy "trớt quớt"
Mỗi sheet chỉ chừa khoảng vài chục dòng mẫu đủ các tình huống thôi, kết quả làm thủ công cũng chỉ khoảng 100 dòng thôi, để chi mỗi sheet mấy chục ngàn dòng cho nặng file.
Những sheet nào không liên quan đến công việc thì xóa đi. Chừng nào code chạy ổn thì áp dụng vào file thật của bạn.
Nén file trước khi gởi cũng nhẹ được 1 phần.
 
Upvote 0
Đúng là..... Đọc file thấy "trớt quớt"
Mỗi sheet chỉ chừa khoảng vài chục dòng mẫu đủ các tình huống thôi, kết quả làm thủ công cũng chỉ khoảng 100 dòng thôi, để chi mỗi sheet mấy chục ngàn dòng cho nặng file.
Những sheet nào không liên quan đến công việc thì xóa đi. Chừng nào code chạy ổn thì áp dụng vào file thật của bạn.
Nén file trước khi gởi cũng nhẹ được 1 phần.
em gửi Bác lại file sau khi Bác đưa ra lời khuyên cho em.
Chúc Bác ngày vui.
 

File đính kèm

Upvote 0
em gửi Bác lại file sau khi Bác đưa ra lời khuyên cho em.
Chúc Bác ngày vui.
Làm từ từ thôi nhé, nhiều quá "chóng mặt lắm".
Kiểm tra 2 chuyện này trên dữ liệu thật
Sheet NEGATIVE STOCK: Lọc Cột SKU QUANLITY ở sheet GPE nhỏ hơn 0(<0) rồi copy hết dữ liệu qua sheet NEGATIVE.
Lọc cột WEIGH/SKU giá trị nhỏ hơn 0, Chọn cột ARTICLE STATUS là số 3 và số 5, Chọn cột CEXTdùng hàm MID(CEXT,3,2) để lấy ra mã quầy 05 rồi copy dữ liệu qua sheet NEGATIVE ở ví trí kế tiếp.(Lấy cả tên tiêu đê)
PHP:
Public Sub Negative()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long
With Sheets("GPE")
    sArr = .Range("A2", .Range("A2").End(xlDown)).Resize(, 18).Value
    R = UBound(sArr): ReDim dArr(1 To R, 1 To 18)
End With
For I = 2 To R
    If sArr(I, 11) < 0 Then
        K = K + 1
        For J = 1 To 17
            dArr(K, J) = sArr(I, J)
        Next J
    End If
Next I
K = K + 2
For J = 1 To 18
    dArr(K, J) = sArr(1, J)
Next J
For I = 2 To R
    If sArr(I, 12) < 0 Then
        If sArr(I, 7) = "3" Or sArr(I, 7) = "5" Then
            If Mid(sArr(I, 2), 3, 2) = "05" Then
                K = K + 1
                For J = 1 To 18
                    dArr(K, J) = sArr(I, J)
                Next J
            End If
        End If
    End If
Next I
With Sheets("Stock Negative")
    .Range("A3:A1000").Resize(, 18).ClearContents
    .Range("A3").Resize(K, 18) = dArr
End With
End Sub
 
Upvote 0
Làm từ từ thôi nhé, nhiều quá "chóng mặt lắm".
Kiểm tra 2 chuyện này trên dữ liệu thật

PHP:
Public Sub Negative()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long
With Sheets("GPE")
    sArr = .Range("A2", .Range("A2").End(xlDown)).Resize(, 18).Value
    R = UBound(sArr): ReDim dArr(1 To R, 1 To 18)
End With
For I = 2 To R
    If sArr(I, 11) < 0 Then
        K = K + 1
        For J = 1 To 17
            dArr(K, J) = sArr(I, J)
        Next J
    End If
Next I
K = K + 2
For J = 1 To 18
    dArr(K, J) = sArr(1, J)
Next J
For I = 2 To R
    If sArr(I, 12) < 0 Then
        If sArr(I, 7) = "3" Or sArr(I, 7) = "5" Then
            If Mid(sArr(I, 2), 3, 2) = "05" Then
                K = K + 1
                For J = 1 To 18
                    dArr(K, J) = sArr(I, J)
                Next J
            End If
        End If
    End If
Next I
With Sheets("Stock Negative")
    .Range("A3:A1000").Resize(, 18).ClearContents
    .Range("A3").Resize(K, 18) = dArr
End With
End Sub
Tại vì em đưa thiếu yêu cầu là: nên code Bác Lọc cột SKU nhỏ hơn 0 và lấy mã quầy 05 luôn, em muốn không lấy mã quầy 05 khi cột ARTICLE STATUS là 1.
Và em muốn những dòng lấy ra gộp chung với nhau luôn không tách tiêu đề ra. và có thể sắp sếp từ nhỏ đến lớn luôn Bác dựa vào cột CEXT sử dụng hàm MID(CEXT,7,3) để lấy mã 410,420,430,......590.
Em cảm ơn Bác nhiều.
 
Upvote 0
Tại vì em đưa thiếu yêu cầu là: nên code Bác Lọc cột SKU nhỏ hơn 0 và lấy mã quầy 05 luôn, em muốn không lấy mã quầy 05 khi cột ARTICLE STATUS là 1.
Và em muốn những dòng lấy ra gộp chung với nhau luôn không tách tiêu đề ra. và có thể sắp sếp từ nhỏ đến lớn luôn Bác dựa vào cột CEXT sử dụng hàm MID(CEXT,7,3) để lấy mã 410,420,430,......590.
Em cảm ơn Bác nhiều.
Nói rõ lại đi. không hiểu. Yêu cầu rõ ràng từng câu, từng chữ. Thiếu hoài ai chịu được.
 
Upvote 0
Nói rõ lại đi. không hiểu.]
code Bác lấy luôn mã quầy 05 luôn khi cột ARTICLE STATUS là 1:
Giờ em muốn không lấy mã quầy 05 khi cột ARTICLE STATUS là 1:
và em muốn sắp xếp giống như hình vậy Anh: dựa vào cột CEXT(trên sheet GPE) dùng hàm MID(CEXT,7,3) để lấy ra các mã này 410,420...............(Hình ảnh trong hình là em ví dụ cho Bác hiểu)
Như trong hình đó Bác.
upload_2017-6-14_10-49-23.png
 
Upvote 0
"Giờ em muốn không lấy mã quầy 05 khi cột ARTICLE STATUS là 1:"
Vẫn là kiểu lấp lững, cái gì cũ thì không nhắc nữa. Phải nói rõ lại yêu cầu:
Có phải như vầy không"
1/
"Lọc Cột SKU QUANLITY ở sheet GPE nhỏ hơn 0(<0), rồi copy hết dữ liệu qua sheet NEGATIVE.
Nhưng: Nếu cột Article Status là 1 và Mid(cột CEXT,3,2) ="05" thì không lấy."
2/ Gì gì đó cho rõ, không nhắc chuyện cũ. Tự tôi biết yêu cầu mới khác cũ chỗ nào.
 
Upvote 0
"Giờ em muốn không lấy mã quầy 05 khi cột ARTICLE STATUS là 1:"
Vẫn là kiểu lấp lững, cái gì cũ thì không nhắc nữa. Phải nói rõ lại yêu cầu:
Có phải như vầy không"
1/
"Lọc Cột SKU QUANLITY ở sheet GPE nhỏ hơn 0(<0), rồi copy hết dữ liệu qua sheet NEGATIVE.
Nhưng: Nếu cột Article Status là 1 và Mid(cột CEXT,3,2) ="05" thì không lấy."
2/ Gì gì đó cho rõ, không nhắc chuyện cũ.
Dạ đúng rồi Bác ơi. Có như vậy mà em diễn đạt khó nữa.
 
Upvote 0
Dạ đúng rồi Bác ơi. Có như vậy mà em diễn đạt khó nữa.
PHP:
Public Sub Negative()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long
With Sheets("GPE")
    sArr = .Range("A2", .Range("A2").End(xlDown)).Resize(, 18).Value
    R = UBound(sArr): ReDim dArr(1 To R, 1 To 18)
End With
For I = 2 To R
    If sArr(I, 11) < 0 Then
        If Not (sArr(I, 7) = "1" And Mid(sArr(I, 2), 3, 2) = "05") Then
            K = K + 1
            For J = 1 To 17
                dArr(K, J) = sArr(I, J)
            Next J
            dArr(K, 2) = Mid(sArr(I, 2), 7, 3)
        End If
    End If
Next I
For I = 2 To R
    If sArr(I, 12) < 0 Then
        If sArr(I, 7) = "3" Or sArr(I, 7) = "5" Then
            If Mid(sArr(I, 2), 3, 2) = "05" Then
                K = K + 1
                For J = 1 To 18
                    dArr(K, J) = sArr(I, J)
                Next J
                dArr(K, 2) = Mid(sArr(I, 2), 7, 3)
            End If
        End If
    End If
Next I
With Sheets("Stock Negative")
    .Range("A3:A1000").Resize(, 18).ClearContents
    .Range("A3").Resize(K, 18) = dArr
    .Range("A3").Resize(K, 18).Sort Key1:=.Range("B3")
End With
End Sub
 
Upvote 0
PHP:
Public Sub Negative()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long
With Sheets("GPE")
    sArr = .Range("A2", .Range("A2").End(xlDown)).Resize(, 18).Value
    R = UBound(sArr): ReDim dArr(1 To R, 1 To 18)
End With
For I = 2 To R
    If sArr(I, 11) < 0 Then
        If Not (sArr(I, 7) = "1" And Mid(sArr(I, 2), 3, 2) = "05") Then
            K = K + 1
            For J = 1 To 17
                dArr(K, J) = sArr(I, J)
            Next J
            dArr(K, 2) = Mid(sArr(I, 2), 7, 3)
        End If
    End If
Next I
For I = 2 To R
    If sArr(I, 12) < 0 Then
        If sArr(I, 7) = "3" Or sArr(I, 7) = "5" Then
            If Mid(sArr(I, 2), 3, 2) = "05" Then
                K = K + 1
                For J = 1 To 18
                    dArr(K, J) = sArr(I, J)
                Next J
                dArr(K, 2) = Mid(sArr(I, 2), 7, 3)
            End If
        End If
    End If
Next I
With Sheets("Stock Negative")
    .Range("A3:A1000").Resize(, 18).ClearContents
    .Range("A3").Resize(K, 18) = dArr
    .Range("A3").Resize(K, 18).Sort Key1:=.Range("B3")
End With
End Sub
code Bác ra đúng rồi Bác ơi, Còn những câu hỏi trên Bác hỗ trợ giúp em với.
Em chúc Bác ngày vui.
 
Upvote 0
code Bác ra đúng rồi Bác ơi, Còn những câu hỏi trên Bác hỗ trợ giúp em với.
Em chúc Bác ngày vui.
Muốn tiếp tục thì giải thích rõ yêu cầu làm từng sheet.
Tiếp tục với sheet "F3,F5 H.Stock" thế nào?
Tiêu đề thì copy từ GPE qua 1 lần đầu.
Các cột nào muốn dạng Text thì format trước là Text, muốn Number thì format trước 1 lần.
PHP:
Public Sub F3_F5()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long
With Sheets("GPE")
    sArr = .Range("A2", .Range("A2").End(xlDown)).Resize(, 18).Value
    R = UBound(sArr): ReDim dArr(1 To R, 1 To 18)
End With
For I = 2 To R
    If sArr(I, 11) > 0 Then
        If sArr(I, 7) = "3" Or sArr(I, 7) = "5" Then
            If Mid(sArr(I, 2), 3, 2) = "04" Then
                K = K + 1
                For J = 1 To 18
                    dArr(K, J) = sArr(I, J)
                Next J
                dArr(K, 2) = Mid(sArr(I, 2), 3, 2)
            End If
        End If
    End If
Next I
With Sheets("F3,F5 H.Stock")
    .Range("A3:A1000").Resize(, 18).ClearContents
    .Range("A3").Resize(K, 18) = dArr
    .Range("A3").Resize(K, 18).Sort Key1:=.Range("B3")
End With
End Sub
 
Upvote 0
Muốn tiếp tục thì giải thích rõ yêu cầu làm từng sheet.
Tiếp tục với sheet "F3,F5 H.Stock" thế nào?
Tiêu đề thì copy từ GPE qua 1 lần đầu.
Các cột nào muốn dạng Text thì format trước là Text, muốn Number thì format trước 1 lần.
PHP:
Public Sub F3_F5()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long
With Sheets("GPE")
    sArr = .Range("A2", .Range("A2").End(xlDown)).Resize(, 18).Value
    R = UBound(sArr): ReDim dArr(1 To R, 1 To 18)
End With
For I = 2 To R
    If sArr(I, 11) > 0 Then
        If sArr(I, 7) = "3" Or sArr(I, 7) = "5" Then
            If Mid(sArr(I, 2), 3, 2) = "04" Then
                K = K + 1
                For J = 1 To 18
                    dArr(K, J) = sArr(I, J)
                Next J
                dArr(K, 2) = Mid(sArr(I, 2), 3, 2)
            End If
        End If
    End If
Next I
With Sheets("F3,F5 H.Stock")
    .Range("A3:A1000").Resize(, 18).ClearContents
    .Range("A3").Resize(K, 18) = dArr
    .Range("A3").Resize(K, 18).Sort Key1:=.Range("B3")
End With
End Sub
Dạ Bác ơi giờ em đi làm tối em về mới trả lời cho bác được. Thông cảm cho em nhé!
Chúc Bác ngày vui.
 
Upvote 0
Muốn tiếp tục thì giải thích rõ yêu cầu làm từng sheet.
Tiếp tục với sheet "F3,F5 H.Stock" thế nào?
Tiêu đề thì copy từ GPE qua 1 lần đầu.
Các cột nào muốn dạng Text thì format trước là Text, muốn Number thì format trước 1 lần.
PHP:
Public Sub F3_F5()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long
With Sheets("GPE")
    sArr = .Range("A2", .Range("A2").End(xlDown)).Resize(, 18).Value
    R = UBound(sArr): ReDim dArr(1 To R, 1 To 18)
End With
For I = 2 To R
    If sArr(I, 11) > 0 Then
        If sArr(I, 7) = "3" Or sArr(I, 7) = "5" Then
            If Mid(sArr(I, 2), 3, 2) = "04" Then
                K = K + 1
                For J = 1 To 18
                    dArr(K, J) = sArr(I, J)
                Next J
                dArr(K, 2) = Mid(sArr(I, 2), 3, 2)
            End If
        End If
    End If
Next I
With Sheets("F3,F5 H.Stock")
    .Range("A3:A1000").Resize(, 18).ClearContents
    .Range("A3").Resize(K, 18) = dArr
    .Range("A3").Resize(K, 18).Sort Key1:=.Range("B3")
End With
End Sub
Em xin lỗi Bác giờ mới trả lời cho Bác được.Em muốn cột CODE, BARCODE, LÀ TEXT,
Cột SKU QUANLITY, WEIGH/SKU,
Purchase Stock Value ,Stock Cost Value , Sales Stock Value là number,
nhờ Bác sửa giúp em không lấy mã quầy 05 khi cột ARTICLE STATUS là 5. Bác ơi vẫn lấy ra mã quầy 410.......như sheet NEGATIVE STOCK đó Bác và sắp xếp từ thấp đến cao.

Em cảm ơn Bác nhiều!
 
Upvote 0
Em xin lỗi Bác giờ mới trả lời cho Bác được.Em muốn cột CODE, BARCODE, LÀ TEXT,
Cột SKU QUANLITY, WEIGH/SKU,
Purchase Stock Value ,Stock Cost Value , Sales Stock Value là number,
nhờ Bác sửa giúp em không lấy mã quầy 05 khi cột ARTICLE STATUS là 5. Bác ơi vẫn lấy ra mã quầy 410.......như sheet NEGATIVE STOCK đó Bác và sắp xếp từ thấp đến cao.

Em cảm ơn Bác nhiều!
- Bạn có đọc hiểu câu này không?
"Tiêu đề thì copy từ GPE qua 1 lần đầu.
Các cột nào muốn dạng Text thì format trước là Text, muốn Number thì format trước 1 lần."
- Tôi từng nói là: "không nhắc chuyện cũ, không so sánh cái cũ". Từng phần phải giải thích rõ của riêng phần đó thôi
- Lại là sửa. "nhờ Bác sửa giúp em không lấy mã quầy 05 khi cột ARTICLE STATUS là 5"
- Sau này bạn nên ghi rõ, đúng tên tiêu đề cột, ví dụ cột "CEXT", tôi có biết "mã quầy" là cột nào.

"Sheet F3,F5 H.STOCK: Lọc cột SKU QUANLITY ở sheet GPE giá trị lớn hơn 0(>0),Chọn cột ARTICLE STATUS là số 3 và 5,Chọn cột CEXT dùng hàm MID(CEXT,3,2) để lấy ra mã quầy 04 rồi copy dữ liệu qua sheet F3,F5 H.STOCK" Làm gì có mã "05"?
 
Lần chỉnh sửa cuối:
Upvote 0
- Bạn có đọc hiểu câu này không?
"Tiêu đề thì copy từ GPE qua 1 lần đầu.
Các cột nào muốn dạng Text thì format trước là Text, muốn Number thì format trước 1 lần."
- Tôi từng nói là: "không nhắc chuyện cũ, không so sánh cái cũ". Từng phần phải giải thích rõ của riêng phần đó thôi
- Lại là sửa. "nhờ Bác sửa giúp em không lấy mã quầy 05 khi cột ARTICLE STATUS là 5"
Dạ em đã hiểu ý Bác rồi.
do trong quá trình làm việc có vấn đề phát sinh nên em nhờ Bác sửa code, em muốn không lấy mã quầy 05 khi cột ARTICLE STATUS là 3,5.
với sheet HIGH STOCK:
Sheet HIGH STOCK: Lọc SKU QUANLITY các giá trị từ cao đến thấp.
Ở tiêu đề TOP 100 CHẠY THEO SỐ LƯỢNG.
DÙNG HÀM MID(CEXT,3,2) bỏ mã quầy 03,05, rồi copy 100 dòng rồi dán vào ô D3 ở sheet HIGH STOCK.
ở tiêu đề TOP 100 CHẠY THEO GIÁ TRỊ
Lọc cột STock Cost Value các giá trị từ cao đến thấp, dùng hàm mid(CEXT,3,2) bỏ mã quầy 03,05, rồi copy 100 dòng dán vào ô d106 của sheet HIGH STOCK.
Em cảm ơn Bác nhiều.
P/s: Bác đừng giân em mong Bác thông cảm cho em.
 
Upvote 0
Dạ em đã hiểu ý Bác rồi.
do trong quá trình làm việc có vấn đề phát sinh nên em nhờ Bác sửa code, em muốn không lấy mã quầy 05 khi cột ARTICLE STATUS là 3,5.
với sheet HIGH STOCK:
Sheet HIGH STOCK: Lọc SKU QUANLITY các giá trị từ cao đến thấp.
Ở tiêu đề TOP 100 CHẠY THEO SỐ LƯỢNG.
DÙNG HÀM MID(CEXT,3,2) bỏ mã quầy 03,05, rồi copy 100 dòng rồi dán vào ô D3 ở sheet HIGH STOCK.
ở tiêu đề TOP 100 CHẠY THEO GIÁ TRỊ
Lọc cột STock Cost Value các giá trị từ cao đến thấp, dùng hàm mid(CEXT,3,2) bỏ mã quầy 03,05, rồi copy 100 dòng dán vào ô d106 của sheet HIGH STOCK.
Em cảm ơn Bác nhiều.
P/s: Bác đừng giân em mong Bác thông cảm cho em.
Trong yêu cầu có đoạn: Chọn cột CEXT dùng hàm MID(CEXT,3,2) để lấy ra mã quầy 04 rồi copy dữ liệu qua sheet F3,F5 H.STOCK"
Như vậy chỉ có mã "04" thôi, Làm gì có mã "05"?
Kiểm tra sheet này trước đi. Khi xong mới đến sheet khác.
PHP:
Public Sub F3_F5()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long
With Sheets("GPE")
    sArr = .Range("A2", .Range("A2").End(xlDown)).Resize(, 18).Value
    R = UBound(sArr): ReDim dArr(1 To R, 1 To 18)
End With
For I = 2 To R
    If sArr(I, 11) > 0 Then
        If sArr(I, 7) = "3" Or sArr(I, 7) = "5" Then
            If Mid(sArr(I, 2), 3, 2) = "04" Then
                K = K + 1
                For J = 1 To 18
                    dArr(K, J) = sArr(I, J)
                Next J
                dArr(K, 2) = Mid(sArr(I, 2), 7, 3)
            End If
        End If
    End If
Next I
With Sheets("F3,F5 H.Stock")
    .Range("A3:A1000").Resize(, 18).ClearContents
    .Range("A3").Resize(K, 18) = dArr
    .Range("A3").Resize(K, 18).Sort Key1:=.Range("B3")
End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Trong yêu cầu có đoạn: Chọn cột CEXT dùng hàm MID(CEXT,3,2) để lấy ra mã quầy 04 rồi copy dữ liệu qua sheet F3,F5 H.STOCK"
Như vậy chỉ có mã "04" thôi, Làm gì có mã "05"?
Kiểm tra sheet này trước đi. Khi xong mới đến sheet khác.
PHP:
Public Sub F3_F5()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long
With Sheets("GPE")
    sArr = .Range("A2", .Range("A2").End(xlDown)).Resize(, 18).Value
    R = UBound(sArr): ReDim dArr(1 To R, 1 To 18)
End With
For I = 2 To R
    If sArr(I, 11) > 0 Then
        If sArr(I, 7) = "3" Or sArr(I, 7) = "5" Then
            If Mid(sArr(I, 2), 3, 2) = "04" Then
                K = K + 1
                For J = 1 To 18
                    dArr(K, J) = sArr(I, J)
                Next J
                dArr(K, 2) = Mid(sArr(I, 2), 7, 3)
            End If
        End If
    End If
Next I
With Sheets("F3,F5 H.Stock")
    .Range("A3:A1000").Resize(, 18).ClearContents
    .Range("A3").Resize(K, 18) = dArr
    .Range("A3").Resize(K, 18).Sort Key1:=.Range("B3")
End With
End Sub
code ra đúng rồi Bác ơi. Vậy làm tiếp sheet HIGH STOCK Bác nhé!
 
Upvote 0
code ra đúng rồi Bác ơi. Vậy làm tiếp sheet HIGH STOCK Bác nhé!
Sheet này có 2 bảng kết quả, phải nhờ vào vùng phụ để Sort từ cao đến thấp rồi lấy 100 dòng đầu.
Phải chạy 2 Sub riêng.
PHP:
Public Sub High_Stock_SL()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long
With Sheets("GPE")
    sArr = .Range("A2", .Range("A2").End(xlDown)).Resize(, 18).Value
    R = UBound(sArr): ReDim dArr(1 To R, 1 To 18)
End With
For I = 2 To R
    If sArr(I, 11) > 0 Then
            If Mid(sArr(I, 2), 3, 2) <> "03" And Mid(sArr(I, 2), 3, 2) <> "05" Then
                K = K + 1
                For J = 1 To 18
                    dArr(K, J) = sArr(I, J)
                Next J
                dArr(K, 2) = Mid(sArr(I, 2), 3, 2)
            End If
    End If
Next I
With Sheets("HIGH STOCK")
    .Range("BA3:A1000").Resize(, 18).ClearContents
    .Range("BA3").Resize(K, 18) = dArr
    .Range("BA3").Resize(K, 18).Sort Key1:=.Range("BK3"), Order1:=xlDescending
    .Range("D3").Resize(100, 18).Value = .Range("BA3").Resize(100, 18).Value
    .Range("BA3").Resize(K, 18).ClearContents
End With
End Sub
PHP:
Public Sub High_Stock_GT()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long
With Sheets("GPE")
    sArr = .Range("A2", .Range("A2").End(xlDown)).Resize(, 18).Value
    R = UBound(sArr): ReDim dArr(1 To R, 1 To 18)
End With
For I = 2 To R
    If sArr(I, 17) > 0 Then
            If Mid(sArr(I, 2), 3, 2) <> "03" And Mid(sArr(I, 2), 3, 2) <> "05" Then
                K = K + 1
                For J = 1 To 18
                    dArr(K, J) = sArr(I, J)
                Next J
                dArr(K, 2) = Mid(sArr(I, 2), 3, 2)
            End If
    End If
Next I
With Sheets("HIGH STOCK")
    .Range("BA3:BA1000").Resize(, 18).ClearContents
    .Range("BA3").Resize(K, 18) = dArr
    .Range("BA3").Resize(K, 18).Sort Key1:=.Range("BQ3"), Order1:=xlDescending
    .Range("D106").Resize(100, 18).Value = .Range("BA3").Resize(100, 18).Value
    .Range("BA3").Resize(K, 18).ClearContents
End With
End Sub
 
Upvote 0
Sheet này có 2 bảng kết quả, phải nhờ vào vùng phụ để Sort từ cao đến thấp rồi lấy 100 dòng đầu.
Phải chạy 2 Sub riêng.
PHP:
Public Sub High_Stock_SL()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long
With Sheets("GPE")
    sArr = .Range("A2", .Range("A2").End(xlDown)).Resize(, 18).Value
    R = UBound(sArr): ReDim dArr(1 To R, 1 To 18)
End With
For I = 2 To R
    If sArr(I, 11) > 0 Then
            If Mid(sArr(I, 2), 3, 2) <> "03" And Mid(sArr(I, 2), 3, 2) <> "05" Then
                K = K + 1
                For J = 1 To 18
                    dArr(K, J) = sArr(I, J)
                Next J
                dArr(K, 2) = Mid(sArr(I, 2), 3, 2)
            End If
    End If
Next I
With Sheets("HIGH STOCK")
    .Range("BA3:A1000").Resize(, 18).ClearContents
    .Range("BA3").Resize(K, 18) = dArr
    .Range("BA3").Resize(K, 18).Sort Key1:=.Range("BK3"), Order1:=xlDescending
    .Range("D3").Resize(100, 18).Value = .Range("BA3").Resize(100, 18).Value
    .Range("BA3").Resize(K, 18).ClearContents
End With
End Sub
PHP:
Public Sub High_Stock_GT()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long
With Sheets("GPE")
    sArr = .Range("A2", .Range("A2").End(xlDown)).Resize(, 18).Value
    R = UBound(sArr): ReDim dArr(1 To R, 1 To 18)
End With
For I = 2 To R
    If sArr(I, 17) > 0 Then
            If Mid(sArr(I, 2), 3, 2) <> "03" And Mid(sArr(I, 2), 3, 2) <> "05" Then
                K = K + 1
                For J = 1 To 18
                    dArr(K, J) = sArr(I, J)
                Next J
                dArr(K, 2) = Mid(sArr(I, 2), 3, 2)
            End If
    End If
Next I
With Sheets("HIGH STOCK")
    .Range("BA3:BA1000").Resize(, 18).ClearContents
    .Range("BA3").Resize(K, 18) = dArr
    .Range("BA3").Resize(K, 18).Sort Key1:=.Range("BQ3"), Order1:=xlDescending
    .Range("D106").Resize(100, 18).Value = .Range("BA3").Resize(100, 18).Value
    .Range("BA3").Resize(K, 18).ClearContents
End With
End Sub
Hai sub giống y nhau, chỉ khác sort, mình nghĩ gộp lại thành một, và sort 2 lần và lấy kết quả từng lần là được
 
Upvote 0
Sheet này có 2 bảng kết quả, phải nhờ vào vùng phụ để Sort từ cao đến thấp rồi lấy 100 dòng đầu.
Phải chạy 2 Sub riêng.
PHP:
Public Sub High_Stock_SL ()
Dim Sarr (), Darr (), tôi As Long, J As Long, K As Long, R As Long
Với Sheets ( "GPE")
    Sarr = .Range ( "A2", .Range ( "A2"). End (xlDown)). Resize (, 18) .Value
    R = UBound (Sarr): ReDim darr (1 Để R, 1 Để 18)
Kết thúc với
Đối với I = 2 Để R
    Nếu Sarr (I, 11)> 0 Then
            Nếu trung (Sarr (I, 2), 3, 2) <> "03" và Mid (Sarr (I, 2), 3, 2) <> "05" Sau đó,
                K = K + 1
                Đối với J = 1 Để 18
                    Darr (K, J) = Sarr (I, J)
                tiếp J
                Darr (K, 2) = Mid (Sarr (I, 2), 3, 2)
            End If
    End If
tôi tiếp theo
Với Sheets ( "CỔ CAO")
    .Range ( "BA3: A1000"). Resize (, 18) .ClearContents
    .Range ( "BA3"). Resize (K, 18) = darr
    . .Range ( "BA3") Thay đổi kích thước (K, 18) .Sort Key1:. = Range ( "BK3"), Order1: = xlDescending
    .Range ( "D3"). Thay đổi kích thước (100, 18) .Value = .Range ( "BA3"). Thay đổi kích thước (100, 18) .Value
    .Range ( "BA3") Thay đổi kích thước (K, 18) .ClearContents.
Kết thúc với
End Sub
PHP:
Public Sub High_Stock_GT ()
Dim Sarr (), Darr (), tôi As Long, J As Long, K As Long, R As Long
Với Sheets ( "GPE")
    Sarr = .Range ( "A2", .Range ( "A2"). End (xlDown)). Resize (, 18) .Value
    R = UBound (Sarr): ReDim darr (1 Để R, 1 Để 18)
Kết thúc với
Đối với I = 2 Để R
    Nếu Sarr (I, 17)> 0 Then
            Nếu trung (Sarr (I, 2), 3, 2) <> "03" và Mid (Sarr (I, 2), 3, 2) <> "05" Sau đó,
                K = K + 1
                Đối với J = 1 Để 18
                    Darr (K, J) = Sarr (I, J)
                tiếp J
                Darr (K, 2) = Mid (Sarr (I, 2), 3, 2)
            End If
    End If
tôi tiếp theo
Với Sheets ( "CỔ CAO")
    .Range ( "BA3: BA1000"). Resize (, 18) .ClearContents
    .Range ( "BA3"). Resize (K, 18) = darr
    . .Range ( "BA3") Thay đổi kích thước (K, 18) .Sort Key1:. = Range ( "BQ3"), Order1: = xlDescending
    .Range ( "D106"). Thay đổi kích thước (100, 18) .Value = .Range ( "BA3"). Thay đổi kích thước (100, 18) .Value
    .Range ( "BA3") Thay đổi kích thước (K, 18) .ClearContents.
Kết thúc với
End Sub
[/ PHP] [/ QUOTE]
Code này ra đúng rồi Bác ơi. Trường hợp này em muốn giữ cột nguyên định dạng cột  CEXT thì làm thế nào Bác?
 
Lần chỉnh sửa cuối:
Upvote 0
Code này ra đúng rồi Bác ơi. Trường hợp này em muốn giữ cột nguyên định dạng cột CEXT thì làm thế nào Bác?
Trong 2 Sub đều có dòng này:
Mã:
dArr(K, 2) = Mid(sArr(I, 2), 3, 2)
Xóa bỏ nó đi.
 
Upvote 0
Hai sub giống y nhau, chỉ khác sort, mình nghĩ gộp lại thành một, và sort 2 lần và lấy kết quả từng lần là được
Đọc theo từng chữ trong "đám rừng" ở bài #1, rồi viết theo từng chữ ... chưa nghĩ đến "túm gọn nó".
Híc! Hai trong 1:
PHP:
Public Sub High_Stock()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long
With Sheets("GPE")
    sArr = .Range("A2", .Range("A2").End(xlDown)).Resize(, 18).Value
    R = UBound(sArr): ReDim dArr(1 To R, 1 To 18)
End With
    For I = 2 To R
        If Mid(sArr(I, 2), 3, 2) <> "03" And Mid(sArr(I, 2), 3, 2) <> "05" Then
            K = K + 1
            For J = 1 To 18
                dArr(K, J) = sArr(I, J)
            Next J
        End If
    Next I
With Sheets("HIGH STOCK")
    .Range("BA3").Resize(K, 18) = dArr
    .Range("BA3").Resize(K, 18).Sort Key1:=.Range("BK3"), Order1:=xlDescending
    .Range("D3").Resize(100, 18).Value = .Range("BA3").Resize(100, 18).Value
    '------------------------------------------------------------------------------------------------------'
    .Range("BA3").Resize(K, 18).Sort Key1:=.Range("BQ3"), Order1:=xlDescending
    .Range("D106").Resize(100, 18).Value = .Range("BA3").Resize(100, 18).Value
    .Range("BA3").Resize(K, 18).ClearContents
End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Đọc theo từng chữ trong "đám rừng" ở bài #1, rồi viết theo từng chữ ... chưa nghĩ đến "túm gọn nó".
Híc! Hai trong 1:
PHP:
Public Sub High_Stock()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long
With Sheets("GPE")
    sArr = .Range("A2", .Range("A2").End(xlDown)).Resize(, 18).Value
    R = UBound(sArr): ReDim dArr(1 To R, 1 To 18)
End With
    For I = 2 To R
        If Mid(sArr(I, 2), 3, 2) <> "03" And Mid(sArr(I, 2), 3, 2) <> "05" Then
            K = K + 1
            For J = 1 To 18
                dArr(K, J) = sArr(I, J)
            Next J
        End If
    Next I
With Sheets("HIGH STOCK")
    .Range("BA3").Resize(K, 18) = dArr
    .Range("BA3").Resize(K, 18).Sort Key1:=.Range("BK3"), Order1:=xlDescending
    .Range("D3").Resize(100, 18).Value = .Range("BA3").Resize(100, 18).Value
    '------------------------------------------------------------------------------------------------------'
    .Range("BA3").Resize(K, 18).Sort Key1:=.Range("BQ3"), Order1:=xlDescending
    .Range("D106").Resize(100, 18).Value = .Range("BA3").Resize(100, 18).Value
    .Range("BA3").Resize(K, 18).ClearContents
End With
End Sub
Code ra đúng rồi Bác ơi, Vậy làm tiếp sheet SAOA Bác nhé!
Chúc Bác bữa trưa ngon miệng!
 
Upvote 0
Code ra đúng rồi Bác ơi, Vậy làm tiếp sheet SAOA Bác nhé!
Chúc Bác bữa trưa ngon miệng!
Đến sheet này thì "đớ lưỡi" rồi.
"Cột N(Awating): dựa vào kết quả bên sheet Awating dùng hàm sumif để tính dựa vào điều kiện cột BARCODE."
Sheet Awaiting, cột nào là BARCODE, cột nào là SumIf?
 
Upvote 0
Đến sheet này thì "đớ lưỡi" rồi.
"Cột N(Awating): dựa vào kết quả bên sheet Awating dùng hàm sumif để tính dựa vào điều kiện cột BARCODE."
Sheet Awaiting, cột nào là BARCODE, cột nào là SumIf?[/QUOTE
Trong sheet Awating. Vùng điều kiện: Cột TILLCODE(Cột O), Điều kiện: Cột BARCODE(Cột B ở Sheet SAOA), Vùng Tính Tổng: Cột Q(OdrQty) nên sử dụng hàm Sumif đó Bác.

Em gửi file em làm bằng tay.(ở cột AWATING)

Em cảm ơn Bác nhiều!
 

File đính kèm

Upvote 0
Trong sheet Awating. Vùng điều kiện: Cột TILLCODE(Cột O), Điều kiện: Cột BARCODE(Cột B ở Sheet SAOA), Vùng Tính Tổng: Cột Q(OdrQty) nên sử dụng hàm Sumif đó Bác.
File trước thì cột O là "ITEMNAME", cột Q là "Tbd"/ Chắc chết.
Yêu cầu như trên với cái công thức trong cột Awaiting có "ăn nhậu gì đâu Trời?
PHP:
=SUMIF(Awaiting!N2:P1905;SAOA!B2;Awaiting!P2:P1905)
Chỗ nào lấy cột Q?
Nhìn công thức đã thấy quái chiêu, không hiểu rồi. Thà đừng có công thức.
Mỗi lần bạn "giỡn" một chút, oải quá!
 
Lần chỉnh sửa cuối:
Upvote 0
Yêu cầu như trên với cái công thức trong cột Awaiting có "ăn nhậu gì đâu Trời?
PHP:
=SUMIF(Awaiting!N2:P1905;SAOA!B2;Awaiting!P2:P1905)
Chỗ nào lấy cột Q?
Nhìn công thức đã thấy quái chiêu, không hiểu rồi. Thà đừng có công thức.
=SUMIF(Awaiting!O2:O1905,SAOA!B2,Awaiting!Q2:Q1905
Công thức em lấy nhầm cột Bác ơi. Công thức em đó là đúng, cột Q(trong sheet Awating là những số lượng đang chờ giao đó Bác, (vì trong một tháng có nhiều sản phẩm đang chờ giao hàng nên trường hợp này em dùng hàm Sumif)
Em chúc Bác buổi tối vui.
 
Upvote 0
File trước thì cột O là "ITEMNAME", cột Q là "Tbd"/ Chắc chết.
"Công thức em lấy nhầm cột Bác ơi"
Mỗi lần bạn "giỡn" một chút/ Oải quá!
 
Upvote 0
File trước thì cột O là "ITEMNAME", cột Q là "Tbd"/ Chắc chết.
"Công thức em lấy nhầm cột Bác ơi"
Mỗi lần bạn "giỡn" một chút/ Oải quá!
Em có gửi lại file #30 đó Bác.
dạ, em không có giỡn bác đâu tại em làm nhanh quá nên khi xảy ra vấn đề mới vỡ lẽ đó Bác.
Cột Q là OrdQty mà Bác. Cột điều kiện là cột O(TILLCODE)

Em cảm ơn Bác nhiều.
 
Upvote 0
Em có gửi lại file #30 đó Bác.
dạ, em không có giỡn bác đâu tại em làm nhanh quá nên khi xảy ra vấn đề mới vỡ lẽ đó Bác.
Cột Q là OrdQty mà Bác. Cột điều kiện là cột O(TILLCODE)

Em cảm ơn Bác nhiều.
Bạn lại thích "giỡn" nữa. Từ đầu tôi làm giúp bạn là theo bài bạn gởi ở bài #7".
Bài #30 là mới gởi, có sai các tiêu đề cột với bài trước! Mở file bạn gởi ở bài #7 xem. Bạn vẫn chưa nhận sai! Chẳng hiểu sao tôi lại dính với bài này!
 
Upvote 0
Bạn lại thích "giỡn" nữa. Từ đầu tôi làm giúp bạn là theo bài bạn gởi ở bài #7".
Bài #30 là mới gởi, có sai các tiêu đề cột với bài trước! Mở file bạn gởi ở bài #7 xem. Bạn vẫn chưa nhận sai! Chẳng hiểu sao tôi lại dính với bài này!
Dạ, lỗi này là do em , em xin nhận sai lỗi này,

Bác đừng giận em, mong bác tha lỗi cho em,
 
Upvote 0
Dạ, lỗi này là do em , em xin nhận sai lỗi này,

Bác đừng giận em, mong bác tha lỗi cho em,
Trước khi viết yêu cầu và giải thích, nên đọc kỹ, dò kỹ lại từng chữ, từng tiêu đề, từng cột....
Vì không phải cùng ngành với bạn mà mọi người đều hiểu kiểu viết tắt hay "như trước" của bạn.
Ở quê tui thì những người "tăm hơ tăm hất" còn gọi là "bòng chanh bóc chách".
PHP:
Public Sub S_SAOA()
Dim Dic As Object, GPE As Object, Await As Object, sArr(), dArr(), tArr(), I As Long, K As Long, R As Long, Tem As String
Set Dic = CreateObject("Scripting.Dictionary")
Set GPE = CreateObject("Scripting.Dictionary")
Set Await = CreateObject("Scripting.Dictionary")
With Sheets("Oder dass")
    tArr = .Range("E2", .Range("E2").End(xlDown)).Resize(, 6).Value
    R = UBound(tArr)
    For I = 1 To R
        Dic.Item(tArr(I, 1)) = I
    Next I
End With
'---------------------------------
With Sheets("GPE")
    sArr = .Range("C2", .Range("C2").End(xlDown)).Resize(, 10).Value
    R = UBound(sArr)
    For I = 1 To R
        GPE.Item(sArr(I, 1)) = sArr(I, 9)
        GPE.Item(sArr(I, 2)) = sArr(I, 9)
    Next I
End With
'---------------------------------
With Sheets("Awaiting")
    sArr = .Range("O2", .Range("Q2").End(xlDown)).Value
    R = UBound(sArr)
    For I = 1 To R
        Await.Item(sArr(I, 1)) = Await.Item(sArr(I, 1)) + sArr(I, 3)
    Next I
End With
'-------------------
With Sheets("SAOA")
    sArr = .Range("B2", .Range("B2").End(xlDown)).Value
    R = UBound(sArr): ReDim dArr(1 To R, 1 To 4)
    For I = 1 To R
        If Dic.Exists(sArr(I, 1)) Then
            dArr(I, 1) = tArr(Dic.Item(sArr(I, 1)), 5)
            dArr(I, 2) = tArr(Dic.Item(sArr(I, 1)), 6)
        Else
            dArr(I, 1) = "#/#": dArr(I, 2) = "#/#"
        End If
        If GPE.Exists(sArr(I, 1)) Then
            dArr(I, 3) = GPE.Item(sArr(I, 1))
        Else
            dArr(I, 3) = "#/#"
        End If
        dArr(I, 4) = 0
        If Await.Exists(sArr(I, 1)) Then
            dArr(I, 4) = Await.Item(sArr(I, 1))
        End If
    Next I
    .Range("K2").Resize(I - 1, 4) = dArr
End With
End Sub
Viết "tía lia" chứ chưa xem lại để "túm gọn", chừng nào đúng tính sau.
 
Upvote 0
Trước khi viết yêu cầu và giải thích, nên đọc kỹ, dò kỹ lại từng chữ, từng tiêu đề, từng cột....
Vì không phải cùng ngành với bạn mà mọi người đều hiểu kiểu viết tắt hay "như trước" của bạn.
Ở quê tui thì những người "tăm hơ tăm hất" còn gọi là "bòng chanh bóc chách".
PHP:
Public Sub S_SAOA()
Dim Dic As Object, GPE As Object, Await As Object, sArr(), dArr(), tArr(), I As Long, K As Long, R As Long, Tem As String
Set Dic = CreateObject("Scripting.Dictionary")
Set GPE = CreateObject("Scripting.Dictionary")
Set Await = CreateObject("Scripting.Dictionary")
With Sheets("Oder dass")
    tArr = .Range("E2", .Range("E2").End(xlDown)).Resize(, 6).Value
    R = UBound(tArr)
    For I = 1 To R
        Dic.Item(tArr(I, 1)) = I
    Next I
End With
'---------------------------------
With Sheets("GPE")
    sArr = .Range("C2", .Range("C2").End(xlDown)).Resize(, 10).Value
    R = UBound(sArr)
    For I = 1 To R
        GPE.Item(sArr(I, 1)) = sArr(I, 9)
        GPE.Item(sArr(I, 2)) = sArr(I, 9)
    Next I
End With
'---------------------------------
With Sheets("Awaiting")
    sArr = .Range("O2", .Range("Q2").End(xlDown)).Value
    R = UBound(sArr)
    For I = 1 To R
        Await.Item(sArr(I, 1)) = Await.Item(sArr(I, 1)) + sArr(I, 3)
    Next I
End With
'-------------------
With Sheets("SAOA")
    sArr = .Range("B2", .Range("B2").End(xlDown)).Value
    R = UBound(sArr): ReDim dArr(1 To R, 1 To 4)
    For I = 1 To R
        If Dic.Exists(sArr(I, 1)) Then
            dArr(I, 1) = tArr(Dic.Item(sArr(I, 1)), 5)
            dArr(I, 2) = tArr(Dic.Item(sArr(I, 1)), 6)
        Else
            dArr(I, 1) = "#/#": dArr(I, 2) = "#/#"
        End If
        If GPE.Exists(sArr(I, 1)) Then
            dArr(I, 3) = GPE.Item(sArr(I, 1))
        Else
            dArr(I, 3) = "#/#"
        End If
        dArr(I, 4) = 0
        If Await.Exists(sArr(I, 1)) Then
            dArr(I, 4) = Await.Item(sArr(I, 1))
        End If
    Next I
    .Range("K2").Resize(I - 1, 4) = dArr
End With
End Sub
Viết "tía lia" chứ chưa xem lại để "túm gọn", chừng nào đúng tính sau.
Code ra đúng rồi Bác ơi, có cách nào tóm gọn lại được không Bác? Vì code của Bác vào dữ liệu thật của em là treo máy luôn.

Em cảm ơn Bác nhiều!
 
Upvote 0
Code ra đúng rồi Bác ơi, có cách nào tóm gọn lại được không Bác? Vì code của Bác vào dữ liệu thật của em là treo máy luôn.

Em cảm ơn Bác nhiều!
Máy tôi "quay quay" 1 giây là xong mà.
Sheet GPE 33257 dòng
Oder dass 22721 dòng
Awaiting 1905 dòng
SAOA 15123 dòng
Tổng file 15MB
 
Upvote 0
Máy tôi "quay quay" 1 giây là xong mà.
Sheet GPE 33257 dòng
Oder dass 22721 dòng
Awaiting 1905 dòng
SAOA 15123 dòng
Chắc tại máy em đó Bác, em toàn dùng người ta cho em không Bác
Bác làm tiếp Bác nhé!
Sheet SAOA STOCK AVAILBLE: Chọn cột STOCK bên Sheet SAOA các giá trị lớn hơn 0. rồi copy tất cả dữ rồi dán vào sheet SAOA STOCK AVAILBLE ở ô A2.

Em cảm ơn Bác nhiều!
 
Upvote 0
Chắc tại máy em đó Bác, em toàn dùng người ta cho em không Bác
Bác làm tiếp Bác nhé!
Sheet SAOA STOCK AVAILBLE: Chọn cột STOCK bên Sheet SAOA các giá trị lớn hơn 0. rồi copy tất cả dữ rồi dán vào sheet SAOA STOCK AVAILBLE ở ô A2.

Em cảm ơn Bác nhiều!
Chú ý: các code sau này tôi không dùng "#N/A" cho kết quả, mà dùng "#/#". Bạn phải chỉnh lại Sub chạy cho sheet GPE luôn đi, để "#N/A" là lỗi của Excel khó chịu lắm.
PHP:
Public Sub SAOA_AVA()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long
With Sheets("SAOA")
    sArr = .Range("a2", .Range("a2").End(xlDown)).Resize(, 14).Value
    R = UBound(sArr): ReDim dArr(1 To R, 1 To 14)
End With
For I = 1 To R
    If Val(sArr(I, 13)) > 0 Then
        K = K + 1
        For J = 1 To 14
            dArr(K, J) = sArr(I, J)
        Next J
    End If
Next I
With Sheets("SAOA stock available")
    .Range("A2").Resize(10000, 15).ClearContents
    .Range("A2").Resize(K, 14) = dArr
End With
End Sub
 
Upvote 0
Chú ý: các code sau này tôi không dùng "#N/A" cho kết quả, mà dùng "#/#". Bạn phải chỉnh lại Sub chạy cho sheet GPE luôn đi, để "#N/A" là lỗi của Excel khó chịu lắm.
PHP:
Public Sub SAOA_AVA()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long
With Sheets("SAOA")
    sArr = .Range("a2", .Range("a2").End(xlDown)).Resize(, 14).Value
    R = UBound(sArr): ReDim dArr(1 To R, 1 To 14)
End With
For I = 1 To R
    If Val(sArr(I, 13)) > 0 Then
        K = K + 1
        For J = 1 To 14
            dArr(K, J) = sArr(I, J)
        Next J
    End If
Next I
With Sheets("SAOA stock available")
    .Range("A2").Resize(10000, 15).ClearContents
    .Range("A2").Resize(K, 14) = dArr
End With
End Sub
Dạ em đã chỉnh lại rồi Bác ơi, Đúng là nhìn khó chịu thật.
Sheet SAOA NON STOCK: Chọn cột STOCK bên Sheet SAOA các giá trị bằng 0 rồi copy tất cả dữliệu rồi dán vào sheet SAOA NON STOCK ở ô A2.
Chọn cột STOCK (ở sheet SAOA) là các giá trị lỗi #NA, rồi copy dán vào sheet SAOA NON STOCK ở dòng kế tiếp(Dòng kế tiếp ở đây là những giá trị Bằng 0 khi copy xong, và những giá trị lỗi sẽ nằm kế tiếp.

Em cảm ơn Bác nhiều!
 
Upvote 0
Upvote 0
Dạ em đã chỉnh lại rồi Bác ơi, Đúng là nhìn khó chịu thật.
Sheet SAOA NON STOCK: Chọn cột STOCK bên Sheet SAOA các giá trị bằng 0 rồi copy tất cả dữliệu rồi dán vào sheet SAOA NON STOCK ở ô A2.
Chọn cột STOCK (ở sheet SAOA) là các giá trị lỗi #NA, rồi copy dán vào sheet SAOA NON STOCK ở dòng kế tiếp(Dòng kế tiếp ở đây là những giá trị Bằng 0 khi copy xong, và những giá trị lỗi sẽ nằm kế tiếp.

Em cảm ơn Bác nhiều!
Chỉnh sao cho không còn "#N/A", chỉ lọc "#/#" thôi nhé.
PHP:
Public Sub SAOA_NON()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long
With Sheets("SAOA")
    sArr = .Range("a2", .Range("a2").End(xlDown)).Resize(, 14).Value
    R = UBound(sArr): ReDim dArr(1 To R, 1 To 14)
End With
For I = 1 To R
    If sArr(I, 13) = 0 Then
        K = K + 1
        For J = 1 To 14
            dArr(K, J) = sArr(I, J)
        Next J
    End If
Next I
For I = 1 To R
    If CStr(sArr(I, 13)) = "#/#" Then
        K = K + 1
        For J = 1 To 14
            dArr(K, J) = sArr(I, J)
        Next J
    End If
Next I
With Sheets("SAOA non stock")
    .Range("A2").Resize(10000, 15).ClearContents
    .Range("A2").Resize(K, 14) = dArr
End With
End Sub
Chú ý là SAOA không có cột STOCK, chỉ có Stock 22.10. Đã nhắc là phải viết chính xác tên cột, không viết tắt được.
 
Lần chỉnh sửa cuối:
Upvote 0
Thì Bác quá nhiệt tình luôn Anh, Trình VBA của Bác quá đỉnh, Bác làm từng code em học hỏi nhưng có hiểu chút ít.
Em có đọc về dic nhưng chưa hiểu lắm, có gì em sẽ hỏi Bác và Anh.

Chúc Anh buổi tối vui.
 
Upvote 0
Thì Bác quá nhiệt tình luôn Anh, Trình VBA của Bác quá đỉnh, Bác làm từng code em học hỏi nhưng có hiểu chút ít.
Không nên nói người khác như vậy. Trên đời này không ai dám nhận mình là "đỉnh" đâu.
Núi nầy còn có núi khác cao hơn, huống chi con người chưa chắc cao hơn cái "gò ...".
 
Upvote 0
Không nên nói người khác như vậy. Trên đời này không ai dám nhận mình là "đỉnh" đâu.
Núi nầy còn có núi khác cao hơn, huống chi con người chưa chắc cao hơn cái "gò".
Dạ, đúng rồi Bác, tại vì em ngưỡng mộ Bác quá, chưa tới mấy giây mà Bác đã cho những code mới.
mà Bác ơi, em có ý kiến thế này, quê em có loại rượu nếp đỏ rất là ngon, Em biếu Bác được không?

Em cảm ơn Bác nhiều!
 
Upvote 0
Chỉnh sao cho không còn "#N/A", chỉ lọc "#/#" thôi nhé.
PHP:
Public Sub SAOA_NON()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long
With Sheets("SAOA")
    sArr = .Range("a2", .Range("a2").End(xlDown)).Resize(, 14).Value
    R = UBound(sArr): ReDim dArr(1 To R, 1 To 14)
End With
For I = 1 To R
    If sArr(I, 13) = 0 Then
        K = K + 1
        For J = 1 To 14
            dArr(K, J) = sArr(I, J)
        Next J
    End If
Next I
For I = 1 To R
    If CStr(sArr(I, 13)) = "#/#" Then
        K = K + 1
        For J = 1 To 14
            dArr(K, J) = sArr(I, J)
        Next J
    End If
Next I
With Sheets("SAOA non stock")
    .Range("A2").Resize(10000, 15).ClearContents
    .Range("A2").Resize(K, 14) = dArr
End With
End Sub
Chú ý là SAOA không có cột STOCK, chỉ có Stock 22.10. Đã nhắc là phải viết chính xác tên cột, không viết tắt được.
Dạ, code chạy ra đúng rồi Bác ơi. Tối hôm nay dừng ở đây Bác nhé,làm tiếp Bác nhé!
Thôi khuya rồi em chúc Bác ngủ ngon.
 
Upvote 0
Dạ, đúng rồi Bác, tại vì em ngưỡng mộ Bác quá, chưa tới mấy giây mà Bác đã cho những code mới.
mà Bác ơi, em có ý kiến thế này, quê em có loại rượu nếp đỏ rất là ngon, Em biếu Bác được không?

Em cảm ơn Bác nhiều!
Rượu có "nguồn gốc", có bảo hành "không sỉn" là được. Nhưng "mần sao" mà uống?
Híc! Tiếp cho xong chuyện này đi. Mai tôi bận 3 ngày rồi.
 
Upvote 0
Rượu có "nguồn gốc", có bảo hành "không sỉn" là được. Nhưng "mần sao" mà uống?
Híc! Tiếp cho xong chuyện này đi. Mai tôi bận 3 ngày rồi.
Dạ, rượu em làm từ làng nghề truyền thống Bác ơi, có nguồn gốc, Bác cho em địa chỉ nhà em gửi xuống nhà Bác, xem như là món quà quê hương em
Vậy làm tiếp sheet RUPTURE Bác nhé!
Sheet Ruptute: dùng công thức dò bên sheet SAOA kết hợp Sheet GPE dùng Vlookup(Cột BARCODE,(ở sheet GPE),bảng dò (kết quả ở cột E(FGR),3,0) rôi lọc lấy những giá trị là số (rồi copy tất cả dữ liệu thảo mãn vào sheet RUPTURE(lấy cả tên tiêu đề).
 
Upvote 0
Sheet Ruptute: dùng công thức dò bên sheet SAOA kết hợp Sheet GPE dùng Vlookup(Cột BARCODE,(ở sheet GPE),bảng dò (kết quả ở cột E(FGR),3,0) rôi lọc lấy những giá trị là số (rồi copy tất cả dữ liệu thảo mãn vào sheet RUPTURE(lấy cả tên tiêu đề).
Không hiểu rồi. Bạn tự đọc và suy ngẫm xem người khác có thể hiểu không, chứ tôi thì thua. Thôi để 3 ngày sau nếu chưa có người giúp thì tôi tiếp.
Mai phải "cởi Trâu" đi đi hơn 200km. Nghỉ thôi.
Quà thì chưa dám nhận.
Chúc bạn ngủ ngon.
 
Upvote 0
Không hiểu rồi. Bạn tự đọc và suy ngẫm xem người khác có thể hiểu không, chứ tôi thì thua. Thôi để 3 ngày sau nếu chưa có người giúp thì tôi tiếp.
Mai phải "cởi Trâu" đi đi hơn 200km. Nghỉ thôi.
Quà thì chưa dám nhận.
Chúc bạn ngủ ngon.
Dạ em cũng chúc Bác ngủ ngon.
Một lần nữa em cảm ơn Bác nhiều!@
 
Upvote 0
Dạ, rượu em làm từ làng nghề truyền thống Bác ơi, có nguồn gốc, Bác cho em địa chỉ nhà em gửi xuống nhà Bác, xem như là món quà quê hương em
Vậy làm tiếp sheet RUPTURE Bác nhé!
Sheet Ruptute: dùng công thức dò bên sheet SAOA kết hợp Sheet GPE dùng Vlookup(Cột BARCODE,(ở sheet GPE),bảng dò (kết quả ở cột E(FGR),3,0) rôi lọc lấy những giá trị là số (rồi copy tất cả dữ liệu thảo mãn vào sheet RUPTURE(lấy cả tên tiêu đề).
3 ngày rồi mà chưa có người giúp, bạn vẫn chưa giải thích rõ cách lấy dữ liệu.
Bạn xóa cái giải thích màu đỏ trên đi. Viết lại cho người khác hiểu xem sao.
 
Upvote 0
3 ngày rồi mà chưa có người giúp, bạn vẫn chưa giải thích rõ cách lấy dữ liệu.
Bạn xóa cái giải thích màu đỏ trên đi. Viết lại cho người khác hiểu xem sao.
Dạ mấy ngày nay em bận đi công tác bác ơi, trưa em về em diễn giải và em gửi file cho Bác,

Em cảm ơn Bác.
 
Upvote 0
3 ngày rồi mà chưa có người giúp, bạn vẫn chưa giải thích rõ cách lấy dữ liệu.
Bạn xóa cái giải thích màu đỏ trên đi. Viết lại cho người khác hiểu xem sao.
Bác ơi nhờ Bác giúp em 2 sheet này nữa(sheet TOP 30, Sheet Negatif Margin)
sheet RUPTUTE(em có làm công thức trong sheet GPE ở cột GHI CHÚ.)(lọc những giá trị số rồi copy dữ liệu của sheet GPE rồi dán vào ô D2(sheet RUPTURE)
sheet TOP 30:
TOP 30 SẢN PHẨM CHẠY THEO SỐ LƯỢNG.
lọc cột E(Sale Qty) ở sheet SALE DETAIL từ cao đến thấp rồi copy 30 dòng rồi dán vào ô A3(sheet TOP 30)
TOP 30 SẢN PHẨM CHẠY THEO GIÁ TRỊ
Lọc cột F(SALES(TO)ở sheet SALE DETAIL từ cao đến thấp rồi copy 30 dòng rồi dán vào ô A35(sheet TOP 30)
sheet Negatif Margin(lọc cột K(Margin%) ở sheet SALE DETAIL giá trị nhỏ hơn 0 rồi copy dữ liệu dán vào ô A2.(sheet SALE DETAIL)
ở cột K(Margin%) ở sheet RUTURE sắp xếp từ cao đến thấp rồi định dạng 10 giá trị thấp nhấ(BOTTOM 10) định dạng màu đỏ.

Em cảm ơn Bác nhiều!
 

File đính kèm

Upvote 0
sheet RUPTUTE(em có làm công thức trong sheet GPE ở cột GHI CHÚ.)(lọc những giá trị số rồi copy dữ liệu của sheet GPE rồi dán vào ô D2(sheet RUPTURE)
Chạy thử cái này cho file cũ, cái khác tính sau.
PHP:
Public Sub S_Rupture()
Dim Dic As Object, sArr(), dArr(), I As Long, J As Long, K As Long, R As Long
Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("GPE")
    sArr = .Range("D3", .Range("D1000000").End(xlUp)).Value
    R = UBound(sArr): ReDim dArr(1 To R, 1 To 14)
End With
For I = 1 To R
    If Not Dic.Exists(sArr(I, 1)) Then Dic.Item(sArr(I, 1)) = ""
Next I
With Sheets("SAOA")
    sArr = .Range("A2", .Range("A2").End(xlDown)).Resize(, 14).Value
    R = UBound(sArr)
End With
For I = 1 To R
    If Dic.Exists(sArr(I, 2)) Then
        K = K + 1
        For J = 1 To 14
            dArr(K, J) = sArr(I, J)
        Next J
    End If
Next I
With Sheets("RUPTURE")
    .Range("A2:A10000").Resize(, 14).ClearContents
    .Range("A2").Resize(K, 14) = dArr
End With
Set Dic = Nothing
End Sub
Xong file trước. Dữ liệu 16MB.
File mới "lạ hoắc" không có trong "bộ nhớ" của tôi.
Để riêng đó tính sau
 
Lần chỉnh sửa cuối:
Upvote 0
Chạy thử cái này, cái khác tính sau.
PHP:
Public Sub S_Rupture()
Dim Dic As Object, sArr(), dArr(), I As Long, J As Long, K As Long, R As Long
Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("GPE")
    sArr = .Range("D3", .Range("D1000000").End(xlUp)).Value
    R = UBound(sArr): ReDim dArr(1 To R, 1 To 14)
End With
For I = 1 To R
    If Not Dic.Exists(sArr(I, 1)) Then Dic.Item(sArr(I, 1)) = ""
Next I
With Sheets("SAOA")
    sArr = .Range("A2", .Range("A2").End(xlDown)).Resize(, 14).Value
    R = UBound(sArr)
End With
For I = 1 To R
    If Dic.Exists(sArr(I, 2)) Then
        K = K + 1
        For J = 1 To 14
            dArr(K, J) = sArr(I, J)
        Next J
    End If
Next I
With Sheets("RUPTURE")
    .Range("A2:A10000").Resize(, 14).ClearContents
    .Range("A2").Resize(K, 14) = dArr
End With
Set Dic = Nothing
End Sub
Xong file trước. Dữ liệu 16MB.
File mới "lạ hoắc" không có trong "bộ nhớ" của tôi.
Để riêng đó tính sau
Nhờ Bác kiểm tra giúp em, nó lấy bị lệch dòng Bác . ở sheet RUPTURE.
Code Bác lấy ở sheet SAOA copy qua chứ không phải sheet GPE.nên xảy ra lấy sẽ bị lệch dòng.
ý em là copy những giá trị số thõa mãn ở sheet GPE sang Sheet Rupture.
Nhờ Bác chỉnh sửa code ở sheet HIGH STOCK ở cột CODE, BARCODE là dạng text, em dịnh dạng text rồi nhưng khi chạy code ra dạng số khoa học,.

Em cảm ơn Bác nhiều!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Nhờ Bác kiểm tra giúp em, nó lấy bị lệch dòng Bác . ở sheet RUPTURE.
Code Bác lấy ở sheet SAOA copy qua chứ không phải sheet GPE.nên xảy ra lấy sẽ bị lệch dòng.
ý em là copy những giá trị số thõa mãn ở sheet GPE sang Sheet Rupture.
Nhờ Bác chỉnh sửa code ở sheet HIGH STOCK ở cột CODE, BARCODE là dạng text, em dịnh dạng text rồi nhưng khi chạy code ra dạng số khoa học,.

Em cảm ơn Bác nhiều!
PHP:
Public Sub High_Stock()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long
With Sheets("GPE")
    sArr = .Range("A2", .Range("A2").End(xlDown)).Resize(, 18).Value
    R = UBound(sArr): ReDim dArr(1 To R, 1 To 18)
End With
    For I = 2 To R
        If Mid(sArr(I, 2), 3, 2) <> "03" And Mid(sArr(I, 2), 3, 2) <> "05" Then
            K = K + 1
            For J = 1 To 18
                dArr(K, J) = sArr(I, J)
            Next J
            dArr(K, 4) = "'" & sArr(I, 4)
        End If
    Next I
With Sheets("HIGH STOCK")
    .Columns("BA:BR").NumberFormat = "@"
    .Range("BA3").Resize(K, 18) = dArr
    .Range("BA3").Resize(K, 18).Sort Key1:=.Range("BK3"), Order1:=xlDescending
    .Range("D3").Resize(100, 18).Value = .Range("BA3").Resize(100, 18).Value
    '---------------------------------
    .Range("BA3").Resize(K, 18).Sort Key1:=.Range("BQ3"), Order1:=xlDescending
    .Range("D106").Resize(100, 18).Value = .Range("BA3").Resize(100, 18).Value
    .Range("BA3").Resize(K, 18).ClearContents
End With
End Sub
PHP:
Public Sub S_Rupture()
Dim Dic As Object, sArr(), dArr(), tArr(), I As Long, J As Long, K As Long, R As Long, Rws As Long
Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("SAOA")
    tArr = .Range("A2", .Range("A2").End(xlDown)).Resize(, 14).Value2
    R = UBound(tArr): ReDim dArr(1 To R, 1 To 21)
    For I = 1 To R
        If Not Dic.Exists(tArr(I, 2)) Then Dic.Item(tArr(I, 2)) = I
    Next I
End With
With Sheets("GPE")
    sArr = .Range("A3", .Range("A1000000").End(xlUp)).Resize(, 18).Value2
    R = UBound(sArr)
    For I = 1 To R
        If Dic.Exists(sArr(I, 4)) Then
            K = K + 1: Rws = Dic.Item(sArr(I, 4))
            dArr(K, 1) = tArr(Rws, 3): dArr(K, 2) = tArr(Rws, 4): dArr(K, 3) = tArr(Rws, 6)
            For J = 1 To 18
                dArr(K, J + 3) = sArr(I, J)
            Next J
        End If
    Next I
End With
With Sheets("RUPTURE")
    .Range("A2:A100000").Resize(, 21).ClearContents
    .Range("A2").Resize(K, 21) = dArr
End With
Set Dic = Nothing
End Sub
 
Upvote 0
PHP:
Public Sub High_Stock()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long
With Sheets("GPE")
    sArr = .Range("A2", .Range("A2").End(xlDown)).Resize(, 18).Value
    R = UBound(sArr): ReDim dArr(1 To R, 1 To 18)
End With
    For I = 2 To R
        If Mid(sArr(I, 2), 3, 2) <> "03" And Mid(sArr(I, 2), 3, 2) <> "05" Then
            K = K + 1
            For J = 1 To 18
                dArr(K, J) = sArr(I, J)
            Next J
            dArr(K, 4) = "'" & sArr(I, 4)
        End If
    Next I
With Sheets("HIGH STOCK")
    .Columns("BA:BR").NumberFormat = "@"
    .Range("BA3").Resize(K, 18) = dArr
    .Range("BA3").Resize(K, 18).Sort Key1:=.Range("BK3"), Order1:=xlDescending
    .Range("D3").Resize(100, 18).Value = .Range("BA3").Resize(100, 18).Value
    '---------------------------------
    .Range("BA3").Resize(K, 18).Sort Key1:=.Range("BQ3"), Order1:=xlDescending
    .Range("D106").Resize(100, 18).Value = .Range("BA3").Resize(100, 18).Value
    .Range("BA3").Resize(K, 18).ClearContents
End With
End Sub
PHP:
Public Sub S_Rupture()
Dim Dic As Object, sArr(), dArr(), tArr(), I As Long, J As Long, K As Long, R As Long, Rws As Long
Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("SAOA")
    tArr = .Range("A2", .Range("A2").End(xlDown)).Resize(, 14).Value2
    R = UBound(tArr): ReDim dArr(1 To R, 1 To 21)
    For I = 1 To R
        If Not Dic.Exists(tArr(I, 2)) Then Dic.Item(tArr(I, 2)) = I
    Next I
End With
With Sheets("GPE")
    sArr = .Range("A3", .Range("A1000000").End(xlUp)).Resize(, 18).Value2
    R = UBound(sArr)
    For I = 1 To R
        If Dic.Exists(sArr(I, 4)) Then
            K = K + 1: Rws = Dic.Item(sArr(I, 4))
            dArr(K, 1) = tArr(Rws, 3): dArr(K, 2) = tArr(Rws, 4): dArr(K, 3) = tArr(Rws, 6)
            For J = 1 To 18
                dArr(K, J + 3) = sArr(I, J)
            Next J
        End If
    Next I
End With
With Sheets("RUPTURE")
    .Range("A2:A100000").Resize(, 21).ClearContents
    .Range("A2").Resize(K, 21) = dArr
End With
Set Dic = Nothing
End Sub
Đối với sheet HIGH STOCK ra đúng rồi Bác ơi.(Vây trong code Bác có dòng này:
.Columns("BA:BR").NumberFormat = "@"(mà trong sheet HIGH STOCK dữ liệu ở cột này không có nhờ Bác giải thích giúp em hiểu.
Còn đối với sheet Rupture code Bác có lấy dữ liệu bên sheet GPE dán vào ô D2. em muốn copy rồi dán vào ô D2(3 cột A, B,C là có công thức đó Bác. code Bác lấy như hình.
Em cảm ơn Bác nhiều!
upload_2017-6-21_11-25-5.png
upload_2017-6-21_11-22-26.png
 
Upvote 0
Đối với sheet HIGH STOCK ra đúng rồi Bác ơi.(Vây trong code Bác có dòng này:
.Columns("BA:BR").NumberFormat = "@"(mà trong sheet HIGH STOCK dữ liệu ở cột này không có nhờ Bác giải thích giúp em hiểu.
Còn đối với sheet Rupture code Bác có lấy dữ liệu bên sheet GPE dán vào ô D2. em muốn copy rồi dán vào ô D2(3 cột A, B,C là có công thức đó Bác. code Bác lấy như hình.
Em cảm ơn Bác nhiều!
View attachment 177975
View attachment 177974
Công thức 3 cột đó là gì, viết luôn trong code, "ba rọi" nửa code, nửa công thức làm gì?
 
Upvote 0
Upvote 0
Dạ, cột A: Mid(E2,3,2)
Cột B: mid(e2,7,3)
Cột C: mid(e2,15,2)
Ở sheet Rupture đó Bác.
Format các cột Text trước nhé.
PHP:
Public Sub S_Rupture()
Dim Dic As Object, sArr(), dArr(), I As Long, J As Long, K As Long, R As Long
Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("SAOA")
    sArr = .Range("A2", .Range("A2").End(xlDown)).Resize(, 14).Value2
    R = UBound(sArr)
    For I = 1 To R
        If Not Dic.Exists(sArr(I, 2)) Then Dic.Item(sArr(I, 2)) = I
    Next I
End With
With Sheets("GPE")
    sArr = .Range("A3", .Range("A1000000").End(xlUp)).Resize(, 18).Value2
    R = UBound(sArr): ReDim dArr(1 To R, 1 To 21)
    For I = 1 To R
        If Dic.Exists(sArr(I, 4)) Then
            K = K + 1
            For J = 1 To 18
                dArr(K, J + 3) = sArr(I, J)
            Next J
            dArr(K, 1) = Mid(dArr(K, 5), 3, 2)
            dArr(K, 2) = Mid(dArr(K, 5), 7, 3)
            dArr(K, 3) = Mid(dArr(K, 5), 15, 2)
        End If
    Next I
End With
With Sheets("RUPTURE")
    .Range("A2:A100000").Resize(, 21).ClearContents
    .Range("A2").Resize(K, 21) = dArr
End With
Set Dic = Nothing
End Sub
 
Upvote 0
Địa chỉ "chành ành" ở đây nè em trai, làm khó chi?
Địa điểm: Nhà hàng “241”, 45 Phạm Viết Chánh, Nguyễn Cư Trinh, Quận 1, Hồ Chí Minh.


Đọc hiểu chết liền.
Em diễn đạt lại sheet Negatif Margin:
- Lọc cột K(Margin %) ở sheet SALE DETAIL giá trị nhỏ hơn 0, sau đó copy những dòng vừa lọc xong sang sheet Negatif Margin dán vào ô A2.
- dữ liệu vừa dán vào sheet Negatif Margin ở ô A2, tiếp đến sắp xếp cột K từ nhỏ đến lớn.
- định dạng 10 giá trị thấp nhất(BOTTOM 10) là màu đỏ.

Em cảm ơn Bác nhiều!
 
Upvote 0
Em diễn đạt lại sheet Negatif Margin:
- Lọc cột K(Margin %) ở sheet SALE DETAIL giá trị nhỏ hơn 0, sau đó copy những dòng vừa lọc xong sang sheet Negatif Margin dán vào ô A2.
- dữ liệu vừa dán vào sheet Negatif Margin ở ô A2, tiếp đến sắp xếp cột K từ nhỏ đến lớn.
- định dạng 10 giá trị thấp nhất(BOTTOM 10) là màu đỏ.

Em cảm ơn Bác nhiều!
Có lẽ sẽ kết thúc topic với bài #67.
PHP:
Public Sub S_TOP30()
Dim Rng As Range, Rws As Long
With Sheets("SALE DETAIL")
    Rws = .Range("A2").End(xlDown).Row
    .Range("L2:L" & Rws).Value = "=Row()"
    Set Rng = .Range("A2").Resize(Rws, 12)
    Rng.Sort Key1:=.Range("E2"), Order1:=xlDescending
    Sheets("TOP 30").Range("A3:K32").Value = .Range("A2:K31").Value
    '------------------------------------------------------'
    Rng.Sort Key1:=.Range("F2"), Order1:=xlDescending
    Sheets("TOP 30").Range("A35:K64").Value = .Range("A2:K31").Value
    '------------------------------------------------------'
    Rng.Sort Key1:=.Range("L2"), Order1:=xlAscending
    .Range("L2:L" & Rws).ClearContents
End With
End Sub
'------------------------------------------------------------------------------------------------------------'
Public Sub KetThuc()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long
With Sheets("SALE DETAIL")
    sArr = .Range("A2", .Range("A2").End(xlDown)).Resize(, 11).Value
    R = UBound(sArr): ReDim dArr(1 To R, 1 To 11)
End With
For I = 1 To R
    If sArr(I, 11) < 0 Then
        K = K + 1
        For J = 1 To 11
            dArr(K, J) = sArr(I, J)
        Next J
    End If
Next I
With Sheets("Negatif Margin")
    .Range("A2:K11").Font.ColorIndex = 0
    .Range("A2:K100000").ClearContents
    .Range("A2:K2").Resize(K) = dArr
    .Range("A2:K2").Resize(K).Sort Key1:=.Range("K2"), Order1:=xlAscending
    .Range("A2:K11").Font.ColorIndex = 3
End With
End Sub
 
Upvote 0
Có lẽ sẽ kết thúc topic với bài #67.
PHP:
Public Sub S_TOP30()
Dim Rng As Range, Rws As Long
With Sheets("SALE DETAIL")
    Rws = .Range("A2").End(xlDown).Row
    .Range("L2:L" & Rws).Value = "=Row()"
    Set Rng = .Range("A2").Resize(Rws, 12)
    Rng.Sort Key1:=.Range("E2"), Order1:=xlDescending
    Sheets("TOP 30").Range("A3:K32").Value = .Range("A2:K31").Value
    '------------------------------------------------------'
    Rng.Sort Key1:=.Range("F2"), Order1:=xlDescending
    Sheets("TOP 30").Range("A35:K64").Value = .Range("A2:K31").Value
    '------------------------------------------------------'
    Rng.Sort Key1:=.Range("L2"), Order1:=xlAscending
    .Range("L2:L" & Rws).ClearContents
End With
End Sub
'------------------------------------------------------------------------------------------------------------'
Public Sub KetThuc()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long
With Sheets("SALE DETAIL")
    sArr = .Range("A2", .Range("A2").End(xlDown)).Resize(, 11).Value
    R = UBound(sArr): ReDim dArr(1 To R, 1 To 11)
End With
For I = 1 To R
    If sArr(I, 11) < 0 Then
        K = K + 1
        For J = 1 To 11
            dArr(K, J) = sArr(I, J)
        Next J
    End If
Next I
With Sheets("Negatif Margin")
    .Range("A2:K11").Font.ColorIndex = 0
    .Range("A2:K100000").ClearContents
    .Range("A2:K2").Resize(K) = dArr
    .Range("A2:K2").Resize(K).Sort Key1:=.Range("K2"), Order1:=xlAscending
    .Range("A2:K11").Font.ColorIndex = 3
End With
End Sub
Đối với sheet Negatif Margin thì bị lỗi này Bác ơi.
upload_2017-6-22_10-52-4.png
 
Upvote 0

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

Back
Top Bottom