Trang 1 của 10 123 ... CuốiCuối
Kết quả 1 đến 10 của 100

Chủ đề: Xin viết dùng mã vba thay thế cho hàm vlookup

  1. #1

  2. #2
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Trích dẫn Gửi bởi hoangvinh_tb
    Mình gửi vd lên nhờ các bắc bớt chút thời gian chỉ dùm vài chiêu
    Cảm ơn các bạn nhiều!!!
    Mã nó đây
    RightClick vào sheet "CT" ==> View Code chép cái này vào

    Mã:
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim d, I, Vung, Ws
        Set d = CreateObject("scripting.dictionary")
        Set Ws = Sheets("MA")
        Vung = Ws.Range(Ws.[B3], Ws.[B10000].End(xlUp)).Resize(, 3)
            If Not Intersect(Target, Range("B4:B1000")) Is Nothing Then
                If Target.Count = 1 Then
                    For I = 1 To UBound(Vung)
                        d.Add Vung(I, 1), Array(Vung(I, 2), Vung(I, 3))
                    Next I
                        If d.exists(UCase(Target.Value)) Then
                            Target.Offset(, 1) = d.Item(UCase(Target.Value))(0)
                            Target.Offset(, 2) = d.Item(UCase(Target.Value))(1)
                        End If
                End If
             End If
    End Sub
    Thân

  3. #3
    huynq.231 Guest
    Mã nguồn PHP:
    Option ExplicitPrivate Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("B4:B99")) Is Nothing Then Dim Rng As Range, sRng As Range, Sh As Worksheet Set Sh = ThisWorkbook.Worksheets("MA") Set Rng = Sh.Range(Sh.[b2], Sh.[b2].End(xlDown)) Set sRng = Rng.Find(Target.Value, , xlFormulas, xlWhole) If sRng Is Nothing Then MsgBox "Nothing" Else Target.Offset(, 1).Resize(, 2).Value = sRng.Offset(, 1).Resize(, 2).Value End If End IfEnd Sub  

  4. #4
    akzhoan Guest
    Cám ơn bạn đã gửi cho mình đoạn mã này! nhưng mình muốn triển khai đoạn mã đó mà vẫn chưa làm đc mong bạn giải thích và giúp mình nhé
    Mình muốn cột địa chỉ di chuyển các cột tên khoảng 5 cột

  5. #5
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Trích dẫn Gửi bởi hoangvinh_tb
    Cám ơn bạn đã gửi cho mình đoạn mã này! nhưng mình muốn triển khai đoạn mã đó mà vẫn chưa làm đc mong bạn giải thích và giúp mình nhé
    Mình muốn cột địa chỉ di chuyển các cột tên khoảng 5 cột
    5 cột ấy là những cột nào vậy bạn ? Nhiều người trên diễn đàn (trong đó có tôi) cho rằng hỏi bài mà không gửi file đính kèm và không diễn đạt rõ yêu cầu là thiếu trách nhiệm với câu hỏi của mình và thiếu tôn trọng người mình hỏi.

  6. #6
    nguyenvanan91 Guest
    Trích dẫn Gửi bởi TrungChinhs
    5 cột ấy là những cột nào vậy bạn ? Nhiều người trên diễn đàn (trong đó có tôi) cho rằng hỏi bài mà không gửi file đính kèm và không diễn đạt rõ yêu cầu là thiếu trách nhiệm với câu hỏi của mình và thiếu tôn trọng người mình hỏi.
    cám ơn bạn đã góp chân thành mình cũng định gửi file đính kèm mà không có cách nào đính kèm đc mong bạn và các bạn trong diễn đàn thông cảm.

  7. #7
    hailong Guest
    Trích dẫn Gửi bởi concogia
    Mã nó đây
    RightClick vào sheet "CT" ==> View Code chép cái này vào

    <div class="bbcode_container">
    <div class="bbcode_description">Code:
    </div>
    </div>
    Mình cũng đang cần cái này, cảm ơn pro. cái này hay lắm. Mình làm cửa hàng bán lẻ, hằng ngày phải xuất kho tương đối nhiều phiếu giao hàng trong 1 thời gian ngắn. Dùng hàm vlookup file excel lên đến 150MB nhìn đã thấy khiếp. đang tìm mã vba để thay thế vlookup. Thank pro nhé.

  8. #8
    khanhklhn2 Guest
    [QUOTE="concogia"]Mã nó đây
    RightClick vào sheet "CT" ==> View Code chép cái này vào

    Mã nguồn PHP:
    Sub TimKiem_Vlookup()Dim i As Long, j As Long, sArray1, sArray2, Arr()With Sheets("MA") sArray1 = .Range(.[B3], .[B65000].End(xlUp)).Resize(, 3).ValueEnd WithWith Sheets("CT") .Range("C4:D65000").ClearContents sArray2 = .Range(.[B4], .[B65000].End(xlUp)).Value ReDim Arr(1 To UBound(sArray2, 1), 1 To 2)For j = 1 To UBound(sArray2, 1) For i = 1 To UBound(sArray1, 1) If Not IsEmpty(sArray2(j, 1)) And sArray1(i, 1) = UCase(sArray2(j, 1)) Then Arr(j, 1) = sArray1(i, 2) Arr(j, 2) = sArray1(i, 3) End If NextNext.Range("C4").Resize(j - 1, 2).Value = ArrEnd WithEnd Sub  

  9. #9
    ltvhieu Guest
    Trích dẫn Gửi bởi concogia
    Mã nó đây
    RightClick vào sheet "CT" ==> View Code chép cái này vào

    <div class="bbcode_container">
    <div class="bbcode_description">Code:
    </div>
    </div>
    Chào bác concogia và các cao thủ.
    EM đang cần làm 1 cái phiếu xuất kho cũng thay thế hàm vlookup bằng mã VBA, copy mã của bác concogia về chạy thử thì rất ok. Chỉ có điều em muốn link thêm giá trị từ Sheet 'MA' sang sheet 'CT', mà ko biết sửa thế nào nhờ bác concogia và các cao thủ sử giúp. Em xin cảm ơn các bác.

  10. #10
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Trích dẫn Gửi bởi qtm1987
    code này hay, lâu nay mình lại dùng 2 vòng for hèn gì mà khi dữ liệu nhiều thì tìm kiếm lâu lắc.
    ==============================================
    Sau khi thử code trên mình thấy chỉ tìm kiếm được cho từng mã khi click vào ô đó (tức là nhập vào giá trị mã cho ô đó thì sẽ tìm kiếm cho mã tại ô đó). Vậy nếu mình có sẵn 1 danh sách mã và muốn tìm kiếm cho 1 danh sách mã đó thì ko lẽ phải click từng mã mới tìm kiếm được. Mình vẫn phải dùng 2 vòng For, 1 vòng for cho vùng chứa dữ liệu tìm kiếm và 1 vòng for cho vùng chứa mã muốn tìm kiếm. Với cách này dữ liệu hàng chục ngàn dòng thì code chạy lâu, có cách nào khác không nhỉ?

    <div class="bbcode_container">
    <div class="bbcode_description">PHP Code:
    </div>
    </div>
    </div>
    Code trên là viết theo đề bài của bạn hoangvinh_tb, còn nếu theo ý của bạn thì ta vẫn viết theo cách cũ + một vòng lặp For ...... Next nữa, tức là một vòng tạo Dictionary, một vòng lấy mảng kết quả
    Cách của bạn là 2 vòng ......lồng vào nhau, dữ liệu càng lớn thì tốc độ càng của nó làm bạn........."hao thuốc lá + cà phê đá"
    Mình chỉ nghĩ thế thôi ( trên lý thuyết) vì không có file thực tế để thử ( làm biếng tạo file quá )
    Thân

Trang 1 của 10 123 ... CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •