Chưa hiểu ý bạn lắm, bạn cần lấy dữ liệu gì qua sheet2, Date hay Close?Em chào Anh!
Có thể giúp em xây dựng code chạy vlookup tự động từ sheet 1 sang sheet 2 của file excel đươc không ah. Em đã làm sẵn cho mã FPT, có cách nào mình chạy tự động cho hai mã PET va POT không ạh.
Thanks các Anh.
Bạn dùng công thức này cho ô B3 của Sheet2. Cần tìm mã nào thì nhập mã đó vào ô B2 của Sheet2Em chào Anh!
Có thể giúp em xây dựng code chạy vlookup tự động từ sheet 1 sang sheet 2 của file excel đươc không ah. Em đã làm sẵn cho mã FPT, có cách nào mình chạy tự động cho hai mã PET va POT không ạh.
Thanks các Anh.
=VLOOKUP(A3,OFFSET(Sheet1!$A$2,,MATCH($B$2,Sheet1!$1:$1,0)-2,COUNTA(OFFSET(Sheet1!$A:$A,,MATCH($B$2,Sheet1!$1:$1,0)-2)),2),2,0)
Bạn dùng tạm code này nhé:Dạ. Em cần lấy dự liệu close của từng mã cổ phiếu qua sheet 2. Thay vì em phải làm tay là dùm hàm vlookup của mã FPT qua sheet2, sau đó em phải tiếp dùm vlookup cho mã PET...tức là em phải tiếp tục dùng công thức" VLOOKUP(A3,Sheet1!C2:$D$874,2,FALSE)" cho cột C ở sheet 2. Làm như vậy thì lâu quá. Anh có thể viết code giúp em nhấn nút 1 cái là tự động vlookup cho em 3 mã FPT, PET và POT không ah?
Sub LookupValue()
Dim i As Long, j As Byte, Cll As Range
Sheet2.Activate
On Error Resume Next
Range([A], [A65536].End(xlUp)).Offset(, 1).Resize(, 3).Clear
For i = 3 To [A65536].End(xlUp).Row
Set Cll = Sheet1.[A:A].Find(Range("A" & i), Sheet1.[A2], xlValues, xlWhole)
For j = 0 To 2
Range("B" & i).Offset(, j) = Cll.Offset(, 2 * j + 1)
Next j
Next i
End Sub
Bài này dùng Advance Filter là ra ngay (dùng Advanced Filter 3 lần)Anh nghiaphuc. Hình như code anh bị viết sai hay sao đó. Tại vì đúng thì 7/7/2008 của cổ phiếu PET phải có giá 17.7 chứ không phải là 14.5. Tức là đối với cổ phiếu PET anh phải tham chiếu ngày 7/7/2008 (tức là giá trị ô A3 ở sheet 2) đến cột C tức là cột date của cổ phiếu PET, tương tư đối với cổ phiếu POT anh phải tham chiếu ngày 7/7/2008 (tức là giá trị ô A3 ở sheet 2) đến cột E ở sheet 1 tức là cột date của cổ phiếu POT.
Anh xem lại dùm em. Thanks Anh.
Đầu tiên tôi sửa lại dữ liệu ở sheet1 như vầy:Anh có thể viết dùm em code được không? Tại vì em viết code còn yếu lắm, Anh có thể viết để em tham khảo thêm được không Anh?
Sub Loc()
Dim SrcRng As Range, CritRng As Range, i As Long, title
Set SrcRng = Sheet1.Range("A2").CurrentRegion
Set CritRng = Sheet2.Range("A2").CurrentRegion
title = Array("FPT Date", "PET Date", "POT Date")
For i = 0 To 2
Sheet2.Range("A2").Value = title(i)
SrcRng.Resize(, 2).Offset(, i * 2).AdvancedFilter 2, CritRng, Sheet2.Range("C2").Offset(, i * 2)
Next
End Sub
Thì sau khi lọc bằng Advanced Filter xong, bạn xóa những cột không cần thiết là được rồiDạ. Nhưng làm vậy thì giống lần trước anh đã chỉ em rùi ( lần mà anh chỉ em gộp 10 cái lọc thành 1 cái lọc đó Anh). Nhưng lần này thì khác, em gởi anh file excel phải làm bằng tay, em lấy dữ liệu từ sheet 1 qua bên sheet 2. Em phải sử dụng vlookup tới 3 lần, Với lại ở sheet 2 có cái dòng hiện chữ "N/A" anh có thể viết code chay ra y chan như em đã làm tay bên sheet 2 được không Anh?
Tại vì thực tế là em tới 400 mã cổ phiếu, chứ không phải là 3 mã đâu...làm tay chắc em chết.
Thanks Anh.
Nếu dữ liệu của bạn khác hơn so với file đưa lên ở đây thì bạn phải post lại file nha (dữ liệu khác, code cũng phải khác)Dạ, tại vì thêm kiểu lọc của Anh nó sẽ mất các dòng chứa chữ "N/A" mà em cũng cần phải có các dòng đó. Với lại em chạy 400 mã như vậy em phải xóa 200 cột như vậy thì mắc công quá mà em phải chạy 6 lần file excel dạng như vậy tức là em phải xóa các dong rất nhiều. Anh có thể giúp dùm em. Em có gởi Anh file excel anh xem giúp dùm em
Thanks Anh.
Sub Loc()
Dim fRng As Range, SrcRng As Range, i As Long
Application.ScreenUpdating = False
Set fRng = Sheet2.Range(Sheet2.[A3], Sheet2.[A60000].End(xlUp))
Set SrcRng = Sheet1.Range("A1").CurrentRegion.Resize(, 2)
For i = 1 To 3
With fRng.Offset(, i)
.Value = "=VLOOKUP(RC[-" & i & "], Sheet1!" & SrcRng.Address(, , 2) & ",2,0)"
.Value = .Value
End With
Set SrcRng = SrcRng.Offset(, 2)
Next
Application.ScreenUpdating = True
End Sub
Tức là ngày nào trong dữ liệu không có thì kết quả là "N/A" chứ không phải dồn lên như Bác làm. Bác Dùng Advance Filter rồi mà lại xóa mất cột ngày thì kết quả lại sai do có một số ngày trong dữ liệu không có. Kéo xuống dưới sẽ thấy các cột kết quả ngắn hơn cột ngày, chứng tỏ kết quả đã bị lệch dòng so với cột ngày rồi.(thêm nữa, tôi cũng không hiểu bạn nói mấy chữ "N/A" nghĩa là cái gì nữa)
Sub Test()
Dim Rng As Range, Cll As Range
Set Rng = Sheet2.Range(Sheet2.[A3], Sheet2.[A65536].End(xlUp))
For Each Cll In Sheet1.[1:1].SpecialCells(2, 23)
Set Rng = Rng.Offset(, 1)
Rng.Offset(-1)(1, 1).Value = Cll
Rng.FormulaR1C1 = "=VLOOKUP(RC1,Sheet1!C" & (Cll.Column - 1) & ":C" & Cll.Column & ",2,0)"
Rng.Value = Rng.Value
Next
End Sub