MACRO với hàm HLOOKUP

Liên hệ QC

nguyen6571gpex

Thành viên thường trực
Tham gia
22/4/11
Bài viết
279
Được thích
80
Nghề nghiệp
Dạy học
Chào ACE!
Tôi có một file trong đó có Sheet chứa dữ liệu muốn dò tìm dữ liẹu đó sang Sheet mới có cấu trúc khác. Vì không biết VBA nên dùng HLOOKUP từng cell sẽ rất lâu. Mong ACE giúp đỡ! Cảm ơn
 

File đính kèm

Theo tôi hiểu tên trong J1:J15 (sheet Tung_GVchuyen) mới là cái gốc để dò tìm thì nhất thiết phải thống nhất với tên trong bảng xếp có đúng không bạn?
Chính xác, lấy ở đâu cũng được, nhưng phải giống nhau
Trong bài, chắc Ba Tê copy ở sheet "so7" vùng [AN3:BB4] qua đó
Bạn sửa Gv Trang cho giống như bảng xếp hoặc ngược lại
 
Upvote 0
Theo tôi hiểu tên trong J1:J15 (sheet Tung_GVchuyen) mới là cái gốc để dò tìm thì nhất thiết phải thống nhất với tên trong bảng xếp có đúng không bạn?

- Đúng là chỉ tìm những tên sau dấu gạch (-) mà có y chang trong cột J (Kể cả chữ Hoa, Thường), không có tía tui "mò" cũng hổng "ga".
- Thêm cái Xóa để làm gì nhỉ? Mỗi lần bấm nút đã xóa cũ, làm mới rồi mà.
 

File đính kèm

Upvote 0
- Đúng là chỉ tìm những tên sau dấu gạch (-) mà có y chang trong cột J (Kể cả chữ Hoa, Thường), không có tía tui "mò" cũng hổng "ga".
- Thêm cái Xóa để làm gì nhỉ? Mỗi lần bấm nút đã xóa cũ, làm mới rồi mà.
Chào các ACE diễn đàn!
COVID-19 hoành hành thành ra lại nhờ các ACE chút: Do phát sinh thời gian học vào ngày thứ bảy nên Code chạy không đúng nữa mong các bạn giúp đỡ. Trân trọng cám ơn! (Những vấn đề cần nhờ giúp mình đã ghi cụ thể trong từng Sheet: Tung_lop; Tung_GV chuyen)
 

File đính kèm

Upvote 0
Nhờ các ACE giúp mình với! Trân trọng!
 
Upvote 0
Chào các ACE diễn đàn!
COVID-19 hoành hành thành ra lại nhờ các ACE chút: Do phát sinh thời gian học vào ngày thứ bảy nên Code chạy không đúng nữa mong các bạn giúp đỡ. Trân trọng cám ơn! (Những vấn đề cần nhờ giúp mình đã ghi cụ thể trong từng Sheet: Tung_lop; Tung_GV chuyen)
Mình không biết VBA nên không thể sửa được (mặc dù đã cố gắng sửa những vùng có thay đổi nhưng mấy cái biến thì chịu) mong các ACE giúp sửa hộ. Trân trọng cảm ơn!
 
Upvote 0
Hình như code trong bài này có "dính liếu" tới tôi.
Trân trọng cảm ơn thầy! Chúc thầy luôn mạnh khỏe!
Không phải "hình như" mà code trong bài này là của Thầy trước kia thầy đã giúp, chính vì vậy em mới trực tiếp gửi nhờ thầy trong mục "tọa đàm" mà. Một lần nữa trân trọng cảm ơn Thầy, cảm ơn diễn đàn!
 
Upvote 0
Upvote 0
Hình như code trong bài này có "dính liếu" tới tôi.
Chào bạn, chào tất cả các bạn!
Nhờ các bạn giúp đỡ, mình sử dụng file này mấy năm rất hiệu quả. Hiện tại do mình xếp TKB bằng phần mềm nên dữ liệu gốc (sheet FET) có thay đổi một chút, từ đó có code chạy ra kết quả chưa thật chuẩn. Nhờ các bạn giúp:
1. Sửa code chạy kết quả ra sheet "Tung_GV chuyen"
2. Viết giúp code lấy kết quả từ sheet gốc "FET" vào sheet "NopPGD" như dữ liệu mẫu mình đã làm.
Chi teeits mình đã ghi trong file đính kèm. Trân trọng!
 

File đính kèm

Upvote 0
Chào bạn, chào tất cả các bạn!
Nhờ các bạn giúp đỡ, mình sử dụng file này mấy năm rất hiệu quả. Hiện tại do mình xếp TKB bằng phần mềm nên dữ liệu gốc (sheet FET) có thay đổi một chút, từ đó có code chạy ra kết quả chưa thật chuẩn. Nhờ các bạn giúp:
1. Sửa code chạy kết quả ra sheet "Tung_GV chuyen"
2. Viết giúp code lấy kết quả từ sheet gốc "FET" vào sheet "NopPGD" như dữ liệu mẫu mình đã làm.
Chi teeits mình đã ghi trong file đính kèm. Trân trọng!
Mình có sửa lại code vị trí bôi đỏ, do không nắm tinh thần từ bài viết ngày xưa, nên sửa tạm, không chắc về kết quả, bạn chạy code, kiểm tra giúp nhé.

Rich (BB code):
Option Explicit

Sub TachTKB()
Application.ScreenUpdating = False
Dim Lop(), i As Long, j As Long, C As Long, R As Long, RR As Long
With Sheets("FET")
    Lop = .Range(.[C3], .[V3]).Value
    For j = 1 To UBound(Lop, 2)
        Sheet2.[K3] = Lop(1, j)
        C = 10: R = 5
        For i = 1 To 6
            .Cells(R, j + 2).Resize(8).Copy
            Sheet2.Cells(5, C).PasteSpecial 3
            R = R + 8: C = C + 1
        Next
        Sheet2.[I1:O12].Copy Sheet2.Cells(RR + 1, 1)
        RR = RR + 14
    Next
End With
Application.ScreenUpdating = True
End Sub

Public Sub GPE()
Dim TenGV As String, sArr(), dArr(), tArr(), rng As Range, IRws As Long
Dim i As Long, j As Long, N As Long, iCll As Long, Col As Long, Rws As Long
Application.ScreenUpdating = False
Rws = 1
With Sheets("FET")
    sArr = .Range("C3:V52").Value
End With
With Sheets("Tung_GV chuyen")
    Set rng = .Range("K1:Q12")
    tArr = .Range(.[J1], .[J1000].End(xlUp).Offset(1)).Value
    For N = 1 To UBound(tArr, 1)
        ReDim dArr(1 To 8, 1 To 6)
        TenGV = tArr(N, 1)
        Col = 0
        For i = 3 To 43 Step 8
            Col = Col + 1
            For IRws = 0 To 7
                For j = 1 To UBound(sArr, 2)
                    If sArr(i + IRws, j) Like "*-" & TenGV Then
                        dArr(IRws + 1, Col) = sArr(1, j) & "-" & Left(sArr(i + IRws, j), InStr(sArr(i + IRws, j), "-") - 1)
                    End If
                Next j
            Next IRws
        Next i
            .[M3] = TenGV
            .[L5].Resize(8, 6) = dArr
            rng.Copy .Range("A" & Rws)
            Rws = Rws + 14
    Next N
End With
End Sub
 

File đính kèm

Upvote 0
Mình có sửa lại code vị trí bôi đỏ, do không nắm tinh thần từ bài viết ngày xưa, nên sửa tạm, không chắc về kết quả, bạn chạy code, kiểm tra giúp nhé.

Rich (BB code):
Option Explicit

Sub TachTKB()
Application.ScreenUpdating = False
Dim Lop(), i As Long, j As Long, C As Long, R As Long, RR As Long
With Sheets("FET")
    Lop = .Range(.[C3], .[V3]).Value
    For j = 1 To UBound(Lop, 2)
        Sheet2.[K3] = Lop(1, j)
        C = 10: R = 5
        For i = 1 To 6
            .Cells(R, j + 2).Resize(8).Copy
            Sheet2.Cells(5, C).PasteSpecial 3
            R = R + 8: C = C + 1
        Next
        Sheet2.[I1:O12].Copy Sheet2.Cells(RR + 1, 1)
        RR = RR + 14
    Next
End With
Application.ScreenUpdating = True
End Sub

Public Sub GPE()
Dim TenGV As String, sArr(), dArr(), tArr(), rng As Range, IRws As Long
Dim i As Long, j As Long, N As Long, iCll As Long, Col As Long, Rws As Long
Application.ScreenUpdating = False
Rws = 1
With Sheets("FET")
    sArr = .Range("C3:V52").Value
End With
With Sheets("Tung_GV chuyen")
    Set rng = .Range("K1:Q12")
    tArr = .Range(.[J1], .[J1000].End(xlUp).Offset(1)).Value
    For N = 1 To UBound(tArr, 1)
        ReDim dArr(1 To 8, 1 To 6)
        TenGV = tArr(N, 1)
        Col = 0
        For i = 3 To 43 Step 8
            Col = Col + 1
            For IRws = 0 To 7
                For j = 1 To UBound(sArr, 2)
                    If sArr(i + IRws, j) Like "*-" & TenGV Then
                        dArr(IRws + 1, Col) = sArr(1, j) & "-" & Left(sArr(i + IRws, j), InStr(sArr(i + IRws, j), "-") - 1)
                    End If
                Next j
            Next IRws
        Next i
            .[M3] = TenGV
            .[L5].Resize(8, 6) = dArr
            rng.Copy .Range("A" & Rws)
            Rws = Rws + 14
    Next N
End With
End Sub
Cảm ơn bạn đã quan tâm, giúp đỡ. Vấn đề 1 đã được giải quyết, nhờ các bạn giúp tiếp vấn đề 2 (viết code cho sheet "NopPGD"). Trân trọng!
 
Upvote 0
Cảm ơn bạn đã quan tâm, giúp đỡ. Vấn đề 1 đã được giải quyết, nhờ các bạn giúp tiếp vấn đề 2 (viết code cho sheet "NopPGD"). Trân trọng!
Bạn chạy Sub GPE_NopPGD()

PHP:
Public Sub GPE_NopPGD()
Dim sArr()
Dim i As Long, j As Long, k As Long
Application.ScreenUpdating = False
With Sheets("FET")
    sArr = .Range("C3:V52").Value
End With
With Sheets("NopPGD")
    For i = 1 To UBound(sArr, 2)
        For j = i * 2 To (UBound(sArr, 2) + 5) * 2
            If sArr(1, i) = .Cells(3, j) Then
                'Debug.Print .Cells(3, j)
                For k = 3 To UBound(sArr)
                   .Cells(k + 2, j).Resize(1, 2) = Split(sArr(k, i), "-")
                Next k
            End If
        Next j
    Next i
End With
End Sub
 

File đính kèm

Upvote 0
Bạn chạy Sub GPE_NopPGD()

PHP:
Public Sub GPE_NopPGD()
Dim sArr()
Dim i As Long, j As Long, k As Long
Application.ScreenUpdating = False
With Sheets("FET")
    sArr = .Range("C3:V52").Value
End With
With Sheets("NopPGD")
    For i = 1 To UBound(sArr, 2)
        For j = i * 2 To (UBound(sArr, 2) + 5) * 2
            If sArr(1, i) = .Cells(3, j) Then
                'Debug.Print .Cells(3, j)
                For k = 3 To UBound(sArr)
                   .Cells(k + 2, j).Resize(1, 2) = Split(sArr(k, i), "-")
                Next k
            End If
        Next j
    Next i
End With
End Sub
Cảm ơn bạn rất nhiều, chúc bạn sức khỏe, hạnh phúc, thành công!
 
Upvote 0
Bạn chạy Sub GPE_NopPGD()

PHP:
Public Sub GPE_NopPGD()
Dim sArr()
Dim i As Long, j As Long, k As Long
Application.ScreenUpdating = False
With Sheets("FET")
    sArr = .Range("C3:V52").Value
End With
With Sheets("NopPGD")
    For i = 1 To UBound(sArr, 2)
        For j = i * 2 To (UBound(sArr, 2) + 5) * 2
            If sArr(1, i) = .Cells(3, j) Then
                'Debug.Print .Cells(3, j)
                For k = 3 To UBound(sArr)
                   .Cells(k + 2, j).Resize(1, 2) = Split(sArr(k, i), "-")
                Next k
            End If
        Next j
    Next i
End With
End Sub
Bạn bổ sung thêm giúp vào code: Xóa dữ liệu cũ trong vùng được điền (ở sheet NopPGD nếu có) trước khi thực thi lệnh. Cảm ơn bạn!
 
Upvote 0
Bạn bổ sung thêm giúp vào code: Xóa dữ liệu cũ trong vùng được điền (ở sheet NopPGD nếu có) trước khi thực thi lệnh. Cảm ơn bạn!
Mình bổ sung đoạn xóa dữ liệu cũ.
Code hơi chuối tý, hi vọng chạy đúng.
PHP:
Public Sub GPE_NopPGD()
Dim sArr()
Dim i As Long, j As Long, k As Long, l As Long
Application.ScreenUpdating = False
With Sheets("FET")
    sArr = .Range("C3:V52").Value
End With
With Sheets("NopPGD")
    For l = 3 To 50 Step 10
        .Cells(5, l).Resize(48, 8).ClearContents
    Next l
   
    For i = 1 To UBound(sArr, 2)
        For j = i * 2 To (UBound(sArr, 2) + 5) * 2
            If sArr(1, i) = .Cells(3, j) Then
                'Debug.Print .Cells(3, j)
                For k = 3 To UBound(sArr)
                   .Cells(k + 2, j).Resize(1, 2) = Split(sArr(k, i), "-")
                Next k
            End If
        Next j
    Next i
End With
End Sub
 

File đính kèm

Upvote 0
Mình bổ sung đoạn xóa dữ liệu cũ.
Code hơi chuối tý, hi vọng chạy đúng.
PHP:
Public Sub GPE_NopPGD()
Dim sArr()
Dim i As Long, j As Long, k As Long, l As Long
Application.ScreenUpdating = False
With Sheets("FET")
    sArr = .Range("C3:V52").Value
End With
With Sheets("NopPGD")
    For l = 3 To 50 Step 10
        .Cells(5, l).Resize(48, 8).ClearContents
    Next l
  
    For i = 1 To UBound(sArr, 2)
        For j = i * 2 To (UBound(sArr, 2) + 5) * 2
            If sArr(1, i) = .Cells(3, j) Then
                'Debug.Print .Cells(3, j)
                For k = 3 To UBound(sArr)
                   .Cells(k + 2, j).Resize(1, 2) = Split(sArr(k, i), "-")
                Next k
            End If
        Next j
    Next i
End With
End Sub
Cảm ơn bạn nhiều! Xin lỗi vì sau khi nhờ, sáng nay mình có chút việc nên giờ mới mở diễn đàn ra xem!
 
Upvote 0
Thêm 1 code khác tham khảo sub NopPGD
Mã:
Sub ABC()
    Dim a(), b(), i&, d As Object, j&
    Set d = CreateObject("scripting.dictionary")
    a = Sheets("FET").Range("C3:V52").Value
    b = Sheets("NopPGD").Range("A3:AX52").Value
    For j = 3 To 50 Step 10
        Sheets("NopPGD").Cells(5, j).Resize(48, 8).ClearContents
    Next
    For j = 1 To UBound(a, 2)
        If a(1, j) <> Empty Then
            d(a(1, j)) = j
        End If
    Next
    For j = 1 To UBound(b, 2)
        If d.exists(b(1, j)) = True Then
            For i = 3 To UBound(b)
                If UBound(Split(a(i, d.Item(b(1, j))), "-")) > 0 Then
                    b(i, j) = Split(a(i, d.Item(b(1, j))), "-")(0)
                    b(i, j + 1) = Split(a(i, d.Item(b(1, j))), "-")(1)
                End If
            Next
        End If
    Next
    Sheets("NopPGD").Range("A3").Resize(UBound(b), UBound(b, 2)).Value = b
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom