Thay thế hàm VLOOKUP bằng VBA để không phải tạo quá nhiều cột phụ (1 người xem)

  • Thread starter Thread starter Miccpro
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

Miccpro

Thành viên thường trực
Tham gia
9/12/10
Bài viết
236
Được thích
10
Kính chào các anh chị GPE:
Em có một File dạng danh mục công việc, do phải dò tìm với nhiều điều kiện nên khi sử dụng hàm phải tạo quá nhiều cột trông rất rườm rà và khi dữ liệu nhiều file chạy rất ì ạch. Vậy em mong các bác cao thủ GPE giúp em hoàn thiện File đính kèm dưới đây. Em xin cảm ơn!
 

File đính kèm

Kính chào các anh chị GPE:
Em có một File dạng danh mục công việc, do phải dò tìm với nhiều điều kiện nên khi sử dụng hàm phải tạo quá nhiều cột trông rất rườm rà và khi dữ liệu nhiều file chạy rất ì ạch. Vậy em mong các bác cao thủ GPE giúp em hoàn thiện File đính kèm dưới đây. Em xin cảm ơn!
Code này cho LMTN
Cho nghiệm thu thì thay 5 thanh 4 tại dòng này: If .Cells(i, 5) <> "" Then
Mã:
Private Sub Worksheet_Activate()
Dim i As Integer, arr
Dim k, stt As Integer
Range("A2:B1000").ClearContents
With Sheets("Danh muc cong viec")
ReDim arr(1 To .Range("C5000").End(3).Row, 1 To 2)
For i = 5 To .Range("C5000").End(3).Row
    If .Cells(i, 2) = "HM" Then
        stt = 0
        k = k + 1
        arr(k, 1) = .Cells(i, 2)
        arr(k, 2) = .Cells(i, 3)
    End If
    If .Cells(i, 5) <> "" Then
        k = k + 1: stt = stt + 1
        arr(k, 1) = "'" & Right("00" & stt, 2)
        arr(k, 2) = .Cells(i, 3)
    End If
Next
End With
Range("A2").Resize(k, 2) = arr
End Sub
 
Upvote 0
Tuyệt vời bác ạ, bác giúp mở file giúp em thêm 1 tý ở cột C Sheet Lấy mẫu thí nghiệm nữa nhé. Cảm ơn bác rất nhiều
 

File đính kèm

Upvote 0
Ý em là em muôn cột bổ sung thêm cột C như trong Sheet LMTN mà em mới up file len bác ạ. Mà cái VBA nó dở chỗ là không undo được bác nhỉ?
Mã:
Private Sub Worksheet_Activate()
Dim i As Integer, arr
Dim k, stt As Integer, noidung As String
Range("A2:B1000").ClearContents
With Sheets("Danh muc cong viec")
ReDim arr(1 To .Range("C5000").End(3).Row, 1 To 3)
For i = 5 To .Range("C5000").End(3).Row
    If .Cells(i, 2) = "HM" Then
        stt = 0
        k = k + 1
        arr(k, 1) = .Cells(i, 2)
        noidung = .Cells(i, 3)
        arr(k, 2) = noidung
        arr(k, 3) = noidung
    End If
    If .Cells(i, 5) <> "" Then
        k = k + 1: stt = stt + 1
        arr(k, 1) = "'" & Right("00" & stt, 2)
        arr(k, 2) = .Cells(i, 3)
        arr(k, 3) = noidung
    End If
Next
End With
Range("A2").Resize(k, 3) = arr
End Sub
 
Upvote 0
}}}}}}}}}}}}}}}, cảm ơn bác nhiều. Em tìm tên "quanluu" trên facebook để mong được kết bạn với bác mà không ra. Thần tượng quá, mong được gặp bác 1 lần -=.,,
 
Upvote 0
Code của bác hình như ở cột D và E phải có ít nhất 1 ô <> "" (có dữ liệu) thì mới chạy được phải không ạ. Em thử xóa hết để dữ liệu ở sheet Danh muc cong viec để điều lại thì nó báo lỗi bác ạ
 
Upvote 0
Code của bác hình như ở cột D và E phải có ít nhất 1 ô <> "" (có dữ liệu) thì mới chạy được phải không ạ. Em thử xóa hết để dữ liệu ở sheet Danh muc cong viec để điều lại thì nó báo lỗi bác ạ
thế thì sửa thế này
if K > 0 then Range("A2").Resize(k, 3) = arr
 
Upvote 0
arr(K, 1) = "'" & Right("00" & stt, 2)
Ở chỗ này nếu số thứ tự trên 99 thì nó lại đánh lại từ 00 bác ơi! @#!^%
 
Upvote 0
arr(K, 1) = "'" & Right("00" & stt, 2)
Ở chỗ này nếu số thứ tự trên 99 thì nó lại đánh lại từ 00 bác ơi! @#!^%
Đúng rùi, vì thấy yêu cầu của bạn là đánh cho 2 chưso mà. Nếu trên 100 phải đánh lại từ đàu: 001,002....
 
Upvote 0
Có cách gì không bác, giả sử em có 200 đầu việc thì từ 1~9 là 01~09, còn lại là 10~200
 
Upvote 0
arr(K, 1) = "'" & Format(stt, "00")
Em sửa thế này có vẻ cũng ổn bác nhỉ? Ngồi mò mãi :-=
 
Upvote 0
Web KT

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

Back
Top Bottom