Anh chị giải dùm ý nghĩa đoạn code này

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

yome

GPE thật tuyệt vời
Tham gia
9/5/08
Bài viết
347
Được thích
113
Em không hiểu vòng lặp lắm. Em đang nghiên cứu về nó. Có ví dụ này em em vẫn chưa hiểu ý nghĩa đoạn code này. Em up lên nhờ anh chị giải thích dùm em nhé!
Anh chi cho em biết ý nghĩa đoạn code màu đỏ nhé:

Mã:
[SIZE=3][FONT=Times New Roman]Dim SNguon As Worksheet[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]Dim SDich As Worksheet[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]Dim n As Long[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]Dim i As Long[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]Dim m As Long[/FONT][/SIZE]
[FONT=Times New Roman][SIZE=3] [/SIZE][/FONT]
[SIZE=3][FONT=Times New Roman]Sub LocSo()[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]    Set SNguon = Sheets("DATA")[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]    Set SDich = Sheets("NKC")[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]    On Error Resume Next[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]    Application.ScreenUpdating = False[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]     n = SDich.Range("I65000").End(xlUp).Row[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]    SDich.Range("A5:I" & n).ClearContents[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]    m = SNguon.Range("I65000").End(xlUp).Row[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]    SNguon.Range("A5:I" & m).Copy Destination:=SDich.Range("A5")[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]    n = SDich.Range("I65000").End(xlUp).Row[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]    [B][COLOR=red]For i = 6 To n[/COLOR][/B][/FONT][/SIZE]
[B][COLOR=red][SIZE=3][FONT=Times New Roman]        If SDich.Range("B" & i) = SDich.Range("B" & i - 1) Then[/FONT][/SIZE][/COLOR][/B]
[B][COLOR=red][SIZE=3][FONT=Times New Roman]            SDich.Range("A" & i) = ""[/FONT][/SIZE][/COLOR][/B]
[B][COLOR=red][SIZE=3][FONT=Times New Roman]            SDich.Range("B" & i) = ""[/FONT][/SIZE][/COLOR][/B]
[B][COLOR=red][SIZE=3][FONT=Times New Roman]            SDich.Range("C" & i) = ""[/FONT][/SIZE][/COLOR][/B]
[SIZE=3][FONT=Times New Roman]        End If[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]    Next[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]    Application.ScreenUpdating = True[/FONT][/SIZE]
[FONT=Times New Roman][SIZE=3]End Sub[/SIZE][/FONT]
 
Các thầy giải thích dùm em với ah!
 
Upvote 0
Em không hiểu vòng lặp lắm. Em đang nghiên cứu về nó. Có ví dụ này em em vẫn chưa hiểu ý nghĩa đoạn code này. Em up lên nhờ anh chị giải thích dùm em nhé!
Anh chi cho em biết ý nghĩa đoạn code màu đỏ nhé:

Mã:
[SIZE=3][FONT=Times New Roman]Dim SNguon As Worksheet[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]Dim SDich As Worksheet[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]Dim n As Long[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]Dim i As Long[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]Dim m As Long[/FONT][/SIZE]

[SIZE=3][FONT=Times New Roman]Sub LocSo()[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]    Set SNguon = Sheets("DATA")[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]    Set SDich = Sheets("NKC")[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]    On Error Resume Next[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]    Application.ScreenUpdating = False[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]     n = SDich.Range("I65000").End(xlUp).Row[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]    SDich.Range("A5:I" & n).ClearContents[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]    m = SNguon.Range("I65000").End(xlUp).Row[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]    SNguon.Range("A5:I" & m).Copy Destination:=SDich.Range("A5")[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]    n = SDich.Range("I65000").End(xlUp).Row[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]    [B][COLOR=red]For i = 6 To n[/COLOR][/B][/FONT][/SIZE]
[B][COLOR=red][SIZE=3][FONT=Times New Roman]        If SDich.Range("B" & i) = SDich.Range("B" & i - 1) Then[/FONT][/SIZE][/COLOR][/B]
[B][COLOR=red][SIZE=3][FONT=Times New Roman]            SDich.Range("A" & i) = ""[/FONT][/SIZE][/COLOR][/B]
[B][COLOR=red][SIZE=3][FONT=Times New Roman]            SDich.Range("B" & i) = ""[/FONT][/SIZE][/COLOR][/B]
[B][COLOR=red][SIZE=3][FONT=Times New Roman]            SDich.Range("C" & i) = ""[/FONT][/SIZE][/COLOR][/B]
[SIZE=3][FONT=Times New Roman]        End If[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]    Next[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]    Application.ScreenUpdating = True[/FONT][/SIZE]
[FONT=Times New Roman][SIZE=3]End Sub[/SIZE][/FONT]


Cái đoạn code trên để trích lọc số liệu, sau khi trích xong thì xóa nhưng hàng có giá trị bằng với giá trị của hang ngay phía trên nó
Ý nghĩa cụ thể nhu sau

PHP:
 n = SDich.Range("I65000").End(xlUp).Row    ' Lấy hàng cuối cùng có giá trị của cột I sheet SDich(ở dây là Sheet NKC
 For i = 6 To n                                                ' Chạy vòng lặp từ 6 tới n (hàng dầu tiên có số liệu là hàng 6, hàng cuối là hàng n
 If SDich.Range("B" & i) = SDich.Range("B" & i - 1) Then ' Nếu dữ liệu ở cột B của hang đang xét (hàng i) bằng dữ liệu của cột B hàng ngay phía trên(hàng i-1) thì
 SDich.Range("A" & i) = ""                                    ' Gán giá trị là Null cho ô ở cột A,B,C cùng hàng
 SDich.Range("B" & i) = ""
 SDich.Range("C" & i) = ""

Đoạn code trên có thể sửa như sau

PHP:
Sub LocSo()
    Set SNguon = Sheets("DATA")
    Set SDich = Sheets("NKC")
    On Error Resume Next
    Application.ScreenUpdating = False
    n = SDich.Range("I65000").End(xlUp).Row
    SDich.Range("A5:I" & n).ClearContents
    m = SNguon.Range("I65000").End(xlUp).Row
    SNguon.Range("A5:I" & m).Copy Destination:=SDich.Range("A5")
    With SDich
        n = .Range("I65000").End(xlUp).Row
        For i = 6 To n
            If .Range("B" & i) = .Range("B" & i - 1) Then
                .Range("A" & i & ":C" & i) = ""
         End If
        Next
    End With
    Application.ScreenUpdating = True
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Cái đoạn code trên để trích lọc số liệu, sau khi trích xong thì xóa nhưng hàng có giá trị bằng với giá trị của hang ngay phía trên nó
Ý nghĩa cụ thể nhu sau

PHP:
 n = SDich.Range("I65000").End(xlUp).Row ' Lấy hàng cuối cùng có giá trị của cột I sheet SDich(ở dây là Sheet NKC
For i = 6 To n ' Chạy vòng lặp từ 6 tới n (hàng dầu tiên có số liệu là hàng 6, hàng cuối là hàng n
If SDich.Range("B" & i) = SDich.Range("B" & i - 1) Then ' Nếu dữ liệu ở cột B của hang đang xét (hàng i) bằng dữ liệu của cột B hàng ngay phía trên(hàng i-1) thì
SDich.Range("A" & i) = "" ' Gán giá trị là Null cho ô ở cột A,B,C cùng hàng
SDich.Range("B" & i) = ""
SDich.Range("C" & i) = ""
Thân

Cám ơn Minh Nguyệt nhiều lắm!
Minh Nguyệt cho mình xin số di động nhé!?
Mình là người mới có vốn kiến thức về VBA còn ít. Mình đang tìm hiểu để học hỏi. Mình muốn xin Minh Nguyệt số để thi thoảng trao đôir. Hi vọng Minh Nguyệt không từ chối!
 
Upvote 0
Web KT

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

Back
Top Bottom