Trang 13/13 đầuđầu ... 3 9 10 11 12 13
Hiển thị kết quả tìm kiếm từ 121 đến 126 trên tổng số: 126

Ðề tài: Xin viết dùng mã vba thay thế cho hàm vlookup

  1. Trích Nguyên văn bởi tueyennhi View Post
    Hay quá, lại thêm một kiến thức cần thiết. Thầy ndu96081631 cho em hỏi thêm: Như vậy là các sheet tương tự muốn lấy như sheet chitiet là ta đều phải chèn code vào sheet đó đúng không ạ?
    Lâu quá quên mất tiêu rồi bạn ơi!
    Muốn gì cứ việc thử nghiệm, trục trặc ở đâu ta giải quyết ở đó

  2. Trích Nguyên văn bởi ndu96081631 View Post
    Lâu quá quên mất tiêu rồi bạn ơi!
    Muốn gì cứ việc thử nghiệm, trục trặc ở đâu ta giải quyết ở đó
    Em làm thì làm thử nghiệm hết rồi, hiện tại để dùng được ở sheet nào em phải chèn code vào sheet đó. Em có đọc qua về vụ chèn vào module nhưng vẫn phải cần code phụ ở sheet cần chạy.

  3. Trích Nguyên văn bởi ndu96081631 View Post
    Thật ra tôi rất thích tranh luận để chứng minh vấn đề
    Vậy thay vì nói suông ta làm cuộc thí nghiệm với 10000 dòng dữ liệu giữa code của tôi VS với VLOOKUP nhé (xem file)
    Tại sheet ChiTiet, điền dữ liệu vào cột C rồi lookup 16 cột còn lại bên phải
    Code của tôi như sau:
    PHP Code:
    Private Sub Worksheet_Change(ByVal Target As Range)
      
    Dim rTarget As RangeaTargetAs LongAs LongAs LongTG As Double
      Dim Arr
    (), tmp
      On Error Resume Next
      TG 
    Timer
      
    If Dic Is Nothing Then Auto_Open
      
    If Not Intersect(Range("C6:C65536"), TargetIs Nothing Then
        Set rTarget 
    Intersect(Range("C6:C65536"), Target)
        If 
    IsArray(rTarget.ValueThen
          aTarget 
    rTarget.Value
        
    Else
          
    ReDim aTarget(1 To 11 To 1)
          
    aTarget(11) = rTarget.Value
        End 
    If
        
    ReDim Arr(1 To UBound(aTarget1), 1 To 17)
        For 
    1 To UBound(aTarget1)
          If 
    aTarget(i1) <> "" Then
            tmp 
    aTarget(i1)
            If 
    Dic.Exists(tmpThen
              
    For 2 To 17
                Arr
    (i1) = aResult(Dic.Item(tmp), j)
              
    Next
            End 
    If
          
    End If
        
    Next
        rTarget
    .Offset(, 1).Resize(, 16).Value Arr
        MsgBox Timer 
    TG
      End 
    If
    End Sub 
    - Còn code "mượn" VLOOKUP như sau:
    PHP Code:
    Private Sub Worksheet_Change(ByVal Target As Range)
      
    Dim rTarget As RangeaTargetAs LongAs LongAs LongTG As Double
      Dim Arr
    (), tmp
      On Error Resume Next
      TG 
    Timer
      
    If Not Intersect(Range("C6:C65536"), TargetIs Nothing Then
        Set rTarget 
    Intersect(Range("C6:C65536"), Target)
        
    With rTarget.Offset(, 1).Resize(, 16)
          .
    Value "=IF(RC3="""","""",VLOOKUP(RC3,LLNV!R5C2:R10000C18,2,0))"
          
    .Value = .Value
        End With
        MsgBox Timer 
    TG
      End 
    If
    End Sub 
    Code này tương đương bạn tự tay gõ hàm VLOOKUP vào rồi copy/paste value thôi (tôi nghĩ không khó hiểu đối với bạn)
    ----------------
    Giờ so sánh khi copy paste 10000 dòng dữ liệu vào cột C của sheet ChiTiet (dữ liệu tôi đã làm sẵn tại sheet1)
    - Code tôi viết trên nền tảng xử lý mảng cho kết quả trong vòng 1.1 giây
    - Code dùng VLOOKUP cho kết quả không vòng 25 giây
    Đó là chưa nói code dùng VLOOKUP chỉ tìm duy nhất trên cột 2 ---> Nếu tìm 1 lần 16 cột như code của tôi dùng Array chắc là cách dùng VLOOKUP sẽ... đói luôn
    Nếu thay đoạn "VLOOKUP(RC3,LLNV!R5C2:R10000C18, 2,0)" thành "VLOOKUP(RC3,LLNV!R5C2:R10000C18, COLUMNS(RC3:RC),0)" để lookup luôn 16 cột thì... Ẹc.. Ẹc... tôi không kiên nhẩn để chờ (lâu quá, treo máy luôn)
    Đương nhiên khi làm cuộc thí nghiệm này tôi đã thử bằng rất nhiều cách với VLOOKUP... Chẳng hạn dùng WorksheetFunction.Vlookup ---> Kết quả còn tệ hơn rất nhiều

    Bạn muốn dữ liệu "chuẩn" thế nào, hoặc muốn sửa VLOOKUP như thế nào, cứ đưa lên đây, chúng ta sẽ cùng thí nghiệm để bạn tâm phục khẩu phục về tốc độ của xử lý Array
    Thầy cho em hỏi, khi tìm được mã ở sheet chi tiết, mình muốn lưu sheet chi tiết này sang sheet mới (sheet 3), rồi mình tìm tiếp và lưu sang sheet mới (sheet 4)... thì dùng code như thế nào ạ (nếu có thể lưu sang sheet khác thì vẫn canh chuẩn trang in ở sheet chi tiết). Em xin cám ơn ạ.

  4. Trích Nguyên văn bởi ndu96081631 View Post
    Lâu quá quên mất tiêu rồi bạn ơi!
    Muốn gì cứ việc thử nghiệm, trục trặc ở đâu ta giải quyết ở đó
    À là như vầy thầy ndu96081631 ạ, không có một trục trặc nhỏ nào ngoài chuyện mỗi sheet cần chạy được code trên thì đều phải chèn code vào chính sheet đó. Có cách nào mà thay vì để code trong sheet ta để vào một chỗ khác mà dùng cho toàn bộ các sheet không thầy?

  5. Trích Nguyên văn bởi tueyennhi View Post
    À là như vầy thầy ndu96081631 ạ, không có một trục trặc nhỏ nào ngoài chuyện mỗi sheet cần chạy được code trên thì đều phải chèn code vào chính sheet đó. Có cách nào mà thay vì để code trong sheet ta để vào một chỗ khác mà dùng cho toàn bộ các sheet không thầy?
    Thử dùng trong This Workbook
    Code:
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    
    End Sub

  6. Trích Nguyên văn bởi winvista View Post
    Thử dùng trong This Workbook
    Code:
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    
    End Sub
    À được rồi, mình cũng có ý tưởng đó nhưng dòng Private Sub Worksheet giữ nguyên, đổi sang Private Sub Workbook là được. Cảm ơn winvista :)

Trang 13/13 đầuđầu ... 3 9 10 11 12 13

Thông tin về chủ đề này

Users Browsing this Thread

Hiện có 2 người đang xem đề tài này. (0 thành viên và 2 khách)

Bookmarks

Bookmarks

Quyền Sử Dụng Ở Diễn Ðàn

  • Bạn không thể đăng đề tài mới
  • Bạn không thể đăng trả lời
  • Bạn không thể đăng file đính kèm.
  • Bạn không thể sửa bài viết.
  •