Code lọc dữ liệu theo điều kiện ngày lớn nhất (1 người xem)

Liên hệ QC

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

Cao Mạnh Sơn

Tôi đồng ý
Tham gia
26/11/07
Bài viết
568
Được thích
586
Tôi muốn lọc dữ liệu các đơn vị đang sản xuất các mã hàng trong 1 ngày bất kỳ, tôi đã làm bằng công thức rồi nhưng muốn dùng code VBA, tôi chỉ lọc được các giá trị ngày bằng với điều kiện.
Bây giờ tôi muốn lọc tất cả các mã hàng đang được sản xuất tại các tổ sx, đương nhiên bao gồm các mã hàng có ngày vào chuyền gần nhất so với ngày cần lọc, các giá trị ngày trước ngày gần nhất sẽ bị loại bỏ, các giá trị sau ngày cần lọc sẽ chưa được tính đến.
Tôi đã ghi chú trong file đính kèm. Mong được giúp đỡ, xin cám ơn
 

File đính kèm

Em thấy file của bác có thời gian là duy nhất mà! Vậy để đơn giản quá trình lọc thì chỉ việc lấy giá trị dòng ra là xong.
 

File đính kèm

Upvote 0
Em thấy file của bác có thời gian là duy nhất mà! Vậy để đơn giản quá trình lọc thì chỉ việc lấy giá trị dòng ra là xong.
Vậy là bạn chưa hiểu ý tôi rồi.
Trong file dữ liệu đương nhiên là duy nhất, bạn hình dung nhé: ngày 28/10 T1 XN1 vào sx MH1 đương nhiên sang ngày 29/10 vẫn đang làm MH1.ở đây mình cần phải lọc ra tùng tổ đang làm từng MH trong từng ngày chứ không phải là từng ngày có những tổ nào vào MH mới
 
Upvote 0
Vậy là bạn chưa hiểu ý tôi rồi.
Trong file dữ liệu đương nhiên là duy nhất, bạn hình dung nhé: ngày 28/10 T1 XN1 vào sx MH1 đương nhiên sang ngày 29/10 vẫn đang làm MH1.ở đây mình cần phải lọc ra tùng tổ đang làm từng MH trong từng ngày chứ không phải là từng ngày có những tổ nào vào MH mới
Bạn thử file này xem sao ?
 

File đính kèm

Upvote 0
Yêu cầu của bác không khó nhưng nhìn bảng tính thì khó hiểu.
 
Upvote 0
Yêu cầu của bác không khó nhưng nhìn bảng tính thì khó hiểu.
Anh Hướng quan tâm bắt đầu từ cột V,tôi lý giải thế này nhé:
tôi có mã hàng MH1, ngày 28/10 tôi triển khai vào sản xuất bố trí vào các tổ của các XN,
như vậy 1 mã hàng có nhiều tổ sx, Tiếp tục sang mã thứ 2, tôi bố trí các tổ khác,.....
vấn đề tôi cần là khi xem xét 1 tổ sẽ có 1 quá trình ví dụ từ ngày 1-10 sản xuất MH1,từ 11 đến 20 sx MH2.....
vậy ngày bất kỳ cần xem xét phải biết tổ đó sx MH nào.VD ngày 15/10 kết quả là MH2
áp dụng tổng quát cho n xí nghiệp và m tổ sx
anh giúp tôi nhé
 
Upvote 0
Tác giả phải biết rằng đang trao đổi với những người ngoại đạo!

Hay là thế này đi;

Bạn dùng chức năng [Table ]. . . [/Table] của diễn đàn để thể hiện hai kết quả bạn phải & sẽ đạt được nếu trang Sheet2 tại [C1] sẽ là 29/10 & 2/11 để bọn này hình dung xem sao

Mấy hôm nay cũng rất cố công nhưng chưa hiểu mô tê ra răng cả?

Đúng như Hướng nói, hiểu nhau rồi sẽ không khó với nhau nữa!:-= --=0 :-=
 
Upvote 0
Hay là thế này đi;

Bạn dùng chức năng [Table ]. . . [/Table] của diễn đàn để thể hiện hai kết quả bạn phải & sẽ đạt được nếu trang Sheet2 tại [C1] sẽ là 29/10 & 2/11 để bọn này hình dung xem sao

Mấy hôm nay cũng rất cố công nhưng chưa hiểu mô tê ra răng cả?

Đúng như Hướng nói, hiểu nhau rồi sẽ không khó với nhau nữa!:-= --=0 :-=
Làm khó cho các bác quá. em gửi chi tiết yêu cầu lại nhé
 

File đính kèm

Upvote 0
Làm khó cho các bác quá. em gửi chi tiết yêu cầu lại nhé
Bài của bạn đơn giản vâỵ thì cần gì phải dùng đến VBA
file mình làm là dùng công thức, bạn cứ thử gán một ngày 10/29/2009 hoặc 11/2/2009 xem kết quả có đúng như ý bạn không? hoặc là hàm now() để tính cho hiện tại.
sorry! nếu bạn muốn dùng CODE cho Pro hơn thì mình xin rút lui.
 
Lần chỉnh sửa cuối:
Upvote 0
Anh Hướng quan tâm bắt đầu từ cột V,tôi lý giải thế này nhé:
tôi có mã hàng MH1, ngày 28/10 tôi triển khai vào sản xuất bố trí vào các tổ của các XN,
như vậy 1 mã hàng có nhiều tổ sx, Tiếp tục sang mã thứ 2, tôi bố trí các tổ khác,.....
vấn đề tôi cần là khi xem xét 1 tổ sẽ có 1 quá trình ví dụ từ ngày 1-10 sản xuất MH1,từ 11 đến 20 sx MH2.....
vậy ngày bất kỳ cần xem xét phải biết tổ đó sx MH nào.VD ngày 15/10 kết quả là MH2
áp dụng tổng quát cho n xí nghiệp và m tổ sx
anh giúp tôi nhé
Tôi hiểu thế này không bíêt có đúng ý Bác không.
- Cần lấy báo cáo là ngày dd/mm/yy. (ngày t)
- Trích lọc duy nhất theo Tổ X, XN Y và MH Z theo ngày < = ngày t.
- List những tổ, XN, MH mà có ngày max (gần = ngày t)
Nhưng với dữ liệu trên thì cũng hơi khó với thuật giải nêu trên.
Ví X, Y là biến và không xác định max => số cột tham chiếu không dự trù được.
Nếu dữ liệu như sau thì sẽ dễ hơn. Dữ liệu này là của hàng 10.

KH2---MH2---29/10---XN1---TO2
KH2---MH2---29/10---XN2---TO1
KH2---MH2---29/10---XN3---TO2
KH2---MH2---29/10---XN4---TO1

Không bíêt có hiểu đúng ý Bác.
 
Upvote 0
Bạn thử với macro sau xem sao

PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, [c1]) Is Nothing Then
   Dim Sh As Worksheet, Rng As Range, sRng As Range, Clls As Range
   Dim mRng As Range, sRng1 As Range
   Dim Format_ As String
   Dim Dat As Date, Dat0 As Date, Jj As Byte
   
   Set Sh = Sheet1:              Range("D5:D35").Clear
   Set Rng = Sh.Range(Sh.[v8], Sh.[v8].End(xlDown))
   Format_ = Rng.Cells(2, 0).NumberFormat
   Rng.NumberFormat = "MM/dd/yyyy"
   Dat0 = Format([c1].Value, "mm/dd/yyyy")
   For Jj = 0 To 9
      Dat = Dat0 - Jj
      Set sRng = Rng.Find(Dat, , xlFormulas, xlWhole)
      If Not sRng Is Nothing Then
         Set mRng = Sh.Range(sRng.Offset(, 1), Sh.Cells(sRng.Row, "iV").End(xlToLeft))
         For Each Clls In Range("B6:B17")
            Set sRng1 = mRng.Find(Clls.Value)
            If Not sRng1 Is Nothing Then
               If sRng1.Offset(, 1).Value = Clls.Offset(, 1).Value Then
                  If Clls.Offset(, 2).Value = "" Then _
                     Clls.Offset(, 2).Value = Sh.Cells(sRng.Row, "C")
               End If
            Else
            End If
         Next Clls
      End If
   Next Jj
   Rng.NumberFormat = Format_
   Jj = [B4].Interior.ColorIndex
   [B4].Resize(, 3).Interior.ColorIndex = IIf(Jj > 41, 34, Jj + 1)
 End If
End Sub


Chú ý:

(1) Các tên xí nghiệp của 2 trang tính nên giống nhau, bớt công đoạn trong tìm kiếm;

(2) Macro chỉ làm việc trong 9 ngày kể từ mốc thời gian cần khảo sát; Nếu trong chu trình sản xuất của bạn có khác hơn thì cho ý kiến để chúng chỉnh sửa;

(3) Hiện tại tại [C1] đang có hộp chọn ngày; Nếu bạn muốn vẫn xài hàm =TODAY() thì phải chỉnh đổi vài chổ; Bạn cứ yếu cầu để chúng ta thảo luận tiếp;

(4) Vài ý kiến phản hồi khác của bạn . . .


Thân ái!
 

File đính kèm

Upvote 0
Tôi hiểu thế này không bíêt có đúng ý Bác không.
- Cần lấy báo cáo là ngày dd/mm/yy. (ngày t)
- Trích lọc duy nhất theo Tổ X, XN Y và MH Z theo ngày < = ngày t.
- List những tổ, XN, MH mà có ngày max (gần = ngày t)
Nhưng với dữ liệu trên thì cũng hơi khó với thuật giải nêu trên.
Ví X, Y là biến và không xác định max => số cột tham chiếu không dự trù được.
Nếu dữ liệu như sau thì sẽ dễ hơn. Dữ liệu này là của hàng 10.

KH2---MH2---29/10---XN1---TO2
KH2---MH2---29/10---XN2---TO1
KH2---MH2---29/10---XN3---TO2
KH2---MH2---29/10---XN4---TO1

Không bíêt có hiểu đúng ý Bác.
Bác hiểu như vậy chắc đúng rồi nhưng dũ liệu thì khó xắp xếp quá.
Khi tôi sử dụng công thức tôi phải dùng hàm Dmax để lọc ta ngày lớn nhất của 1 tổ sx sau đó dò tìm từ ngày lớn nhất và mã hàng tương ứng để tìm ra tên tổ, rồi lần nữa từ tên tổ để dò lấy ngày vào sx và mã hàng đang sản xuất
To Bác SA_DQ
em cần theo dõi ngày hiện tại hay ktra 1 ngày bất kỳ trong 365 ngày của năm nên danh sách Validation sẽ không phù hợp, thứ hai là em không muốn bị khống chế thời gian, em thấy mới có ít dòng dữ liệu đã thấy hơi chậm, nếu khoảng 2000 dòng và số ngày không hạn chế thì không biết có lâu không nhỉ.
 
Lần chỉnh sửa cuối:
Upvote 0
(1) Vì em cần theo dõi ngày hiện tại hay ktra 1 ngày bất kỳ trong 365 ngày của năm nên danh sách Validation sẽ không phù hợp,
(2) thứ hai là em không muốn bị khống chế thời gian, em thấy mới có ít dòng dữ liệu đã thấy hơi chậm, nếu khoảng 2000 dòng và số ngày không hạn chế thì không biết có lâu không nhỉ.
(1) Bạn có thể bỏ cái Validation. . ấy đi; Không sao cả. Lúc đó bạn cứ việc nhập vô cái ô [C1] thân thương đó & macro sẽ thực thi sau khi bạn {ENTER}

Số ngày tối đa chỉ nên là < 367 ngày; Nhưng dù vậy cũng phải khai báo lại biến Jj có kiểu Interger mới đặng.
Nhưng đảm bảo sẽ nhanh hơn nhiều so với công thức, một khi dữ liệu càng nhiều, càng thấy nhanh hơn công thức. (Vì trong macro có xài các phương thức tìm kiếm mà!
Việc kiểm nghiệm với 2.000 dòng dữ liệu & 5 -7 trăm ngày gì đó là quyền của bạn;
Nếu thấy kết quả bạn đưa ra sau thử nghiệm là quá chậm thì chúng ta sẽ nghĩ tiếp vế việc cải tiến

Chúc vui!
 
Upvote 0
Bác hiểu như vậy chắc đúng rồi nhưng dũ liệu thì khó xắp xếp quá.
Khi tôi sử dụng công thức tôi phải dùng hàm Dmax để lọc ta ngày lớn nhất của 1 tổ sx sau đó dò tìm từ ngày lớn nhất và mã hàng tương ứng để tìm ra tên tổ, rồi lần nữa từ tên tổ để dò lấy ngày vào sx và mã hàng đang sản xuất
To Bác Trí
Vì em cần theo dõi ngày hiện tại hay ktra 1 ngày bất kỳ trong 365 ngày của năm nên danh sách Validation sẽ không phù hợp, thứ hai là em không muốn bị khống chế thời gian, em thấy mới có ít dòng dữ liệu đã thấy hơi chậm, nếu khoảng 2000 dòng và số ngày không hạn chế thì không biết có lâu không nhỉ.
Xin hỏi Bác
- Cột V (Ngày vào SX) là đã sắp xếp liên tục chưa? Và mỗi giá trị ngày sẽ hiển thị là 1 dòng, có lúc nào V9 là 28/10 và V10, V11 cùng là 28/10 => dùng match lấy dòng cuối.
- Toàn bộ thông tin về Tổ, XN thì chỉ hiển thị trong các cột từ W -> AH thôi hay sao => lấy dm tổ và XN.
Nếu OK, víêt 1 code để lấy theo data như của Bác.
 
Upvote 0
Xin hỏi Bác
- Cột V (Ngày vào SX) là đã sắp xếp liên tục chưa? Và mỗi giá trị ngày sẽ hiển thị là 1 dòng, có lúc nào V9 là 28/10 và V10, V11 cùng là 28/10 => dùng match lấy dòng cuối.
- Toàn bộ thông tin về Tổ, XN thì chỉ hiển thị trong các cột từ W -> AH thôi hay sao => lấy dm tổ và XN.
Nếu OK, víêt 1 code để lấy theo data như của Bác.
Em ít tuổi hơn bác nên cứ gọi em là em.
Cột V là ngày vào sx bất kỳ không theo thứ tự nào hết vì khi phát sinh mã hàng mới là phải nhập dữ liệu vào data,qua rất nhiều ngày,nhiều công đoạn khi đủ đk mới đưa vào sx nên không thể bố trí lần lượt được. mỗi mã hàng sẽ có duy nhất 1 ngày vào chuyền nhưng cột ngày sẽ có nhiều ngày trùng nhau vì 1 ngày có thể bố trí nhiều mã hàng.
từ cột W-AH là thông tin tổ vào sx,vì 1 xn sẽ có nhiều tổ sx,em dùng validation để lấy tên tổ theo lựa chọn của XN nên cột xn và tổ là tách. Trong vùng đó tên xn và tổ cũng là bất kỳ không theo qui luật nào cả.Cột XN có thể có các xn 1,2,3,4...
Vậy mới khó chứ Bác
 
Upvote 0
Mỗi mã hàng sẽ có duy nhất 1 ngày vào chuyền nhưng cột ngày sẽ có nhiều ngày trùng nhau vì 1 ngày có thể bố trí nhiều mã hàng. . . .
Vậy mới khó chứ Bác

Macro của mình chưa đếm xỉa đến việc này! Nhưng cho hỏi thêm, (Một câu ngệch), rằng 1 ngày hai mặt hàng nhưng có khi nào 1 tổ làm 2 mặt hàng trong ngày không vậy?
(Nếu có thì chép sao đây ta, sang cột bên cạnh ư?)

Hay bạn chịu khó đưa lên vài tháng dữ liệu xem sao?!, Một khi đã hiểu rồi, muốn đi đến tận cùng của vấn đề í mà!

--=0 :-= --=0
 
Upvote 0
Macro của mình chưa đếm xỉa đến việc này! Nhưng cho hỏi thêm, (Một câu ngệch), rằng 1 ngày hai mặt hàng nhưng có khi nào 1 tổ làm 2 mặt hàng trong ngày không vậy?
(Nếu có thì chép sao đây ta, sang cột bên cạnh ư?)

Hay bạn chịu khó đưa lên vài tháng dữ liệu xem sao?!, Một khi đã hiểu rồi, muốn đi đến tận cùng của vấn đề í mà!

--=0 :-= --=0
Ờ há.
Bác không nêu vụ này chắc em bỏ qua mất, có tình trạng 1 ngày 1 tổ bố trí không phải 2 mà nhiều mã nữa
em gửi File có thêm dữ liệu nhé
 

File đính kèm

Upvote 0
Với dữ liệu mới đưa lên của bạn, ngoài XN(i) còn có PKT,
Ngoài các tổ T1 & T2 còn có các tổ khác nữa;

Vậy xin hởi các tổ này hay PKT có để sẵn trên Sheet2 hay macro phải tự tìm & tự điền vô các cột 'B:D' bắt đầu từ dòng thứ 6 vậy?

Chờ tin bạn!
 
Upvote 0
Với dữ liệu mới đưa lên của bạn, ngoài XN(i) còn có PKT,
Ngoài các tổ T1 & T2 còn có các tổ khác nữa;

Vậy xin hởi các tổ này hay PKT có để sẵn trên Sheet2 hay macro phải tự tìm & tự điền vô các cột 'B:D' bắt đầu từ dòng thứ 6 vậy?

Chờ tin bạn!
Chào bạn
trong vùng dữ liệu của mình có cột XN và cột tên tổ. Bạn chỉ cần quan tâm đến điều kiện này thôi. Dữ liệu đó là đột xuất có đơn vị khác bổ sung nên không cần theo dõi
 
Upvote 0
ủa, sau một hồi trông tin nhưng không thấy ai trả lời hết, yêu cầu của tôi khó quá chăng
 
Upvote 0
Thế bác đã nghiên cứu code của bác SA_DQ chưa?
tất nhiên tôi đã xem và cũng đã cho ý kiến , vì code giới hạn thời gian và không sử dụng được hàm Today(), tôi cũng đã nêu chi tiết thêm 1 số yêu cầu cụ thể rồi. Tôi cũng đang chờ bác SA_DQ chỉnh giúp theo mong muốn của tôi.
ai có phương án khác cố gắng giúp tôi
 
Upvote 0
Ái dza, chúng ta lại chờ nhau. . .

tất nhiên tôi đã xem và cũng đã cho ý kiến , (1) vì code giới hạn thời gian và (2) không sử dụng được hàm Today(), tôi cũng đã nêu chi tiết thêm 1 số yêu cầu cụ thể rồi. Tôi cũng đang chờ bác SA_DQ chỉnh giúp theo mong muốn của tôi.
ai có phương án khác cố gắng giúp tôi

Hai việc này chỉ cần sửa một chút thôi mà! Mình cứ tưởng bạn sẽ tự sửa được

Hãy xem thêm trong file đính kèm

PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, [c1]) Is Nothing Then
   Dim Sh As Worksheet, Rng As Range, sRng As Range, Clls As Range
   Dim mRng As Range, sRng1 As Range
   Dim Format_ As String
   Dim Dat As Date, Dat0 As Date, Jj As Integer '<-|'
   
   Set Sh = Sheet1:              Range("D5:D35").Clear
   Set Rng = Sh.Range(Sh.[v8], Sh.[v8].End(xlDown))
   Format_ = Rng.Cells(2, 0).NumberFormat
   Rng.NumberFormat = "MM/dd/yyyy"
   Dat0 = Format([c1].Value, "mm/dd/yyyy")
   For Jj = 0 To 366
      Dat = Dat0 - Jj
      Set sRng = Rng.Find(Dat, , xlFormulas, xlWhole)
      If Not sRng Is Nothing Then
         Set mRng = Sh.Range(sRng.Offset(, 1), Sh.Cells(sRng.Row, "iV").End(xlToLeft))
         For Each Clls In Range("B6:B17")
            Set sRng1 = mRng.Find(Clls.Value)
            If Not sRng1 Is Nothing Then
               If sRng1.Offset(, 1).Value = Clls.Offset(, 1).Value Then
                  If Clls.Offset(, 2).Value = "" Then
                     Clls.Offset(, 2).Value = Sh.Cells(sRng.Row, "C")
                     Clls.Offset(, 3).Value = Dat
                  End If
               End If
            Else
            End If
         Next Clls
      End If
   Next Jj
   Rng.NumberFormat = Format_
   On Error Resume Next
   Jj = [B4].Interior.ColorIndex
   [B4].Resize(, 3).Interior.ColorIndex = IIf(Jj > 41, 34, Jj + 1)
 End If
End Sub
 

File đính kèm

Upvote 0
Hai việc này chỉ cần sửa một chút thôi mà! Mình cứ tưởng bạn sẽ tự sửa được

Bác ơi thời điểm này em đang học dịch code và ứng dụng được cái gì thì ứng dụng chứ chưa tự sửa code đuợc, bác đừng cười em nhé.
Để em sửa vào file dữ liệu của em cái xem kết quả đạt chưa nhé, em báo cáo kết quả sau.
To: anh Hướng:
cái anh này giỏi vác khoan đi khoan các nơi có mỗi cái việc nhỏ nhỏ này(đấy là theo ý của anh,không phải ý của tôi) vậy mà anh chỉ đứng ngoài cuộc không chịu ra tay, bữa nào gặp tôi nhất định phạt anh 1 chầu rượu mới được
 
Upvote 0
Gửi Bác SA_DQ
có 1 số điểm em sửa lại như sau:Định dạng ngày em sài dd/mm/yyyy. vì số XN và số tổ sx là thay đổi nên em thêm biến xác định dòng cuối của vùng dữ liệu Er, tại Sheet theodoi em set pass nên em thêm vào macro lệnh Unprotect, vì có mã hàng em bố trí vào chuyền từ đầu năm hoặc theo dõi liên tục sang năm sau nên giá trị Jj em gán cho đến 1000. Em muốn định dạng cột mã hàng là text để khi lọc dữ liệu xong không bị lộn xộn. Bác thêm cho em boder vùng có dữ liệu không dùng CF.
Và quan trọng hơn là kết quả chưa thoả mãn hết các điều kiện.
em gửi file đính kèm chi tiết trong file, bác giúp em nhé.
 

File đính kèm

Upvote 0
Sất bất sang bang với chúng mấy ngày nay luôn đó

PHP:
Option Explicit
Dim Sh As Worksheet, XiNg As Range, sRng As Range
Dim Dat As Date
Private Sub Worksheet_Change(ByVal Target As Range)
 Const SoNgay As Integer = 999
 
 If Not Intersect(Target, [D3]) Is Nothing Then
   Dim Rng As Range, Clls As Range
   Dim mRng As Range, sRng1 As Range
   Dim Addr1 As String:                         Dim Dat0 As Date
   Dim Er As Long, Jj As Integer, Dem As Integer, VTr As Byte
   ReDim Vung(SoNgay) As Range:                 ReDim MDL(SoNgay, 1)
   
   Er = Range("B65000").End(xlUp).Row:          Set XiNg = Range("B6:B" & Er)
   Set Sh = Sheets("TheoDoi"):              Range("D6:G" & Er + 10).Clear
   Set Rng = Sh.Range(Sh.[v8], Sh.[v8].End(xlDown))
   Rng.NumberFormat = "dd/mm/yyyy"
   Dat0 = Format([D3].Value, "dd/mm/yyyy")
   For Jj = 0 To SoNgay
      Dat = Dat0 - Jj
      If Dat < Sh.[V9].Value Then Exit For
      Set sRng = Rng.Find(Dat, , xlFormulas, xlWhole)
      If Not sRng Is Nothing Then
         Addr1 = sRng.Address
         Do
            Dem = Dem + 1
            Set Vung(Dem) = Sh.Range(sRng.Offset(, 1), Sh.Cells(sRng.Row, "iV").End(xlToLeft))
            MDL(Dem, 1) = Sh.Cells(sRng.Row, "C").Value
            MDL(Dem, 0) = Dat
           Set sRng = Rng.FindNext(sRng)
         Loop While Not sRng Is Nothing And sRng.Address <> Addr1
      End If
   Next Jj
   For Jj = 1 To Dem
      TimLan2 Vung(Jj), MDL(Jj, 1), MDL(Jj, 0)
   Next Jj
   Jj = [B5].Interior.ColorIndex
   [B5].Resize(, 5).Interior.ColorIndex = IIf(Jj <> 41, Jj + 1, 34)
 End If
 Range("D3").Select
End Sub
Mã:
[B]Sub TimLan2(mRng As Range, MaHg As Variant, Ngay1)[/B]
 Dim Clls As Range, sRng1 As Range
 Dim Addr2 As String
 
 For Each Clls In mRng
   Set sRng1 = XiNg.Find(Clls.Value)
   If Not sRng1 Is Nothing Then
      Addr2 = sRng1.Address
      Do
         If sRng1.Offset(, 1).Value = Clls.Offset(, 1).Value Then
            If sRng1.Offset(, 3).Value = "" Then
               sRng1.Offset(, 3).Value = MaHg
               sRng1.Offset(, 2).Value = Format(Ngay1, "dd/mm/yyyy")
            ElseIf sRng1.Offset(, 2) = Format(Ngay1, "DD/mm/yyyy") And _
               sRng1.Offset(, 3).Value <> MaHg Then
               sRng1.Offset(, 4).Value = MaHg
            End If
         End If
         Set sRng1 = XiNg.FindNext(sRng1)
      Loop While Not sRng1 Is Nothing And sRng1.Address <> Addr2
   End If
 Next Clls
[B]End Sub[/B]

Xem thêm trong file đính kèm!
 

File đính kèm

Upvote 0
Hoá ra vấn đề em hỏi không phải là đơn giản, làm bác SA_DQ ít nhất là giành 2 ngày nghỉ cuối tuần để giúp em. Cách nào để em hậu tạ bác đây?
Em mới ktra sơ bộ có 1 số vấn đề như sau:
Giá trị ngày tại cell V9 không phải là giá trị nhỏ nhất trong cột, nếu nó là ngày hôm nay thì lệnh sẽ bị thoát ra mất. Em nghĩ rằng cần phải lấy giá trị ngày nhỏ nhất trong cột ngày chuyển đổi của Sheet1.
mặc dù các định dạng ngày đã set là dd/mm/yyyy nhưng giá trị ngày trả về tại sheet2 không giống nhau, 1 số giá trị là text thì hiển thị dạng dd/mm/yyyy, một số giá trị là number thì hiển thị dạng mm/dd/yyyy em nhìn thấy hơi lộn xộn.
Em đã ktra lại code và format tất cả các vùng có chứa ngày theo dd/mm/yyyy nhưng kết quả vẫn không đạt
Bác chỉnh giúp em nhé
 
Upvote 0
Em mới ktra sơ bộ có 1 số vấn đề như sau:
(1) Giá trị ngày tại cell V9 không phải là giá trị nhỏ nhất trong cột, nếu nó là ngày hôm nay thì lệnh sẽ bị thoát ra mất. Em nghĩ rằng cần phải lấy giá trị ngày nhỏ nhất trong cột ngày chuyển đổi của Sheet1.
Bạn dùng dòng lệnh này thay thế cho dòng lệnh cũ:

PHP:
If Dat < WorksheetFunction.Min(Rng) Then Exit For     '<=|'
Còn vụ định dạng ngày thật sự chưa biết nuốt nó bằng cách nào?
 
Upvote 0
Tạm thời hãy xài cái ni, sau hẵn hay

PHP:
Option Explicit
Sub DateFormat()
 Dim Clls As Range
 For Each Clls In Selection
   If Clls.Value <> "" And Application.International(xlMDY) Then
      If Right("0" & CStr(Day(Clls)), 2) > "12" Then
         Clls.Interior.ColorIndex = 35
      Else
         Clls.Value = Day(Clls) & "/" & Month(Clls) & "/" & Year(Clls)
      End If
   End If
 Next Clls
End Sub
(Chọn vùng "D5:D30" & chạy macro)
Không chịu trách nhiệm nếu đem số liệu do macro tạo ra để tính toán tiếp theo đó!
 
Upvote 0
Tôi đã chạy thử code của bạn nhưng chạy xong nó thành bức tranh khó tả tất nhiên 1 số cell trả về định dạng dd/mm/yyyy
Mong mọi người tiếp tục giải quyết giúp vấn đề này vì tôi thấy khó hiểu ngày 1/11 cho kết quả đúng tất định dạng nhưng ngày 4/44 cho kết quả sai...???
 
Upvote 0

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

Back
Top Bottom