Bạn giải thích rõ hơn một chút đi. Trong file, mình thấy dữ liệu vào và dữ liệu ra có gì khác nhau đâu? Có chăng chỉ hơn kém nhau về số ngày trong 2 bảng.Em chào các anh!
Có thể viết dùm em đoạn code chay vlookup tư động, yêu cầu em có viết trong file excel luôn rùi. Thanks in advance.
Mình vẫn chưa hiểu ở chỗ: Cấu trúc 2 bảng dữ liệu vào và dữ liệu ra hoàn toàn giống nhau, vậy thì mục đích của việc lập bảng dữ liệu ra là gì? Có phải là từ bảng dữ liệu vào rất lớn, trích lọc ra một số ngày (trong một khoảng thời gian) theo yêu cầu? Nếu đúng như vậy thì bạn tham khảo trong file nhé (nhớ Enable Macro thì code mới chạy được).Dạ. Em đâu có xài pivot table đâu anh. Đơn giản là em chỉ dùm hàm vlookup để lọc dữ liệu, anh có thể click vào ô H4 và ô I4 để xem cấu trúc hàm vlookup là sẽ hiểu liền ah. Thay em phải vlookup bằng tay thì cực quá, anh viết dùm em code chạy vlookup tự động luôn. Thực chất dữ liệu em làm rất lớn nhưng để dễ hiểu em chỉ đưa ra một ví dụ nhỏ thui ah.
Thanks Anh!
1. Vậy thì bạn muốn kết quả rơi vào trường hợp nào trong 3 trường hợp sau?Dạ, gần giống ý em rùi. Đúng là lọc ra một số ngày mình mong muốn nhưng anh có thể xem ở ô H8 và I8 đó anh có chữ #NA, tức là vào ngày 1/6/2010 thì không có nằm trong phần " dữ liệu đầu vào" nên khi dùm vlookup sẽ để là #NA. Anh có thể viết lại để giống y chan như trong file của em được không Anh?
Với lại hình như cái file anh gởi bị lỗi rùi. em dùng combobox để chạy mà nó báo lỗi.
Thanks Anh.
Em muốn có ngày 6/1/2010 và ở hai cột kế tiếp là #NA.
Do file hình nặng quá em up lên không được nhưng nó báo lỗi là: Run-times "91" và object variable or with block variable not set.
thanks Anh!
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range, eRow As Long
If Target.Address <> "$H$1" And Target.Address <> "$H$2" Then Exit Sub
On Error Resume Next
[G6] = [H1]
[G6].DataSeries Rowcol:=xlColumns, Step:=1, Stop:=[H2]
[H5:I5].Value = [B2:C2].Value
Set Rng = Range([G6], [G65536].End(xlUp)).Offset(, 1).Resize(, 2)
eRow = [A65536].End(xlUp).Row
Rng.FormulaR1C1 = "=VLOOKUP(RC7,R3C1:R" & eRow & "C3,COLUMNS(C7:C),0)"
Rng.Value = Rng.Value
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range, eRow As Long
If Target.Address <> "$H$1" And Target.Address <> "$H$2" Then Exit Sub
On Error Resume Next
Range("G6") = Range("H1")
Range("G6").DataSeries Rowcol:=xlColumns, Step:=1, Stop:=Range("H2")
Range("H5:I5").Value = Range("B2:C2").Value
Set Rng = Range(Range("G6"), Range("G65536").End(xlUp)).Offset(, 1).Resize(, 2)
eRow = Range("A65536").End(xlUp).Row
Rng.FormulaR1C1 = "=VLOOKUP(RC7,R3C1:R" & eRow & "C3,COLUMNS(C7:C),0)"
Rng.Value = Rng.Value
End Sub
Tôi nghĩ code sẽ vầy:Dạ. chạy được rồi. Nhưng Anh có thể chỉnh thêm một chút nữa dùm em được không. Hai cái ô "từ ngày" và ô "đến ngày" bỏ nó đi được không anh. Tại vì từ ô G6 đến ô G14 là những giá trị ngày mà em sẽ tự nhập vào với lại những ngày mà em nhập vào nó cũng không có liên tục nữa anh. Ví dụ ô G6 là ngày 1/2/2010 thì có khi em sẽ tự ghi vào ô G7 là ngày 1/5/2010. Nên anh chỉ lại dùm em đoạn code cho phù hợp hơn.
Thanks Anh.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim SrcRng As Range, DesRng As Range, fRng As Range, Clls As Range
On Error GoTo ExitSub
If Not Intersect(Range("G5:G1000"), Target) Is Nothing Then
Set SrcRng = Range([A3], [A100000].End(xlUp))
Set DesRng = Intersect(Range("G5:G1000"), Target)
For Each Clls In DesRng
If Clls.Value = "" Then
Clls.Offset(, 1).Resize(, 2).Value = ""
Else
Set fRng = SrcRng.Find(CDate(Clls.Value), , xlFormulas, xlWhole)
If Not fRng Is Nothing Then
Clls.Offset(, 1).Resize(, 2).Value = fRng.Offset(, 1).Resize(, 2).Value
Else
Clls.Offset(, 1).Resize(, 2).Value = CVErr(xlErrNA)
End If
End If
Next
End If
ExitSub:
End Sub
Trong code có đoạn:Anh có thể viết sửa lại dùm em chút, tại dữ liệu đầu vào của em rất lớn nên em muốn dữ liệu đầu và đầu ra nằm ở hai sheet khac nhau được không anh. Em cũng tư chỉnh sửa nhưng không được.
Thanks Anh.
Set SrcRng = Range([A3], [A100000].End(xlUp))
Set SrcRng = [COLOR=red][B]Sheets("Data")[/B][/COLOR].Range([COLOR=red][B]Sheets("Data")[/B][/COLOR].[A3], [COLOR=red][B]Sheets("Data")[/B][/COLOR].[A100000].End(xlUp))
Mình vẫn chưa hiểu ở chỗ: Cấu trúc 2 bảng dữ liệu vào và dữ liệu ra hoàn toàn giống nhau, vậy thì mục đích của việc lập bảng dữ liệu ra là gì? Có phải là từ bảng dữ liệu vào rất lớn, trích lọc ra một số ngày (trong một khoảng thời gian) theo yêu cầu? Nếu đúng như vậy thì bạn tham khảo trong file nhé (nhớ Enable Macro thì code mới chạy được).