Cách lọc dữ liệu có điều kiện trong Macro (1 người xem)

Liên hệ QC

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

chutuoc909

Thành viên chính thức
Tham gia
14/7/15
Bài viết
51
Được thích
2
Em có câu hỏi muốn nhờ mọi người biết về macro

!$@!!
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Bạn muốn lọc như thế nào? có thể nói rõ hơn được? dữ liệu gốc là như thế nào? và cho ví dụ dữ liệu cần lọc ra, ra sao?
 
Xem file đính kèm & những mong nó đúng í bạn!
 

File đính kèm

Tuyệt vời bạn HYen17,


Cám ơn bạn rất nhiều,
mình nhờ thêm 1 vấn đề nữa với:

Hiện tại dữ liệu đc lọc và copy như vậy là ok rồi, Giờ mình muốn khi copy bạn copy luôn ngày tháng tương ứng vào 1 cột bên cạnh được không? và hơi phức tạp 1 tí là định dạng ngày tháng là yyyymmdd (không có '/') vậy có được không nhỉ?
bạn có hiểu ý mình không?
 
Chỉnh sửa lần cuối bởi điều hành viên:
Thanks Bro phihndhsp đã quan tâm, bạn down file của HYen17 và mở ra là sẽ rõ yêu cầu của bài toán bạn a.
có cao kiến gì hãy chỉ giáo cho mình nhé.

Xin cảm ơn bạn.
//**/
 
Chỉnh sửa lần cuối bởi điều hành viên:
Tuyệt vời bạn HYen17,


Cám ơn bạn rất nhiều,
mình nhờ thêm 1 vấn đề nữa với:

Hiện tại dữ liệu đc lọc và copy như vậy là ok rồi, Giờ mình muốn khi copy bạn copy luôn ngày tháng tương ứng vào 1 cột bên cạnh được không? và hơi phức tạp 1 tí là định dạng ngày tháng là yyyymmdd (không có '/') vậy có được không nhỉ?
bạn có hiểu ý mình không?

góp bạn thêm đoạn code
Mã:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim KQ(1 To 6000, 1 To 5) As Variant, rng, Visiblecll, CLL As Range, j As Long, k

If Not Intersect(Target, [f2]) Is Nothing Then
Set rng = Range([f6], [f6].End(2))

    k = Application.Match(Target, rng, 0)
    If TypeName(k) <> "Error" Then
       On Error GoTo thoat
       Set Visiblecll = rng.Cells(1, k).Resize([a60000].End(3).Row - 5).SpecialCells(2)
       If Err Then GoTo thoat
       
       For Each CLL In Visiblecll
            j = j + 1
            KQ(j, 1) = j
            KQ(j, 2) = CLL.Offset(, -k - 4).Value
            KQ(j, 3) = CLL.Value
            KQ(j, 4) = CLL.Offset(, -k - 3)
            KQ(j, 5) = Format(rng.Cells(1, k), "yyyymmdd")
       Next
    End If
End If

thoat:
Sheet1.[a7:d6000].Clear
On Error GoTo 0
If j Then Sheet1.[a7].Resize(j, 5) = KQ

End Sub
 
Mình nhờ thêm 1 vấn đề nữa với:
Hiện giờ mình muốn khi copy bạn đem luôn ngày tháng tương ứng vào 1 cột bên cạnh được không? và định dạng ngày tháng là yyyymmdd (không có '/') vậy có được không nhỉ?

Bạn lấy macro này chép đè lên cái cũ nè:

PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, [f2]) Is Nothing Then
    Dim Rng As Range, sRng As Range, Sh As Worksheet, Rg0 As Range, Cls As Range
    Dim MyFormat As String
    Dim Rws As Long
    
    Set Sh = ThisWorkbook.Worksheets("Sheet1")
    Sh.[b7].CurrentRegion.Offset(1, 1).ClearContents
    Rws = [A6].CurrentRegion.Rows.Count
    Set Rng = Range([f6], [f6].End(xlToRight))
    MyFormat = Rng.NumberFormat
    Rng.NumberFormat = "mm/dd/yyyy"
    Set sRng = Rng.Find(Format(Target.Value, "MM/dd/yyyy"), , xlValues, xlWhole)
    If sRng Is Nothing Then
        MsgBox "Nothing", , "Tam Biet!"
    Else
        Set Rg0 = sRng.Offset(1).Resize(Rws).SpecialCells(xlCellTypeConstants, 1)
        If Rg0 Is Nothing Then
            MsgBox "Khong Só Lieu"
        Else
            For Each Cls In Rg0
                With Sh.Cells(9 + Rws, "B").End(xlUp).Offset(1)
                    .Value = Cells(Cls.Row, "A").Value
                    .Offset(, 1).Value = Cls.Value
                    .Offset(, 2).Value = Format(Target.Value, "yyyymmdd")  '<=|'
                    .Offset(, 3).Value = Cells(Cls.Row, "C").Value
                End With
            Next Cls
        End If
    End If
    Rng.NumberFormat = MyFormat
    Sh.Select
 End If
End Sub
 
Là sao, bạn?

Fương thức đó là chọn ra những ô có số liệu trong cột mà bạn.

à, là nếu như cột của ngày đó mà ko có số liệu, ví dụ như ngày 30 đi, mình xóa hết số liệu
nó báo là "no cell was found"
cái dòng lệnh dưới
Mã:
[COLOR=#000000][COLOR=#007700]If [/COLOR][COLOR=#0000BB]Rg0 Is Nothing Then
            MsgBox [/COLOR][COLOR=#DD0000]"Khong Só Lieu"
nó không phát huy tác dụng[/COLOR][/COLOR]
 
à, là nếu như cột của ngày đó mà ko có số liệu, ví dụ như ngày 30 đi, mình xóa hết số liệu
nó báo là "no cell was found"
cái dòng lệnh dưới
Mã:
[COLOR=#000000][COLOR=#007700]If [/COLOR][COLOR=#0000BB]Rg0 Is Nothing Then
            MsgBox [/COLOR][COLOR=#DD0000]"Khong Só Lieu"  [/COLOR][/COLOR]

nó không phát huy tác dụng
chỉ có cách này mới có hi vọng nhìn thấy "Khong Só Lieu" hihi
Mã:
        On Error Resume Next
        Set Rg0 = sRng.Offset(1).Resize(Rws).SpecialCells(xlCellTypeConstants, 1)
        On Error GoTo 0
        If Rg0 Is Nothing Then
            MsgBox "Khong Só Lieu"
        Else
 
Gửi các bro,

Thật chân thành cảm ơn đã giúp đỡ. nói thật là chưa tìm hiểu nhiều về Macro nhưng mà Sếp lại giao cho nhiệm vụ về mảng này
đang lúc bối rối lại nhận được sự giúp đỡ của forum

xin 1 lần nữa cám ơn các bạn đã giúp đỡ. sau này mong được các bro chỉ giáo nhiều hơn./-* /
 
Chỉnh sửa lần cuối bởi điều hành viên:
Dear các Bro,

Bài toán giờ thêm 1 ý nữa thế này ạ:

Hiện tại đang lọc những cột nào có dữ liệu thì mới in, nhưng bây giờ em muốn in cả những thằng ko có dữ liệu nhưng in no ra với dữ liệu =0
và chèn thêm 1 cột nữa trong sheet 1 là Create date(tức là ngày hiện tại). các bác xem có ổn không ?
 
Chỉnh sửa lần cuối bởi điều hành viên:
Dear các Bro,

Bài toán giờ thêm 1 ý nữa thế này ạ:

Hiện tại đang lọc những cột nào có dữ liệu thì mới in, nhưng bây giờ em muốn in cả những thằng ko có dữ liệu nhưng in no ra với dữ liệu =0
và chèn thêm 1 cột nữa trong sheet 1 là Create date(tức là ngày hiện tại). các bác xem có ổn không ?
mọi thứ điều ổn, nhưng mọi phát sinh thêm thì rất ngại viết lại bài?
 
mọi thứ điều ổn, nhưng mọi phát sinh thêm thì rất ngại viết lại bài?

Đồng ý với bác,

nhưng khổ nỗi ý tưởng của Sếp nó cứ xuất hiện liên tục, buộc mình phải theo.
nên mong được sự giúp đỡ của mọi người.;;;;;;;;;;;
 
Chỉnh sửa lần cuối bởi điều hành viên:
Đồng ý với bác,

nhưng khổ nỗi ý tưởng của Sếp nó cứ xuất hiện liên tục, buộc mình phải theo.
nên mong được sự giúp đỡ của mọi người.;;;;;;;;;;;

bạn đừng có "pro" "bro".....mấy vị ở đây dị ứng với nó lắm
chứ hiện này với ngày không có số liệu thì nó ra kết quả như thế nào?
 
Kiểu này thì thuật toán fải thay thôi, & nó đây:
(Bạn lấy cái này chép đề lên macro ở file bài #3
Còn cột 'E' - Create date bạn tham khảo công thức ở cột 'A' của trang 'Sheet1' mà làm ên đi!)

PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, [f2]) Is Nothing Then
    Dim Arr(), Rng As Range, Cls As Range
    Dim Rws As Long, J As Long
    Dim Ngay As String
    
    With Target
        Ngay = CStr(Year(.Value)) & Right("0" & CStr(Month(.Value)), 2) & Right("0" & CStr(Day(.Value)), 2)
    End With
    For Each Cls In Range([f6], [f6].End(xlToRight))
        If Cls.Value = Target.Value Then Exit For
    Next Cls
    Rws = [A7].CurrentRegion.Rows.Count
    Arr() = [A7].Resize(Rws, 3).Value
    For J = 1 To UBound(Arr())
        If Arr(J, 1) = "" Then Exit For
        Arr(J, 2) = Cells(J + 6, Cls.Column).Value
        Arr(J, 3) = Ngay
    Next J
    Sheet1.[b7].Resize(Rws, 3) = Arr()
    Sheet1.Select
 End If
End Sub
 
bạn đừng có "pro" "bro".....mấy vị ở đây dị ứng với nó lắm
chứ hiện này với ngày không có số liệu thì nó ra kết quả như thế nào?

hi, mình chỉ xuất phát từ lòng tôn trọng thôi, ok sẽ rút kinh nghiệm lần sau.
Với ngày nào không có dữ liệu thì vẫn in và copy ra dữ liệu là 0
 
Chỉnh sửa lần cuối bởi điều hành viên:
Yêu cầu của chủ topic đã được đáp ứng; Giờ xin hỏi lại chủ topic 1 câu:

Sao ta không xoay trang dữ liệu lại nhỉ?

Lúc đó các dòng sẽ liệt kê ngày tháng nhập; còn các cột sẽ là những mặt hàng

[thongbao]ó 2 sheet:
ở cột A là các mã hàng,
Range (F:AJ) là dữ liệu
yêu cầu: tương ứng theo dữ liệu đã nhập ở ô F2 thì tìm kiếm trong Range,
theo trên ta nhập ngày là 2015/06/30 thì ở ô F6 ta tìm thấy nó, trong cột F tương ứng với ngày nhập đó ô nào có dữ liệu thì in ra, theo ví dụ : tại ô F31 và A31 có dữ liệ thì copy 2 ô đó sang sheet1. và tương ứng nếu ta nhập ngày tháng ban đầu là khác thì phai copy tương tự.[/thongbao]
 
Yêu cầu của chủ topic đã được đáp ứng; Giờ xin hỏi lại chủ topic 1 câu:

Sao ta không xoay trang dữ liệu lại nhỉ?

Lúc đó các dòng sẽ liệt kê ngày tháng nhập; còn các cột sẽ là những mặt hàng

[thongbao]ó 2 sheet:
ở cột A là các mã hàng,
Range (F:AJ) là dữ liệu
yêu cầu: tương ứng theo dữ liệu đã nhập ở ô F2 thì tìm kiếm trong Range,
theo trên ta nhập ngày là 2015/06/30 thì ở ô F6 ta tìm thấy nó, trong cột F tương ứng với ngày nhập đó ô nào có dữ liệu thì in ra, theo ví dụ : tại ô F31 và A31 có dữ liệ thì copy 2 ô đó sang sheet1. và tương ứng nếu ta nhập ngày tháng ban đầu là khác thì phai copy tương tự.[/thongbao]

File khi lọc ra mình còn phải import vào hệ thống, nếu xoay dữ liệu như vậy khi import vào ht sẽ không được **~**.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Mình có 1 vấn đề như này:

Có 2 sheet: 1 sheet tổng, 1 sheet có dữ liệu đã được lọc.
Yêu cầu: copy những dữ liệu ở sheet 2 vào sheet 1 với điều kiện:
tự động insert thêm dòng khi gặp dữ liệu trùng lặp( các bạn xem kết quả ở sheet 3 sẽ hiểu)
dữ liệu ngày tháng theo format: yyyymmdd.

hiện tại bên chỗ mình vẫn đang làm bằng tay, khá là bất tiện, vậy mong các bạn giúp đỡ.
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
kết quả ở sheet 3 chỉ để tham khảo, vì mình copy ở các ngày khác nhau,
nhưng ý nghĩa là như vậy. và các tiêu đề ở các cột chắc cũng không thành vấn đề nhi?
-\\/.
 
Chỉnh sửa lần cuối bởi điều hành viên:
trong sheet kết quả mẫu có cần liệt kê những mã số cột A mà có trong sheet1 nhưng không có trong sheet2 không ?
 
trong sheet kết quả mẫu có cần liệt kê những mã số cột A mà có trong sheet1 nhưng không có trong sheet2 không ?

Cần thiết bạn ạ,
nếu không cần thì bải toán này sẽ trở nên đơn giản, thực hiện macro theo thao tác là ok.
nhưng yêu cầu ở đây không như vậy

vẫn là copy paste nhưng những dữ liệu bị trùng vẫn được dán vào sheet 1 và tự động đẩy các row khác xuống.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Sheet 3 là kết quả mẫu mà bạn, theo macro của bạn thì nó thực thi luôn lên sheet 3 ,
ý của mình là, copy dữ liệu từ sheet2 sang sheet1, ta được kết quả mong muốn như trong sheet 3--=0
 
Chỉnh sửa lần cuối bởi điều hành viên:
Ai giúp mình với, sheet3 - kêt quả mẫu chỉ là kết quả mong muốn chứ ko hề liên quan gì đến trong quá trình lọc dữ liệu cả **~**

xin tải lại file:
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
uhm bạn nói tôi hiểu chứ . để từ từ thì tôi còn sửa chứ vào spam hối thúc thì thông cảm tôi không thích bị ai hối thúc kiểu đó . nên bạn chờ các thành viên khác giúp nhé . chào bạn
 
uhm bạn nói tôi hiểu chứ . để từ từ thì tôi còn sửa chứ vào spam hối thúc thì thông cảm tôi không thích bị ai hối thúc kiểu đó . nên bạn chờ các thành viên khác giúp nhé . chào bạn

Bạn nóng tính quá, sorry nếu làm bạn ức chế nhé. Cũng chỉ vì deadline căng quá nên hơi bối rối, sorry nhé.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Bạn nóng tính quá, sorry nếu làm bạn ức chế nhé. Cũng chỉ vì deadline căng quá nên hơi bối rối, sorry nhé.

Hình như bạn là Việt kiều, câu văn nửa nạc (Việt) nửa mỡ (hổng biết nước nào), GPE không thích đọc những câu văn kiểu này đâu, bạn chờ mõi cổ rồi.
 
Hình như bạn là Việt kiều, câu văn nửa nạc (Việt) nửa mỡ (hổng biết nước nào), GPE không thích đọc những câu văn kiểu này đâu, bạn chờ mõi cổ rồi.

Forum lập ra là để là nơi trao đổi, học hỏi lẫn nhau. Nhờ giúp đỡ nhưng mà ko ai giúp thì mình phải chịu.
chứ bạn lấy lý do là nửa tây nửa ta GPE ko thích điều này thì mình thấy hơi buồn cười.
đánh máy hầu hết là theo thói quen thường ngày, đánh thế nào cho nhanh, cho tiện thì đánh.
trong cuộc sống bạn chưa bao giờ dùng từ sorry? khi nói chuyện với khách hàng, đồng nghiệp, và sếp bạn chưa từng dùng qua từ deadline? |||||
 
Chỉnh sửa lần cuối bởi điều hành viên:
Bạn lói tiếng Lào ra tiếng Ý!
 
Forum lập ra là để là nơi trao đổi, học hỏi lẫn nhau. Nhờ giúp đỡ nhưng mà ko ai giúp thì mình phải chịu.
Không ai giúp cũng có lý do "nhân quả".

chứ bạn lấy lý do là nửa tây nửa ta GPE ko thích điều này thì mình thấy hơi buồn cười.
Buồn cười là do bạn tự "mắc cười" thôi, đa số thành viên GPE luôn dị ứng kiểu "nửa nạc nửa mỡ", có thể bạn chưa đọc được nhiều bài về chuyện này trên GPE thôi, một số thành viên chưa đọc kỹ bài viết kiểu "2 nạc 3 mỡ" nên viết bài trả lời, chỉ là "số ích".

đánh máy hầu hết là theo thói quen thường ngày, đánh thế nào cho nhanh, cho tiện thì đánh.
Đánh máy cho mình nhớ là một chuyện, cho người khác đọc là một chuyện.

trong cuộc sống bạn chưa bao giờ dùng từ sorry? khi nói chuyện với khách hàng, đồng nghiệp, và sếp bạn chưa từng dùng qua từ deadline?
Trong giao tiếp lịch sự giữa người Việt với người Việt, tôi luôn tôn trọng "sự trong sáng của tiếng Việt", Khi nói chuyện với người nước ngoài, tôi không bao giờ dùng "tay".
Những từ ngữ muốn "địa phương hóa" cho có "máu lửa xì tin" thì phải trong ngoặc kép để người đọc khỏi "nhức đầu".
-------------------
Mà hình như đến bài này thì chẳng còn tí gì là chuyên môn Giải Pháp Excel, spam hết thì phải. Chắc bị xóa hoặc khóa luôn. Híc!
 
Lần chỉnh sửa cuối:
Forum lập ra là để là nơi trao đổi, học hỏi lẫn nhau. Nhờ giúp đỡ nhưng mà ko ai giúp thì mình phải chịu.
chứ bạn lấy lý do là nửa tây nửa ta GPE ko thích điều này thì mình thấy hơi buồn cười.
đánh máy hầu hết là theo thói quen thường ngày, đánh thế nào cho nhanh, cho tiện thì đánh.
trong cuộc sống bạn chưa bao giờ dùng từ sorry? khi nói chuyện với khách hàng, đồng nghiệp, và sếp bạn chưa từng dùng qua từ deadline? |||||

Bạn nên đọc lại nội quy của diễn đàn khi nêu lên vấn đề trên, vì "vi phạm nội quy".
http://www.giaiphapexcel.com/forum/showthread.php?138-Nội-quy-diễn-đàn

Bạn nêu "Forum lập ra là để là nơi trao đổi, học hỏi lẫn nhau", đúng là nơi trao đổi nhưng phải có khuông phép, đúng theo quy định chứ phải muốn viết gì thì viết.

Nội quy diễn đàn quy định rất rỏ ràng "
Tất cả các bài viết bằng tiếng Việt cần viết có dấu đầy đủ", nhưng bạn nêu câu này là vi phạm:
chứ bạn lấy lý do là nửa tây nửa ta GPE ko thích điều này thì mình thấy hơi buồn cười.

 
Lần chỉnh sửa cuối:
Xin cảm ơn mọi người đã góp ý, cũng xin tiếp thu ý kiến, và cũng vẫn mong sau này nhận được sự giúp đỡ của mọi người. %#^#$
 
Chỉnh sửa lần cuối bởi điều hành viên:
Túm lại bạn phải giải thích lại cái file đính kèm đi..........chứ nói là copy qua. nhưng không biết copy những dòng nào? tiêu chí nào? xem sheet mẫu của bạn .......so sánh lại vói sheet gốc mà cũng không hình dung dc là bạn muốn gì...........

Cảm ơn bạn đã giúp đỡ, file đó hiện tại mình đã làm được tương đối ổn, sắp tới có 1 số bài mình ko đủ sức làm được, mong các bạn giúp đỡ.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Xin chào mọi người

Mình có 1 bài tập cần sự giúp đỡ.

chi tiết các bạn mở file xem hộ mình nhé.
- */
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
http://www.mediafire.com/download/6q5ray2f2kny0s2/Marco_Full(2015.08.17)_-_Copy.rar
đã giải quyết mong muốn 2 của bạn.
mong muốn 1 thì mình chưa hiểu làm sao để lưu file excel đuôi "*. dat" đó nên chịu.
mong muốn 3 thì có thể mình không biết nhưng có thể gợi ý cho bạn là mình có thể tạo 1 sub để gọi UseForm của bạn rồi gán phím tắt vào.
 
Lần chỉnh sửa cuối:
Có lẽ đã đúng cả 3 yêu cầu của bạn.

Trước tiên cảm ơn bạn đã bỏ thời gian ra giúp mình.
mong muốn 1: khi chọn vùng dữ liệu xong thì file name sẽ lấy luôn dữ liệu trong ô B2 của sheet hiện hành đó làm tên.
mm2: ok
mm3: ý mình muốn là khi click vào Cell A1 ở tất cả các sheet đều có thể hiển thị form.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Cho phép mình gác lại file trên nhé:

giờ mình phải làm trực tiếp trên file nguồn, nhưng không biết phải làm thế nào
chi tiếp cụ thể nhờ các bạn xem trong file đính kemd giúp mình với nhé.

Mong nhận được sự giúp đỡ của các Thầy và các bạn.

tại file > hơn 1M nên mình đã up lên mediafire:
http://www.mediafire.com/download/7r2xz7ry2ioq95l/Material.xlsx
 
Cho phép mình gác lại file trên nhé:

giờ mình phải làm trực tiếp trên file nguồn, nhưng không biết phải làm thế nào
chi tiếp cụ thể nhờ các bạn xem trong file đính kemd giúp mình với nhé.

Mong nhận được sự giúp đỡ của các Thầy và các bạn.

tại file > hơn 1M nên mình đã up lên mediafire:
http://www.mediafire.com/download/7r2xz7ry2ioq95l/Material.xlsx

cột F==>chỉ có "plan", ko có "stock"
cột E==> "assay"
cột D==> ">0"
[TABLE="width: 402"]
[TR]
[TD]SU8E-10W01AI-01X[/TD]
[TD="align: right"]2600[/TD]
[TD]Assy3[/TD]
[TD]Plan[/TD]
[TD="align: right"]1380[/TD]
[/TR]
[TR]
[TD]SU8E-10W05MI-01A[/TD]
[TD="align: right"]4500[/TD]
[TD]Assy3[/TD]
[TD]Plan[/TD]
[TD="align: right"]1300[/TD]
[/TR]
[TR]
[TD]SU8C-12H03AS-01X[/TD]
[TD="align: right"]2600[/TD]
[TD]Assy3[/TD]
[TD]Plan[/TD]
[TD][/TD]
[/TR]
[TR]
[TD]SU8C-12H04AS-01X[/TD]
[TD="align: right"]400[/TD]
[TD]Assy3[/TD]
[TD]Plan[/TD]
[TD][/TD]
[/TR]
[TR]
[TD]SU6C-12H12AS-01X[/TD]
[TD="align: right"]848[/TD]
[TD]Assy1[/TD]
[TD]Plan[/TD]
[TD="align: right"]0[/TD]
[/TR]
[TR]
[TD]SU8E-11H04MI-01A[/TD]
[TD="align: right"]6000[/TD]
[TD]Assy3[/TD]
[TD]Plan[/TD]
[TD][/TD]
[/TR]
[/TABLE]
 
cột F==>chỉ có "plan", ko có "stock"
cột E==> "assay"
cột D==> ">0"
[TABLE="width: 402"]
[TR]
[TD]SU8E-10W01AI-01X[/TD]
[TD="align: right"]2600[/TD]
[TD]Assy3[/TD]
[TD]Plan[/TD]
[TD="align: right"]1380[/TD]
[/TR]
[TR]
[TD]SU8E-10W05MI-01A[/TD]
[TD="align: right"]4500[/TD]
[TD]Assy3[/TD]
[TD]Plan[/TD]
[TD="align: right"]1300[/TD]
[/TR]
[TR]
[TD]SU8C-12H03AS-01X[/TD]
[TD="align: right"]2600[/TD]
[TD]Assy3[/TD]
[TD]Plan[/TD]
[TD][/TD]
[/TR]
[TR]
[TD]SU8C-12H04AS-01X[/TD]
[TD="align: right"]400[/TD]
[TD]Assy3[/TD]
[TD]Plan[/TD]
[TD][/TD]
[/TR]
[TR]
[TD]SU6C-12H12AS-01X[/TD]
[TD="align: right"]848[/TD]
[TD]Assy1[/TD]
[TD]Plan[/TD]
[TD="align: right"]0[/TD]
[/TR]
[TR]
[TD]SU8E-11H04MI-01A[/TD]
[TD="align: right"]6000[/TD]
[TD]Assy3[/TD]
[TD]Plan[/TD]
[TD][/TD]
[/TR]
[/TABLE]

Với sheet ' 2 ' thì điều kiện lấy dữ liệu trong sheet ' Actual ' :
cột F==>chỉ lấy dữ liệu với "Stock"
cột E==>chỉ lấy dữ liệu với "assy"
cột D==> chỉ lấy dữ liệu với ">0"

Còn sheet ' 2-2' thì điều kiện lấy dữ liệu trong sheet 'Total 19.15'
Cột FK (stock balance...) lấy dữ liệu '>0'

Nhờ bạn giúp. cảm ơn bạn
 
Mã:
Public Sub helloAtual()
Dim lr As Long, rngC As Range, lrSheet1 As Long
lr = Sheet8.UsedRange.SpecialCells(xlCellTypeLastCell).Row
With Sheet1
    .[Z1].ClearContents
    .[Z2].Value = "=AND(ATual!D9>0,ATual!E9=""Assy"",ATual!F9=""Stock"")"
    Sheet8.Range("D8:F" & lr).AdvancedFilter xlFilterInPlace, .[Z1:Z2]
    On Error Resume Next
    Set rngC = Sheet8.Range("C9:C" & lr).SpecialCells(xlCellTypeVisible)
    On Error GoTo 0
    If rngC Is Nothing Then Exit Sub
    lrSheet1 = WorksheetFunction.Max(.Range("C4").CurrentRegion.SpecialCells(xlCellTypeLastCell).Row, 5)
    .Range("C5:H" & lrSheet1).ClearContents
    rngC.Copy
    .[C5].PasteSpecial xlPasteValues
    Sheet8.Range("D9:D" & lr).SpecialCells(xlCellTypeVisible).Copy
    .[F5].PasteSpecial xlPasteValues
    lrSheet1 = .[F4].End(xlDown).Row
    .Range("D5:D" & lrSheet1).Value = 1111000570
    .Range("G5:G" & lrSheet1).Value = "CBU"
    .Range("E5:E" & lrSheet1).Value = Format(Date, "yyyyMMdd")
    .Range("H5:H" & lrSheet1).Value = Format(Date, "yyyyMMdd")
    Sheet8.Range("D8:F" & lr).AutoFilter
    .[Z2].ClearContents
End With
End Sub

Mã:
Public Sub hello0915()
Dim lr As Long, rngC As Range, lrS2 As Long
lr = Sheet4.UsedRange.SpecialCells(xlCellTypeLastCell).Row
Sheet4.Range("FJ7:FK" & lr).AutoFilter 2, ">0"
On Error Resume Next
Set rngC = Sheet4.Range("X8:X" & lr).SpecialCells(xlCellTypeVisible)
On Error GoTo 0
If rngC Is Nothing Then Exit Sub
With Sheet2
    lrS2 = WorksheetFunction.Max(.Range("C4").CurrentRegion.SpecialCells(xlCellTypeLastCell).Row, 5)
    .Range("C5:H" & lrS2).ClearContents
    rngC.Copy
    .[C5].PasteSpecial xlPasteValues
    Sheet4.Range("FK8:FK" & lr).SpecialCells(xlCellTypeVisible).Copy
    .[F5].PasteSpecial xlPasteValues
    lrS2 = .[F4].End(xlDown).Row
    .Range("D5:D" & lrS2).Value = 1111000570
    .Range("G5:G" & lrS2).Value = "CBU"
    .Range("E5:E" & lrS2).Value = Format(Date, "yyyyMMdd")
    .Range("H5:H" & lrS2).Value = Format(Date, "yyyyMMdd")
    Sheet4.Range("FJ7:FK" & lr).AutoFilter
End With
End Sub
 
Tuyệt thật,

Cám ơn bạn nhiều lắm.
doveandrose


có thể cho mình địa chỉ email hay cái gì đó liên lạc để nói chuyện được không?
 
Tuyệt thật,

Cám ơn bạn nhiều lắm.
doveandrose


có thể cho mình địa chỉ email hay cái gì đó liên lạc để nói chuyện được không?

chứ hiện tại bạn không liên lạc được với tôi ?
ngày nào tôi cũng vào diễn đàn . bạn muốn gì cứ việc ghi vào đây tự nhiên tôi biết
 
Tuyệt thật,

Cám ơn bạn nhiều lắm.
doveandrose


có thể cho mình địa chỉ email hay cái gì đó liên lạc để nói chuyện được không?
mong muốn 3 chép vào workSheet nha
Mã:
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  If Not Intersect([A1:A1], Target) Is Nothing Then
    With UserForm1
      .StartUpPosition = 0
      .Top = [D18].Top - 50
      .Left = [D18].Left + 20
      .Show
    End With
  End If
End Sub
 
Lần chỉnh sửa cuối:
mong muốn 3 chép vào workSheet nha
Mã:
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  If Not Intersect([A1:A1], Target) Is Nothing Then
    With UserForm1
      .StartUpPosition = 0
      .Top = [D18].Top - 50
      .Left = [D18].Left + 20
      .Show
    End With
  End If
End Sub

cám ơn langtuchungtinh nhé, mình đã làm theo và ok
 
chứ hiện tại bạn không liên lạc được với tôi ?
ngày nào tôi cũng vào diễn đàn . bạn muốn gì cứ việc ghi vào đây tự nhiên tôi biết

hi, cám ơn bạn.

mình có 2 sheet nữa cần convert dữ liệu, các bạn giúp mình nhé:
Vì file > 1 MB nên mình up lên mediafire, các bạn down về giúp mình.
2 sheet 2 và 2-2 mình đã làm theo và ok. còn sheet 6, 7 nhờ bạn.

http://www.mediafire.com/download/b654r651qhxaxhq/Material_New.xlsm
 
hi, cám ơn bạn.

mình có 2 sheet nữa cần convert dữ liệu, các bạn giúp mình nhé:
Vì file > 1 MB nên mình up lên mediafire, các bạn down về giúp mình.
2 sheet 2 và 2-2 mình đã làm theo và ok. còn sheet 6, 7 nhờ bạn.

http://www.mediafire.com/download/b654r651qhxaxhq/Material_New.xlsm

các cột PLAN_START_DATE ,PLAN_END_DATE,QTY lấy đâu ra mà dữ liệu lên tới tháng 9 ????
 
Đấy là dữ liệu mình dán để mình họa, mình lấy từ dữ liệu mình test.
Theo file thì nó là tháng 7 cậu nhé

Mã:
Public Sub hello6()
hello67 Sheet5
End Sub

Mã:
Public Sub hello67(targetWS As Worksheet, Optional ByVal endDate As Variant, _
Optional ByVal startRow As Integer = 5, Optional ByVal startCol As String = "C")
Dim lr As Long, arr As Variant, r As Long, c As Long, k As Long, arrRS As Variant, today As Variant
lr = Sheet8.UsedRange.SpecialCells(xlCellTypeLastCell).Row
arr = Sheet8.Range("C8:AM" & lr).Value
today = Format(Date, "yyyyMMdd")
If IsMissing(endDate) Then endDate = Sheet8.[AM8].Value
If IsEmpty(endDate) Then endDate = -1
ReDim arrRS(1 To 500000, 1 To 6)
For r = 2 To UBound(arr) Step 1
    If arr(r, 4) = "Stock" Then
        If InStr(arr(r, 3), "Assy") > 0 Then
            If IsNumeric(arr(r, 2)) Then
                If arr(r, 2) > 0 Then
                    For c = 6 To UBound(arr, 2) Step 1
                        If arr(1, c) <= endDate Then
                            If IsNumeric(arr(r, c)) Then
                                If arr(r, c) > 0 Then
                                    k = k + 1
                                    arrRS(k, 1) = arr(r, 1)
                                    arrRS(k, 2) = 1111000570
                                    arrRS(k, 3) = arr(1, c)
                                    arrRS(k, 4) = arr(1, c)
                                    arrRS(k, 5) = arr(r, c)
                                    arrRS(k, 6) = today
                                End If
                            End If
                        End If
                    Next
                End If
            End If
        End If
    End If
Next
With targetWS
    lr = WorksheetFunction.Max(.Range(startCol & startRow - 1).CurrentRegion.SpecialCells(xlCellTypeLastCell).Row, startRow)
    .Range(startCol & startRow & ":" & startCol & lr).Resize(, 6).ClearContents
    If k > 0 Then .Range(startCol & startRow).Resize(k, 6) = arrRS
End With
End Sub

trong cửa số VBA double-click vào Sheet6(7) dán cái này vào
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$2" Then
    hello67 Sheet6, Target.Value, 7, "B"
End If
End Sub
 
Sheet 6 mình chạy ok , nhưng sheet7 thì báo lỗi cậu ạ Capture.JPG
 
Lọc hay quá! Lúc nào mình nhờ lại các bạn lọc giúp mình file ngày xưa mình không làm được trên Access nhé!
 
cái sub hello67 là để dùng chung giữa 2 sheet "6" và "7"
nên phải chèn thêm 1 module mới
bỏ sub hello67 vào trong module mới đó

Dovean, cậu kiểm tra lại điều kiện lấy giúp mình, 2 sheet này điều kiện là khác nhau nên mình nghĩ code chỉ đúng với sheet "6" mà không đúng với sheet "7"

[TABLE="width: 422"]
[TR]
[TD]Điều kiện lọc DL của sheet "7"
Convert từ sheet Atual[/TD]
[/TR]
[TR]
[TD]Điều kiện lấy dữ liệu :[/TD]
[/TR]
[TR]
[TD] Cột F8 : lấy dữ liệu với Actual[/TD]
[/TR]
[TR]
[TD] Cột E8 lấy dữ liệu với Assy (Riêng assy không thôi chứ không có assy1,2,3..)[/TD]
[/TR]
[TR]
[TD]Vùng dữ liệu là : H8 : AM:8[/TD]
[/TR]
[TR]
[TD][/TD]
[/TR]
[TR]
[TD]Mong muốn : Khi người dùng chọn ngày tháng thì sẽ list các dữ[/TD]
[/TR]
[TR]
[TD]liệu từ ngày được chọn trở về đầu tháng có trong[/TD]
[/TR]
[TR]
[TD]vùng dữ liệu tương ứng với item trong Cột C[/TD]
[/TR]
[TR]
[TD][/TD]
[/TR]
[TR]
[TD]Ví dụ : mình chọn ngày tháng là 20150712 thì sẽ list[/TD]
[/TR]
[TR]
[TD] tất cả các dữ liệu từ ngày 12/7 trở về 30/06[/TD]
[/TR]
[TR]
[TD][/TD]
[/TR]
[TR]
[TD][/TD]
[/TR]
[/TABLE]
 
Dovean, cậu kiểm tra lại điều kiện lấy giúp mình, 2 sheet này điều kiện là khác nhau nên mình nghĩ code chỉ đúng với sheet "6" mà không đúng với sheet "7"

[TABLE="width: 422"]
[TR]
[TD]Điều kiện lọc DL của sheet "7"
Convert từ sheet Atual[/TD]
[/TR]
[TR]
[TD]Điều kiện lấy dữ liệu :[/TD]
[/TR]
[TR]
[TD] Cột F8 : lấy dữ liệu với Actual[/TD]
[/TR]
[TR]
[TD] Cột E8 lấy dữ liệu với Assy (Riêng assy không thôi chứ không có assy1,2,3..)[/TD]
[/TR]
[TR]
[TD]Vùng dữ liệu là : H8 : AM:8[/TD]
[/TR]
[TR]
[TD][/TD]
[/TR]
[TR]
[TD]Mong muốn : Khi người dùng chọn ngày tháng thì sẽ list các dữ[/TD]
[/TR]
[TR]
[TD]liệu từ ngày được chọn trở về đầu tháng có trong[/TD]
[/TR]
[TR]
[TD]vùng dữ liệu tương ứng với item trong Cột C[/TD]
[/TR]
[TR]
[TD][/TD]
[/TR]
[TR]
[TD]Ví dụ : mình chọn ngày tháng là 20150712 thì sẽ list[/TD]
[/TR]
[TR]
[TD] tất cả các dữ liệu từ ngày 12/7 trở về 30/06[/TD]
[/TR]
[TR]
[TD][/TD]
[/TR]
[TR]
[TD][/TD]
[/TR]
[/TABLE]

bạn nghĩ vậy hay bạn đã thấy code cho ra kết quả sai ????
 
theo kết quả chạy được thì mình thấy chưa đúng,
cậu xem ảnh mình đính kèm nhé.

Capture1.jpg
với sheet "7" thì Cột F8 : lấy dữ liệu với Actual
 
theo kết quả chạy được thì mình thấy chưa đúng,
cậu xem ảnh mình đính kèm nhé.

View attachment 146169
với sheet "7" thì Cột F8 : lấy dữ liệu với Actual

đúng là đã nhầm . sửa lại như vầy

Mã:
Public Sub hello67(targetWS As Worksheet, Optional ByVal endDate As Variant, _
Optional ByVal startRow As Integer = 5, Optional ByVal startCol As String = "C", _
Optional ByVal colF As String = "Stock", Optional ByVal ar As Boolean = True)
Dim lr As Long, arr As Variant, r As Long, c As Long, k As Long, arrRS As Variant, today As Variant
lr = Sheet8.UsedRange.SpecialCells(xlCellTypeLastCell).Row
arr = Sheet8.Range("C8:AM" & lr).Value
today = Format(Date, "yyyyMMdd")
If IsMissing(endDate) Then endDate = Sheet8.[AM8].Value
If IsEmpty(endDate) Then endDate = -1
ReDim arrRS(1 To 500000, 1 To 6)
For r = 2 To UBound(arr) Step 1
    If arr(r, 4) = colF Then
        If InStr(arr(r, 3), "Assy") > 0 Then
            If ar Or arr(r, 3) = "Assy" Then
                If IsNumeric(arr(r, 2)) Then
                    If arr(r, 2) > 0 Then
                        For c = 6 To UBound(arr, 2) Step 1
                            If arr(1, c) <= endDate Then
                                If IsNumeric(arr(r, c)) Then
                                    If arr(r, c) > 0 Then
                                        k = k + 1
                                        arrRS(k, 1) = arr(r, 1)
                                        arrRS(k, 2) = 1111000570
                                        arrRS(k, 3) = arr(1, c)
                                        arrRS(k, 4) = arr(1, c)
                                        arrRS(k, 5) = arr(r, c)
                                        arrRS(k, 6) = today
                                    End If
                                End If
                            End If
                        Next
                    End If
                End If
            End If
        End If
    End If
Next
With targetWS
    lr = WorksheetFunction.Max(.Range(startCol & startRow - 1).CurrentRegion.SpecialCells(xlCellTypeLastCell).Row, startRow)
    .Range(startCol & startRow & ":" & startCol & lr).Resize(, 6).ClearContents
    If k > 0 Then .Range(startCol & startRow).Resize(k, 6) = arrRS
End With
End Sub

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$2" Then
    hello67 Sheet6, Target.Value, 7, "B", "Actual", False
End If
End Sub

sub hello6() cứ để như cũ
 
trước tiên là cám ơn Dovean nhiều nhé, vì đã nhiệt tình giúp minh.
mình sẽ test dữ liệu đã, có gì lại mong bạn giúp
 
Mã:
Public Sub hello8()
Dim arr As Variant, r As Long, c As Integer, k As Long, lr As Long, today As Variant
Dim rsArr As Variant, codeNames As Variant
today = Format(Date, "yyyyMMdd")
arr = Sheet4.Range("BM7:CV368").Value
codeNames = Sheet4.Range("Z7:Z368").Value
ReDim rsArr(1 To 500000, 1 To 8)
For r = 2 To UBound(arr) Step 1
    If arr(r, 36) > 0 Then
        For c = 1 To UBound(arr, 2) - 1 Step 1
            If arr(r, c) > 0 Then
                k = k + 1
                rsArr(k, 1) = arr(1, c)
                rsArr(k, 2) = 1111000570
                rsArr(k, 3) = codeNames(r, 1)
                rsArr(k, 4) = arr(r, c)
                rsArr(k, 5) = today
                rsArr(k, 6) = 99991231
                rsArr(k, 7) = today
                rsArr(k, 8) = c
            End If
        Next
    End If
Next
With Sheet9
    lr = WorksheetFunction.Max(.Range("C4").CurrentRegion.SpecialCells(xlCellTypeLastCell).Row, 5)
    .Range("C5:C" & lr).Resize(, 8).ClearContents
    If k > 0 Then .Range("C5").Resize(k, 8).Value = rsArr
    .Range("C5").Resize(k, 8).Sort .[J5], xlAscending
    .Range("J5").Resize(k).ClearContents
End With
End Sub
 
Thật sự cám ơn Doveandrose nhé, những giúp đỡ của bạn đã giúp mình rất nhiều. Nếu ở Hà Nội, Mình muốn mời bạn đi uống cafe :)
 
Mình đã fix được rồi nhé, %#^#$
 
DoveanDrose có online không, xem giúp mình 1 file này với.

mình có 1 vấn đề cần giúp đỡ, bạn xem qua file đính kèm hộ mình nhé.
Mong các thầy và các bạn nào có thể làm được thì giúp mình với ạ.

Xin cảm ơn nhiều.
 

File đính kèm

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

Back
Top Bottom