Nhờ giúp sửa code lấy dữ liệu có điều kiện từ Sheet – đến Sheet

Liên hệ QC

le_vis

Thành viên tích cực
Tham gia
23/7/09
Bài viết
1,292
Được thích
796
Tôi có sử dụng code lấy dữ liệu từ Sheet DATA sang Sheet B.IN Theo mã gọi tại X2 để thay thế cho hàm Vlookup tại các vùng sheet đánh dấu mầu vàng và mầu hồng

Nhưng mới thử đến khu vực mầu vàng thì code chạy sai ; Cụ thể như sau :

Nếu tại X2 gọi = 1 (Theo số thứ tự bên Sheet DATA) thì code chạy đúng - Nhưng gọi tới 2,3,.... thì code chạy sai

Xin các bạn trợ giúp theo File đính kèm : Trân trọng cảm ơn nhiều nhiều
 

File đính kèm

  • File NGD.xlsm
    40 KB · Đọc: 12
Tôi có sử dụng code lấy dữ liệu từ Sheet DATA sang Sheet B.IN Theo mã gọi tại X2 để thay thế cho hàm Vlookup tại các vùng sheet đánh dấu mầu vàng và mầu hồng

Nhưng mới thử đến khu vực mầu vàng thì code chạy sai ; Cụ thể như sau :

Nếu tại X2 gọi = 1 (Theo số thứ tự bên Sheet DATA) thì code chạy đúng - Nhưng gọi tới 2,3,.... thì code chạy sai

Xin các bạn trợ giúp theo File đính kèm : Trân trọng cảm ơn nhiều nhiều
Giới hạn đúng vùng cần tìm
Set abc = Sheet2.Range("A4:BN50000").Find([X2])
Những lệnh khác tự lo
 
Upvote 0
Cái sai của bạn đang ở câu lệnh này:
Set abc = Sheet2.Range("A4:BN50000").Find([X2])
Nghiêm trọng nhất sẽ là:
Bạn đang tìm trị kiểu số, & là số thứ tự của 1 dòng dữ liệu (DL) nào đó mà bạn nhập vô [X2]
Nhưng vùng để phương thức đi dò tìm thì tràng giang đại hải
Lý ra bạn chỉ bó gọn công cuộc tìm kiếm của bạn vùng DL trên cột 'A' mà thôi;
Với vùng DL như bạn viết thì nhỡ đâu các cột sau đó có chứa số bạn cần tìm thì sao?

1 vấn đề nữa phương thức bạn viết chưa tường minh
Bạn hoàn toàn phải viết có tham số xlWhole khi tìm (Việc này bạn nên đọc bài 'Tổng quan về phương thức 'FIND()' có từ lâu trên diễn đàn)
Vì nếu không có tham số này, khi bạn cần tìm con số 9, thì kết quả sẽ không chỉ 9 mà 19, 29,. . .. đều dẫn ra cho bạn, 1 khi trước đó & ai đó hay câu lệnh FIND() nào đó đã áp dụng phương thức FIND() với tham số xlPart

Vùng DL càng bó gọn thì công cuộc tìm kím sẽ càng nhanh cho bạn hơn, bạn có muốn thế không?

Chào bạn & chúc vui nhân dịp cuối tuần!
 
Upvote 0
Cái sai của bạn đang ở câu lệnh này:
Set abc = Sheet2.Range("A4:BN50000").Find([X2])
Nghiêm trọng nhất sẽ là:
Bạn đang tìm trị kiểu số, & là số thứ tự của 1 dòng dữ liệu (DL) nào đó mà bạn nhập vô [X2]
Nhưng vùng để phương thức đi dò tìm thì tràng giang đại hải
Lý ra bạn chỉ bó gọn công cuộc tìm kiếm của bạn vùng DL trên cột 'A' mà thôi;
Với vùng DL như bạn viết thì nhỡ đâu các cột sau đó có chứa số bạn cần tìm thì sao?

1 vấn đề nữa phương thức bạn viết chưa tường minh
Bạn hoàn toàn phải viết có tham số xlWhole khi tìm (Việc này bạn nên đọc bài 'Tổng quan về phương thức 'FIND()' có từ lâu trên diễn đàn)
Vì nếu không có tham số này, khi bạn cần tìm con số 9, thì kết quả sẽ không chỉ 9 mà 19, 29,. . .. đều dẫn ra cho bạn, 1 khi trước đó & ai đó hay câu lệnh FIND() nào đó đã áp dụng phương thức FIND() với tham số xlPart

Vùng DL càng bó gọn thì công cuộc tìm kím sẽ càng nhanh cho bạn hơn, bạn có muốn thế không?

Chào bạn & chúc vui nhân dịp cuối tuần!
Xin cảm ơn Thầy. Với yêu cầu File như thế Xin thầy sửa giúp hoặc thay thế bằng Code khác được không ạ
 
Upvote 0
Tôi có sử dụng code lấy dữ liệu từ Sheet DATA sang Sheet B.IN Theo mã gọi tại X2 để thay thế cho hàm Vlookup tại các vùng sheet đánh dấu mầu vàng và mầu hồng

Nhưng mới thử đến khu vực mầu vàng thì code chạy sai ; Cụ thể như sau :

Nếu tại X2 gọi = 1 (Theo số thứ tự bên Sheet DATA) thì code chạy đúng - Nhưng gọi tới 2,3,.... thì code chạy sai

Xin các bạn trợ giúp theo File đính kèm : Trân trọng cảm ơn nhiều nhiều
Số chứng từ có phải là cột A bên sheet Data không bạn? Nếu đúng thì Set abc = Sheet2.Range("A4:A50000").Find(range("X2").value,,,Xlwhole) , và phần offset của bạn cũng sai. Và phải thêm điều kiện if abc nothing then range("A2:W80").clearcontents rồi exit sub, tránh trường hợp nhập sai sẽ báo lỗi
 
Upvote 0
Bạn thử với cái này & mình ái ngại khi được gọi là 'thầy'
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range, sRng As Range, Sh As Worksheet
Dim Rws As Long

Set Sh = ThisWorkbook.Worksheets("Data")
Rws = Sh.[B4].CurrentRegion.Rows.Count
Set Rng = Sh.[A4].Resize(Rws)
If Target.Address = "$X$2" Then
    Set sRng = Rng.Find([X2].Value, , xlFormulas, xlWhole)
    If sRng Is Nothing Then
        MsgBox "Nothing!", , "GPE.COM Xin Chào!"
8    Else
        Range("R3:S3") = Rng.Value
        Range("R8:T8") = Rng.Offset(, 1).Value
        Range("M10:P10") = Rng.Offset(, 2).Value
        Range("R12:T12") = Rng.Offset(, 3).Value
        Range("R17:T17") = Rng.Offset(, 36).Value
        Range("Q21") = Rng.Offset(, 37).Value
        Range("M12:N12") = Rng.Offset(, 32).Value
        Range("M14:N14") = Rng.Offset(, 33).Value
        Range("M16:N16") = Rng.Offset(, 34).Value
        Range("M17:N17") = Rng.Offset(, 35).Value
        Range("F6:H6") = Rng.Offset(, 4).Value
        Range("F10:H10") = Rng.Offset(, 5).Value
        Range("F12:H12") = Rng.Offset(, 6).Value
        Range("F14:H14") = Rng.Offset(, 7).Value
        Range("F16:H16") = Rng.Offset(, 8).Value
        Range("C77:H77") = Rng.Offset(, 39).Value
        Range("O77:T77") = Rng.Offset(, 40).Value
    End If
 End If
End Sub

(Các câu lệnh sau dòng 8 mình không chịu trách nhiệm, mà chỉ chép lại của bạn thôi đó nha.)
 
Upvote 0
Bạn thử với cái này & mình ái ngại khi được gọi là 'thầy'
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range, sRng As Range, Sh As Worksheet
Dim Rws As Long

Set Sh = ThisWorkbook.Worksheets("Data")
Rws = Sh.[B4].CurrentRegion.Rows.Count
Set Rng = Sh.[A4].Resize(Rws)
If Target.Address = "$X$2" Then
    Set sRng = Rng.Find([X2].Value, , xlFormulas, xlWhole)
    If sRng Is Nothing Then
        MsgBox "Nothing!", , "GPE.COM Xin Chào!"
8    Else
        Range("R3:S3") = Rng.Value
        Range("R8:T8") = Rng.Offset(, 1).Value
        Range("M10:P10") = Rng.Offset(, 2).Value
        Range("R12:T12") = Rng.Offset(, 3).Value
        Range("R17:T17") = Rng.Offset(, 36).Value
        Range("Q21") = Rng.Offset(, 37).Value
        Range("M12:N12") = Rng.Offset(, 32).Value
        Range("M14:N14") = Rng.Offset(, 33).Value
        Range("M16:N16") = Rng.Offset(, 34).Value
        Range("M17:N17") = Rng.Offset(, 35).Value
        Range("F6:H6") = Rng.Offset(, 4).Value
        Range("F10:H10") = Rng.Offset(, 5).Value
        Range("F12:H12") = Rng.Offset(, 6).Value
        Range("F14:H14") = Rng.Offset(, 7).Value
        Range("F16:H16") = Rng.Offset(, 8).Value
        Range("C77:H77") = Rng.Offset(, 39).Value
        Range("O77:T77") = Rng.Offset(, 40).Value
    End If
End If
End Sub

(Các câu lệnh sau dòng 8 mình không chịu trách nhiệm, mà chỉ chép lại của bạn thôi đó nha.)
Thưa thây : Khi thay đổi giá trị tại X2 = 2,3... thì các giá trị cần code không thay đổi - Xin thầy xem lại giúp.
- Và nếu có thể thầy thêm cho đoạn khi xóa dữ liệu tại X2 thì các giá trị được code về sẽ xóa trắng luôn - Xin gửi thầy File tôi đã đưa code vào và chạy thử không được
Cảm ơn thầy nhiều
 

File đính kèm

  • File NGD.xlsm
    42.7 KB · Đọc: 2
Lần chỉnh sửa cuối:
Upvote 0
Bạn thử với cái này & mình ái ngại khi được gọi là 'thầy'
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range, sRng As Range, Sh As Worksheet
Dim Rws As Long

Set Sh = ThisWorkbook.Worksheets("Data")
Rws = Sh.[B4].CurrentRegion.Rows.Count
Set Rng = Sh.[A4].Resize(Rws)
If Target.Address = "$X$2" Then
    Set sRng = Rng.Find([X2].Value, , xlFormulas, xlWhole)
    If sRng Is Nothing Then
        MsgBox "Nothing!", , "GPE.COM Xin Chào!"
8    Else
        Range("R3:S3") = Rng.Value
        Range("R8:T8") = Rng.Offset(, 1).Value
        Range("M10:P10") = Rng.Offset(, 2).Value
        Range("R12:T12") = Rng.Offset(, 3).Value
        Range("R17:T17") = Rng.Offset(, 36).Value
        Range("Q21") = Rng.Offset(, 37).Value
        Range("M12:N12") = Rng.Offset(, 32).Value
        Range("M14:N14") = Rng.Offset(, 33).Value
        Range("M16:N16") = Rng.Offset(, 34).Value
        Range("M17:N17") = Rng.Offset(, 35).Value
        Range("F6:H6") = Rng.Offset(, 4).Value
        Range("F10:H10") = Rng.Offset(, 5).Value
        Range("F12:H12") = Rng.Offset(, 6).Value
        Range("F14:H14") = Rng.Offset(, 7).Value
        Range("F16:H16") = Rng.Offset(, 8).Value
        Range("C77:H77") = Rng.Offset(, 39).Value
        Range("O77:T77") = Rng.Offset(, 40).Value
    End If
End If
End Sub

(Các câu lệnh sau dòng 8 mình không chịu trách nhiệm, mà chỉ chép lại của bạn thôi đó nha.)
Thầy bớt chút thời gian xem lại giúp mới ạ. Khi tôi nạp code vào chạy thử vẫn trong tình trạng khi giá trị tại X2 = 2,3.... thì giá trị tại các ô mầu vàng vẫn không nhúc nhích thầy ạ. và khi xóa bỏ dữ liệu tại X2 thì code chạy đúng như khi nạp X2 = 1 (Tôi gửi lại thầy File tôi đã nạp code) - Xin cảm ơn thầy đã quan tâm - Mong nhận được hồi âm
 

File đính kèm

  • File NGD.xlsm
    40.6 KB · Đọc: 5
Upvote 0
Bạn thử với con macro này:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range, sRng As Range, Sh As Worksheet
Dim Rws As Long

Set Sh = ThisWorkbook.Worksheets("Data")
Rws = Sh.[B4].CurrentRegion.Rows.Count
Set Rng = Sh.[A4].Resize(Rws)
If Not Intersect(Target, [X2]) Is Nothing Then
    Set sRng = Rng.Find([X2].Value, , xlFormulas, xlWhole)
    If sRng Is Nothing Then
        MsgBox "Nothing!", , "GPE.COM Xin Chào!"
    Else
        MsgBox Target.Value, , [R3].Value
        
        Range("R3") = Target.Value
        Range("R8:T8") = sRng.Offset(, 1).Value
        Range("M10:P10") = sRng.Offset(, 2).Value
        Range("R12:T12") = sRng.Offset(, 3).Value
        Range("R17:T17") = sRng.Offset(, 36).Value
        Range("Q21") = sRng.Offset(, 37).Value
        Range("M12:N12") = sRng.Offset(, 32).Value
        Range("M14:N14") = sRng.Offset(, 33).Value
        Range("M16:N16") = sRng.Offset(, 34).Value
        Range("M17:N17") = sRng.Offset(, 35).Value
        Range("F6") = sRng.Offset(, 4).Value  '
        Range("F10:H10") = sRng.Offset(, 5).Value
        Range("F12:H12") = sRng.Offset(, 6).Value
        Range("F14:H14") = sRng.Offset(, 7).Value
        Range("F16:H16") = sRng.Offset(, 8).Value
        Range("C77:H77") = sRng.Offset(, 39).Value
        Range("O77:T77") = sRng.Offset(, 40).Value
    End If
 End If
End Sub
 
Upvote 0
Bạn thử với con macro này:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range, sRng As Range, Sh As Worksheet
Dim Rws As Long

Set Sh = ThisWorkbook.Worksheets("Data")
Rws = Sh.[B4].CurrentRegion.Rows.Count
Set Rng = Sh.[A4].Resize(Rws)
If Not Intersect(Target, [X2]) Is Nothing Then
    Set sRng = Rng.Find([X2].Value, , xlFormulas, xlWhole)
    If sRng Is Nothing Then
        MsgBox "Nothing!", , "GPE.COM Xin Chào!"
    Else
        MsgBox Target.Value, , [R3].Value
       
        Range("R3") = Target.Value
        Range("R8:T8") = sRng.Offset(, 1).Value
        Range("M10:P10") = sRng.Offset(, 2).Value
        Range("R12:T12") = sRng.Offset(, 3).Value
        Range("R17:T17") = sRng.Offset(, 36).Value
        Range("Q21") = sRng.Offset(, 37).Value
        Range("M12:N12") = sRng.Offset(, 32).Value
        Range("M14:N14") = sRng.Offset(, 33).Value
        Range("M16:N16") = sRng.Offset(, 34).Value
        Range("M17:N17") = sRng.Offset(, 35).Value
        Range("F6") = sRng.Offset(, 4).Value  '
        Range("F10:H10") = sRng.Offset(, 5).Value
        Range("F12:H12") = sRng.Offset(, 6).Value
        Range("F14:H14") = sRng.Offset(, 7).Value
        Range("F16:H16") = sRng.Offset(, 8).Value
        Range("C77:H77") = sRng.Offset(, 39).Value
        Range("O77:T77") = sRng.Offset(, 40).Value
    End If
End If
End Sub
Cảm ơn thầy nhiều nhiều - Code chạy tốt
 
Upvote 0
Web KT

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

Back
Top Bottom