Cho em hỏi ý nghĩa đoạn CODE truy xuất dữ liệu sau

Liên hệ QC

StudyVBA

Thành viên mới
Tham gia
14/10/10
Bài viết
2
Được thích
0
Kính chào các bác trong GPE.

Em đang chập chững học VBA, hôm nay gặp đoạn CODE này em không hiểu cú pháp. Mong các bác giải đáp giúp em:

Mã:
Bnguon = ThisWorkbook.Name
'Khai bao:

    Dim Sh As Worksheet, Rng As Range, sRng As Range
    Set Sh = Workbooks(Bnguon).Sheets("dulieu")
    Set Rng = Sh.Range(Sh.[A7], Sh.[A20000].End(xlUp))

Application.Calculation = xlCalculationManual

'Vong lap truy xuat du lieu:

    Do Until Selection.Offset(0, 2) = ""
    Set X = Selection
    Set sRng = Rng.Find(X, , xlFormulas, xlWhole)
    Selection.Offset(1, 0).Select
    If sRng Is Nothing Or [COLOR="red"]sRng(2, 2[/COLOR]) = "" Then
      Selection.Offset(-1, 0).Font.ColorIndex = 3
    Else
        If [COLOR="red"]sRng(3, 2)[/COLOR] = "" Then [COLOR="red"]sRng(2, 2)[/COLOR].EntireRow.Copy
        If [COLOR="red"]sRng(3, 2)[/COLOR] <> "" Then Range([COLOR="red"]sRng(2, 2)[/COLOR], [COLOR="red"]sRng(2, 2)[/COLOR].End(xlDown)).EntireRow.Copy
        Selection.Insert Shift:=xlDown
        Selection.End(xlDown).Select
    End If
    Loop
    Application.CutCopyMode = False
.

Cái cú pháp (?) mà em bôi màu đỏ ấy ạ, em chả hiểu nó có ý nghĩa như nào. Các bác giải thích cho em với.

Chân thành cảm ơn các bác!
 
Em chập chững VBA, nay gặp đoạn CODE em không hiểu cú pháp. Mong các bác giải đáp giúp em:
Mã:
Bnguon = ThisWorkbook.Name
'Khai bao:

    Dim Sh As Worksheet, Rng As Range, sRng As Range
    Set Sh = Workbooks(Bnguon).Sheets("dulieu")
    Set Rng = Sh.Range(Sh.[A7], Sh.[A20000].End(xlUp))

Application.Calculation = xlCalculationManual

'Vong lap truy xuat du lieu:

    Do Until Selection.Offset(0, 2) = ""
    Set X = Selection
    Set sRng = Rng.Find(X, , xlFormulas, xlWhole)
    Selection.Offset(1, 0).Select
1    If sRng Is Nothing Or [COLOR="red"]sRng(2, 2[/COLOR]) = "" Then
      Selection.Offset(-1, 0).Font.ColorIndex = 3
    Else
2        If [COLOR="red"]sRng(3, 2)[/COLOR] = "" Then [COLOR="red"]sRng(2, 2)[/COLOR].EntireRow.Copy
3        If [COLOR="red"]sRng(3, 2)[/COLOR] <> "" Then Range([COLOR="red"]sRng(2, 2)[/COLOR], [COLOR="red"]sRng(2, 2)[/COLOR].End(xlDown)).EntireRow.Copy
        Selection.Insert Shift:=xlDown
        Selection.End(xlDown).Select
    End If
    Loop
    Application.CutCopyMode = False
.

Thường ta dịch từ fải sang trái, như sau:

(1) Nếu ô cách ô tìm thấy 2 cột về fía fải & 2 dòng dưới nó có trị rỗng hay không tìm thấy thì

(2) Nếu ô cách ô tìm thấy 2 cột về fía fải & 3 dòng dưới nó có trị rỗng thì Copy dòng dưới dòng tìm thấy 2 dòng

(3) Nếu ô cách ô tìm thấy 2 cột về fía fải & 3 dòng dưới nó có trị khác rỗng thì Copy vùng các dòng kể từ dòng thứ 2 dưới dòng tìm thấy cho đến dòng mà bắt đầu từ ô cách ô tìm thấy 2 cột về fía fải & 2 dòng dưới nó (dòng tìm thấy) có dữ liệu liên tục theo cột.
Để rõ hơn ta xét trực quan như sau:


4||B|C|D|E|
5|| 35 ||12|Hoa|
6||5||13|Nga|
7||41||14|Vy|
8||15||15|Na|
9||57||16|Ba|
10||75||17||
11||59||18|Sy|

Khi đó B5 là ô được tìm thấy (sRng); còn E7 sẽ là sRng(2,2) & các dòng được chép sẽ là dòng 7 đến dòng 9 vì E10 rỗng.
 
Upvote 0
Cảm ơn bác. Bác thật tuyệt vời! :D

Xin cho em hỏi thêm là cái cú pháp sRng(2,2) có liên quan gì đến phương thức Offset hay không? Nếu không thì nó là cái gì vậy? (phương thức???) Em có thể tìm thấy hướng dẫn của nó ở đâu ạ?
 
Upvote 0
Bạn thử đi, tự ên nha

PHP:
Option Explicit
Sub MmM()
 Dim Rng As Range
 
 Set Rng = [B5]
 MsgBox Rng(2, 2).Address, , Rng.Offset(2, 2).Address
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom