PDA

View Full Version : Tách dữ liệu theo mã số và fill color



LYSM
30-04-13, 03:14 PM
Chào các bác, Em đang muốn lập 1 bảng tách dữ liệu theo mã số và theo fill color. Phần tách theo mã số hiện tại em đã lấy code của bác "Lê Duy Thương" và modify một chút cho phù hợp. Giờ do nhu cầu phát sinh em muốn thêm 1 sheet tách theo fill color, nhờ các bác viết code giúp em với. Lưu ý: em chỉ tách những mã số liên quan đến fill color có mầu đỏ (có thể trong file của em có nhiều màu). Các mã số có fill color màu đỏ vẫn xuất hiện bình thường trong các sheet tách theo mã số.Kính mong các bác giúp đỡ, em cảm ơn các bác nhiều!

nghiaphuc
30-04-13, 09:37 PM
Chào các bác,
Em đang muốn lập 1 bảng tách dữ liệu theo mã số và theo fill color. Phần tách theo mã số hiện tại em đã lấy code của bác "Lê Duy Thương" và modify một chút cho phù hợp. Giờ do nhu cầu phát sinh em muốn thêm 1 sheet tách theo fill color, nhờ các bác viết code giúp em với.
Lưu ý: em chỉ tách những mã số liên quan đến fill color có mầu đỏ (có thể trong file của em có nhiều màu). Các mã số có fill color màu đỏ vẫn xuất hiện bình thường trong các sheet tách theo mã số.
Kính mong các bác giúp đỡ, em cảm ơn các bác nhiều!
Nhìn vào file đính kèm thì biết bạn đang sử dụng Excel 2007 trở lên. Và với các phiên bản này thì bạn có thể lọc theo màu sắc mà. Bạn cứ thử Record macro xem nó ra cái gì.

quanghai1969
30-04-13, 11:59 PM
Chào các bác,
Em đang muốn lập 1 bảng tách dữ liệu theo mã số và theo fill color. Phần tách theo mã số hiện tại em đã lấy code của bác "Lê Duy Thương" và modify một chút cho phù hợp. Giờ do nhu cầu phát sinh em muốn thêm 1 sheet tách theo fill color, nhờ các bác viết code giúp em với.
Lưu ý: em chỉ tách những mã số liên quan đến fill color có mầu đỏ (có thể trong file của em có nhiều màu). Các mã số có fill color màu đỏ vẫn xuất hiện bình thường trong các sheet tách theo mã số.
Kính mong các bác giúp đỡ, em cảm ơn các bác nhiều!

Thử code này xem sao


Sub loc_mau_do()
Dim vung As Range
With Sheets("du lieu vao")
Set vung = .Range(.[A2], .[A65536].End(3)).Resize(, 15)
With vung
.AutoFilter 15, RGB(255, 0, 0), xlFilterCellColor
.SpecialCells(12).Copy Sheets("Thong bao").[B9]
End With
.AutoFilterMode = False
End With
With Sheets("Thong bao")
.Range(.[B10], .[B10].End(4)).Offset(, -1) = [row(a:a)]
End With
End Sub

LYSM
01-05-13, 11:41 AM
Nhìn vào file đính kèm thì biết bạn đang sử dụng Excel 2007 trở lên. Và với các phiên bản này thì bạn có thể lọc theo màu sắc mà. Bạn cứ thử Record macro xem nó ra cái gì.
Cái này em còn gà lắm, bác chỉ giúp em rõ hơn được không?

LYSM
01-05-13, 11:47 AM
Thử code này xem sao


Sub loc_mau_do()
Dim vung As Range
With Sheets("du lieu vao")
Set vung = .Range(.[A2], .[A65536].End(3)).Resize(, 15)
With vung
.AutoFilter 15, RGB(255, 0, 0), xlFilterCellColor
.SpecialCells(12).Copy Sheets("Thong bao").[B9]
End With
.AutoFilterMode = False
End With
With Sheets("Thong bao")
.Range(.[B10], .[B10].End(4)).Offset(, -1) = [row(a:a)]
End With
End Sub


Phần cột O em muốn tách các mã số của chính cột đó được bôi màu đỏ mà không liên quan gì đến vùng dữ liệu từ cột A-N, tóm lại là vùng dữ liệu của em chia làm 2 phần độc lập cần tách. Bác xem lại file đính kèm giúp em nhé.
Thêm nữa bác có thể gắn luôn code vào file giúp em được không? khi em copy code của bác vào nó sẽ ra 1 macro mới là "loc_mau_do" khi đó em nhấn vào buton "RUN" nó không chạy, phải gán lại macro cho nó. Em muốn khí nhấn "RUN" nó chạy đồng thời cả macro "TACH" và "loc_mau_do" của bác. Em gà về VBA lắm nên rất mong bác giúp thì giúp cho chót :)
Em cảm ơn bác nhiều!

hoamattroicoi
01-05-13, 12:11 PM
Cái này em còn gà lắm, bác chỉ giúp em rõ hơn được không?

Vậy xin hỏi bạn biết cách lọc dữ liệu theo màu bằng Auto Filter trong Excel 2007 không?

LYSM
01-05-13, 12:16 PM
Vậy xin hỏi bạn biết cách lọc dữ liệu theo màu bằng Auto Filter trong Excel 2007 không?
Em chỉ biết lọc thủ công bằng cách ấn tổ hợp ctrl+shift+L thôi bác. Macro em gần như không biết gì :) nhưng bảng dữ liệu của em mỗi ngày thì dữ liệu lại nhiều thêm và mỗi ngày 1 người làm nên dùng VBA là hợp lý nhất bác ạ. Vài lời chia sẻ để bác thông cảm

quanghai1969
01-05-13, 12:30 PM
Bác ơi, vùng dữ liệu từ cột A-N em muốn tách các mã số theo các chỉ tiêu %béo, SNF có màu đỏ mà không liên quan gì đến cột O. Phần cột O em muốn tách các mã số của chính cột đó được bôi màu đỏ mà không liên quan gì đến vùng dữ liệu từ cột A-N, tóm lại là vùng dữ liệu của em chia làm 2 phần độc lập cần tách. Bác xem lại file đính kèm giúp em nhé.
Thêm nữa bác có thể gắn luôn code vào file giúp em được không? khi em copy code của bác vào nó sẽ ra 1 macro mới là "loc_mau_do" khi đó em nhấn vào buton "RUN" nó không chạy, phải gán lại macro cho nó. Em muốn khí nhấn "RUN" nó chạy đồng thời cả macro "TACH" và "loc_mau_do" của bác. Em gà về VBA lắm nên rất mong bác giúp thì giúp cho chót :)
Em cảm ơn bác nhiều!
Thử vầy coi sao


Sub loc_mau_do()
Dim data(), i, kq(), k, n
With Sheets("du lieu vao")
data = .Range(.[A3], .[A65536].End(3)).Resize(, 15).Value
End With
ReDim kq(1 To UBound(data), 1 To 16)
For i = 1 To UBound(data)
If data(i, 3) < 3.15 Or data(i, 5) < 8.36 Then
k = k + 1
kq(k, 1) = k
For n = 2 To 16
kq(k, n) = data(i, n - 1)
Next
End If
Next
Sheets("Thong bao").[A10].Resize(1000, 16).ClearContents
Sheets("Thong bao").[A10].Resize(k, 16) = kq
End Sub

Thêm dòng loc_mau_do trước câu End Sub trong nút RUN thi code sẽ chạy

LYSM
01-05-13, 01:47 PM
Thử vầy coi sao


Sub loc_mau_do()
Dim data(), i, kq(), k, n
With Sheets("du lieu vao")
data = .Range(.[A3], .[A65536].End(3)).Resize(, 15).Value
End With
ReDim kq(1 To UBound(data), 1 To 16)
For i = 1 To UBound(data)
If data(i, 3) < 3.15 Or data(i, 5) < 8.36 Then
k = k + 1
kq(k, 1) = k
For n = 2 To 16
kq(k, n) = data(i, n - 1)
Next
End If
Next
Sheets("Thong bao").[A10].Resize(1000, 16).ClearContents
Sheets("Thong bao").[A10].Resize(k, 16) = kq
End Sub

Thêm dòng loc_mau_do trước câu End Sub trong nút RUN thi code sẽ chạy
Đúng là code có chạy thật bác ạ, nhưng phần mã số ở cột O tách ra không đúng, vả lại dữ liệu tách ra mất hết màu, em muốn nó giữ nguyên màu của dữ liệu gốc bác ạ

quanghai1969
01-05-13, 04:16 PM
Bài này dùng CF để tô màu, nhưng khi dùng code để kiểm tra những ô có tô màu thì không kiểm tra được, chỉ kiểm tra được những ô nào tô màu trực tiếp. Mong các anh chị giải thích giúp và gợi ý hướng xử lý.

LYSM
01-05-13, 04:37 PM
Mong các bác giúp đỡ em giải quyết vấn đề này với, chứ làm thủ công em mất rất nhiều thời gian
em cảm ơn tất cả mọi người đã đọc theard

nghiaphuc
01-05-13, 04:53 PM
Bài này dùng CF để tô màu, nhưng khi dùng code để kiểm tra những ô có tô màu thì không kiểm tra được, chỉ kiểm tra được những ô nào tô màu trực tiếp. Mong các anh chị giải thích giúp và gợi ý hướng xử lý.
Nếu sử dụng CF để tô màu thì có lẽ là phải dựa vào điều kiện của CF để lọc, cứ hàng nào thỏa mãn điều kiện thì lọc qua. Nếu làm trực tiếp thì có vẻ chậm, nên dùng mảng thì tốc độ sẽ được cải thiện hơn (nói vậy thôi chứ đụng đến mảng là em xin đầu hàng)

quanghai1969
01-05-13, 05:05 PM
Nếu sử dụng CF để tô màu thì có lẽ là phải dựa vào điều kiện của CF để lọc, cứ hàng nào thỏa mãn điều kiện thì lọc qua. Nếu làm trực tiếp thì có vẻ chậm, nên dùng mảng thì tốc độ sẽ được cải thiện hơn (nói vậy thôi chứ đụng đến mảng là em xin đầu hàng)
Thì bài 8 đã dùng dk của CF để lọc rồi đó, nhưng vẫn thắc mắc làm sao xác định được cái ô nào có tô màu đây. Nhìn thấy đỏ hoe thế mà không lọc được mới cay chứ.

Ba Tê
01-05-13, 06:30 PM
Thì bài 8 đã dùng dk của CF để lọc rồi đó, nhưng vẫn thắc mắc làm sao xác định được cái ô nào có tô màu đây. Nhìn thấy đỏ hoe thế mà không lọc được mới cay chứ.
Đúng là chủ topic quá "lậm" CF, trừ cột O sheet "du lieu vao", làm cho rắc rối thêm.
Do tác giả bảo rất nhiều màu nhưng chỉ mới thử với 1 màu đỏ nên càng rối.
Tôi nghĩ phải dùng 1 dòng chuẩn - Tạm lấy vùng B1:N1 - để so sánh, dữ liệu nào đúng điều kiện thì lấy qua sheet "Thong bao", bên sheet "Thong bao" vẫn phải dùng CF cho các cột giống như sheet "du lieu vao", trừ cột P.

LYSM
01-05-13, 06:54 PM
Đúng là chủ topic quá "lậm" CF, trừ cột O sheet "du lieu vao", làm cho rắc rối thêm.
Do tác giả bảo rất nhiều màu nhưng chỉ mới thử với 1 màu đỏ nên càng rối.
Tôi nghĩ phải dùng 1 dòng chuẩn - Tạm lấy vùng B1:N1 - để so sánh, dữ liệu nào đúng điều kiện thì lấy qua sheet "Thong bao", bên sheet "Thong bao" vẫn phải dùng CF cho các cột giống như sheet "du lieu vao", trừ cột P.
Cám ơn bác, đây là 1 ý tưởng hay, có 1 điều là cột "O" em cũng dùng CF ạ, vì em tưởng CF hay tô thủ công cũng không ảnh hưởng gì đến code nên em mới tô bằng tay cho tiện. Những mã có màu đỏ là những mã không xuất hiện trong cột A (cột O là 1 danh sách mã số cố định). Tiện đây nếu bác dùng code để lọc giúp em những mã của cột O mà không có trong cột A thì càng tốt. Do em không biết dùng code mới phải dùng CF

Ba Tê
01-05-13, 07:38 PM
Cám ơn bác, đây là 1 ý tưởng hay, có 1 điều là cột "O" em cũng dùng CF ạ, vì em tưởng CF hay tô thủ công cũng không ảnh hưởng gì đến code nên em mới tô bằng tay cho tiện. Những mã có màu đỏ là những mã không xuất hiện trong cột A (cột O là 1 danh sách mã số cố định). Tiện đây nếu bác dùng code để lọc giúp em những mã của cột O mà không có trong cột A thì càng tốt. Do em không biết dùng code mới phải dùng CF
Nếu vậy thì trong file cũ của bạn tô màu đỏ trong cột O dư 1 dòng.
Tôi dùng CF chỉ có 7 dòng đúng điều kiện thôi.
Bạn kiểm tra lại nhé.
Cột P sheet "Thong bao" để bạn tự quyết tô màu hay không.
Chú ý, file càng nhiều màu mè, khi dữ liệu nhiều dung lượng càng lớn.

LYSM
01-05-13, 08:23 PM
Nếu vậy thì trong file cũ của bạn tô màu đỏ trong cột O dư 1 dòng.
Tôi dùng CF chỉ có 7 dòng đúng điều kiện thôi.
Bạn kiểm tra lại nhé.
Cột P sheet "Thong bao" để bạn tự quyết tô màu hay không.
Chú ý, file càng nhiều màu mè, khi dữ liệu nhiều dung lượng càng lớn.
Vâng, chỗ đó em tô nhầm. Sau khi test code của bác em thấy khá ngon, nhưng lại phát sinh một vấn đề là những mã số có đầu số "B.thuong..." cũng vào sheet "thong bao" mà em lại không muốn nó vào đó (nó đã vào 1 sheet riêng biệt "B."). Bác có giải pháp nào khắc phục giúp em cái này không? Có thể như thay vì tách theo chỉ tiêu 2 cột D và F thì tách cột A khi mã số được to màu vậy (dùng CF), đây chỉ là ý tưởng của em, bác có ý tưởng gì hay hơn thì cứ cho vào.
Thật phiền bác quá nhưng mong bác hãy giúp em nốt.
Em cảm ơn bác rất nhiều!
sorry bác, em đã up lại file đính kèm, file nãy có pass

quanghai1969
01-05-13, 08:31 PM
Giờ thì đã hiểu ý của chủ topic rồi nên code cũng khá đơn giản thôi


Sub loc()
Dim r As Long
[A10].Resize(1000, 16).Clear
With Sheets("Du lieu vao")
.[A2:N10000].AdvancedFilter 2, [Q1:R3], [B9:O9]
.[C3:E3].Copy
Range([D10], [D65536].End(3)).Resize(, 3).PasteSpecial 4
Range([D10], [D65536].End(3)).Offset(, -3) = [row(a:a)]
For r = 3 To .[O65536].End(3).Row
If .[A:A].Find(.Cells(r, 15).Value, , , 2) Is Nothing Then
.Cells(r, 15).Copy [P65536].End(3).Offset(1)
End If
Next
[A9].CurrentRegion.Borders.Value = 1
End With
End Sub

LYSM
01-05-13, 08:37 PM
Giờ thì đã hiểu ý của chủ topic rồi nên code cũng khá đơn giản thôi


Sub loc()
Dim r As Long
[A10].Resize(1000, 16).Clear
With Sheets("Du lieu vao")
.[A2:N10000].AdvancedFilter 2, [Q1:R3], [B9:O9]
.[C3:E3].Copy
Range([D10], [D65536].End(3)).Resize(, 3).PasteSpecial 4
Range([D10], [D65536].End(3)).Offset(, -3) = [row(a:a)]
For r = 3 To .[O65536].End(3).Row
If .[A:A].Find(.Cells(r, 15).Value, , , 2) Is Nothing Then
.Cells(r, 15).Copy [P65536].End(3).Offset(1)
End If
Next
[A9].CurrentRegion.Borders.Value = 1
End With
End Sub

Bác ơi, có vấn đề mới phát sinh như ở #17, bác xem xét giúp em với. Em cảm ơn bác nhiều!

quanghai1969
01-05-13, 08:59 PM
"Hoy" em hỏng mần nữa, anh Ba Tê lo phần cuối nha. Em bị out rồi.

Ba Tê
01-05-13, 09:57 PM
Bác ơi, có vấn đề mới phát sinh như ở #17, bác xem xét giúp em với. Em cảm ơn bác nhiều!
Nhớ lần sau đừng gởi file có pass word lên GPE nhé.
Lúc nãy nhìn thấy PW nên "đi luôn".
Người ta giúp công khai cho bạn, còn bạn lại dùng PW, nhìn thấy là "tự ái" rồi.
Thử lại file này với code Tach_GPE xem có "tốc độ" hơn file cũ không?
Dùng CF để kẻ khung, tô màu nhiều quá làm file ỳ ạch.

LYSM
02-05-13, 06:47 AM
Nhớ lần sau đừng gởi file có pass word lên GPE nhé.
Lúc nãy nhìn thấy PW nên "đi luôn".
Người ta giúp công khai cho bạn, còn bạn lại dùng PW, nhìn thấy là "tự ái" rồi.
Thử lại file này với code Tach_GPE xem có "tốc độ" hơn file cũ không?
Dùng CF để kẻ khung, tô màu nhiều quá làm file ỳ ạch.

Sorry bác, không phải em dùng psw vì mục đích giữ làm của riêng, đây là file em tải thẳng từ công ty về. File thì mọi người dùng chung nhưng em phải chịu trách nhiệm về tính đúng đắn của nó. Nếu không đặt psw người khác vô tình làm hỏng hay sửa code thì hậu quả sẽ rất khôn lường. Bác thông cảm cho em

LYSM
04-05-13, 09:01 AM
Nhớ lần sau đừng gởi file có pass word lên GPE nhé.
Lúc nãy nhìn thấy PW nên "đi luôn".
Người ta giúp công khai cho bạn, còn bạn lại dùng PW, nhìn thấy là "tự ái" rồi.
Thử lại file này với code Tach_GPE xem có "tốc độ" hơn file cũ không?
Dùng CF để kẻ khung, tô màu nhiều quá làm file ỳ ạch.
Bác Ba Tê ơi, xin bác giúp em thêm lần nữa,
Bây giờ em muốn tách các mã số ở cột O theo thêm 1 điều kiện nữa là nếu ngày ở cột Q<= today thì sẽ tách các mã số có đầu sô tương ứng với dòng đó ở cột P mà không xuất hiện trong cột A (các mã số bôi hồng trên cột O đó bác). Ví dụ thế này nhé: hôm nay là ngày 04/05/2013 thì chỉ tách các mã số có đầu số: HA, BS, BH, DQ. Đến ngày mai 05/05/2013 sẽ tách thêm các mã số có đầu số VI. Lưu ý là các mã số ở cột O có đầu số trên chỉ được tách khi thỏa mãn đồng thời cả 2 điều kiện là không xuất hiện trong cột A và có ngày trên cột Q<= ngày hôm nay.
Em đội ơn bác nhiều!

Ba Tê
04-05-13, 07:45 PM
Bác Ba Tê ơi, xin bác giúp em thêm lần nữa,
Bây giờ em muốn tách các mã số ở cột O theo thêm 1 điều kiện nữa là nếu ngày ở cột Q<= today thì sẽ tách các mã số có đầu sô tương ứng với dòng đó ở cột P mà không xuất hiện trong cột A (các mã số bôi hồng trên cột O đó bác). Ví dụ thế này nhé: hôm nay là ngày 04/05/2013 thì chỉ tách các mã số có đầu số: HA, BS, BH, DQ. Đến ngày mai 05/05/2013 sẽ tách thêm các mã số có đầu số VI. Lưu ý là các mã số ở cột O có đầu số trên chỉ được tách khi thỏa mãn đồng thời cả 2 điều kiện là không xuất hiện trong cột A và có ngày trên cột Q<= ngày hôm nay.
Em đội ơn bác nhiều!

Đừng nói vậy, hổng dám đâu........
Hổng hiểu chuyện này là chuyện gì, sao kỳ quá hổng hiểu.

LYSM
04-05-13, 08:23 PM
Đừng nói vậy, hổng dám đâu........
Hổng hiểu chuyện này là chuyện gì, sao kỳ quá hổng hiểu.
Cảm ơn bác nhiều nha, bác đúng là bậc thầy về VBA.
Bác mà ở HN em mời bác đi uống bia và tôn bác là thầy luôn. Em cũng muốn học VBA mà chưa có người chỉ bảo, đọc bản Draft của trường Giao thông mà như nhìn bức vách không hiểu gì cả