Chạy tự động hàm vlookup

Liên hệ QC

huy_barca

Thành viên mới
Tham gia
29/6/10
Bài viết
27
Được thích
0
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.
 

File đính kèm

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.
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.
Hỏi bạn một xíu nhé: Ở dữ liệu vào, 1 ngày chỉ nhập 1 lần cho mỗi loại (FPT, PET) hay có thể nhập nhiều lần? Nói cách khác, trong dữ liệu vào mỗi ngày chỉ nằm trên một hàng hay trên nhiều hàng?
- Nếu chỉ 1 hàng thì chẳng có lý do gì phải thêm cái bảng dữ liệu ra cả.
- Nếu có nhiều hàng cho 1 ngày thì bạn có thể dùng SUMIF để tổng hợp hoặc tốt hơn là sử dụng Pivot Table, khỏi phải dùng công thức chi cho mệt.
 
Upvote 0
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!
 
Upvote 0
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!
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).
 

File đính kèm

Upvote 0
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.
 
Upvote 0
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.
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?
+ Vẫn có ngày 6/1/2010 và ở 2 cột kế tiếp là #N/A
+ Vẫn có ngày 6/1/2010 và ở 2 cột kế tiếp là ô trống
+ Không có ngày 6/1/2010.
2. Bạn nói dùng combobox và khi chạy nó báo lỗi, có nghĩa là bạn thêm combobox để nhập ngày hay là sao? Nó báo lỗi như thế nào? Bạn có thể gửi file bị lỗi đó lên hoặc chụp hộp thoại báo lỗi gửi lên để mọi người biết đó là lỗi gì mà sửa (file của mình chạy trên máy mình hoàn toàn bình thường, không thấy báo lỗi gì cả).
Thêm nữa, bạn cho biết thêm là trong file thực tế của bạn, dữ liệu vào có bao nhiêu cột và bao nhiêu hàng?
 
Upvote 0
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!
 
Upvote 0
Dạ, em thêm combo (tức là cái hình vuông em click vào đó thì macro 1 sẽ chạy) để chạy cái macro 1 thui ah, chứ không có nhập ngày gì hết anh.
 
Upvote 0
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!
PHP:
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
Nếu bạn vẫn muốn có công thức ở bảng dữ liệu ra thì bỏ câu lệnh Rng.Value = Rng.Value đi.
Nếu code vẫn chạy không được và báo lỗi như cũ thì bạn thay code trên bởi code này xem có được không:
PHP:
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
Nếu bạn chỉ thêm 1 hình vuông để Assign Macro thì không cần thiết, bởi vì code sẽ tự chạy khi có sự thay đổi tại các ô H1, H2.
 

File đính kèm

Upvote 0
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.
 
Upvote 0
Em đang cần rất gấp...có ái giúp dùm em cái.Thanks vẻy much.
 
Upvote 0
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.
Tôi nghĩ code sẽ vầy:
PHP:
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
Code này dùng Find method nhưng kết quả sẽ y chang như khi bạn dùng VLOOKUP vậy
 

File đính kèm

Upvote 0
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.
 
Upvote 0
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.
Trong code có đoạn:
Mã:
 Set SrcRng = Range([A3], [A100000].End(xlUp))
Chỉ cần sửa thành:
Mã:
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))
Với Data là tên sheet chứa dữ liệu gốc ---> Vậy bạn hãy sửa Data thành tên gì đó phù hợp với file của bạn là được rồi
Đương nhiên, nguyên đoạn code trên phải đặt ngay tại sheet mà bạn cần chạy code
-------------------------
Nhắc nhở các bạn: Sau này có hỏi gì thì phải hỏi cho giống với thực tế trên file, đừng để người ta giúp xong rồi mình lại nói rằng dữ liệu thật của mình có.. hơi khác gì gì đó ---> Lý ra khác thế nào phải đưa lên ngay từ đâu chứ (từ đầu là 2 sheet thì đưa file lên cũng phải 2 sheet)
 
Upvote 0
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).

Hay quá. Bác xem vấn đề tôi đưa ra giải quyết giúp: http://www.giaiphapexcel.com/forum/...liệu-chấm-công&p=304477&highlight=#post304477.
Tạo Sheet tổng hợp: hiển thị thông tin cho tất cả các bộ phận bao gồm: Tổng giờ làm/tháng. Số ngày nghỉ Phép/ko phép. Số gờ nghỉ. thêm một vấn đề như Bác đề cập trên: Nhập ngày -> hiển thị tất cả các NV trong ngày đó của nhiều bộ phận. Nhập ngày và Bộ phận thì hiểm thị NV trong ngày và bộ phận đó. (Tôi làm kém quá nên rối cả lên, mong bác giúp đở.). Chân thành cảm ơn!
 
Upvote 0
Web KT

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

Back
Top Bottom