Hỏi về Offset trong VBA

Liên hệ QC

ninhmoon

Thành viên tiêu biểu
Tham gia
3/3/14
Bài viết
525
Được thích
48
Anh chị cho e hỏi cái dòng code "ActiveCell.Offset(1, 0).Range("A1").Select" có nghĩa là sao ah? có thể giải thích cho e chi tiết không ah.
Khi nào thì sử dụng nó.
Nó Có tác dụng gì?


[GPECODE=vb]
Sub diachituongdoi()
ActiveCell.FormulaR1C1 = " Ninh Thi Tien"
ActiveCell.Offset(1, 0).Range("A1").Select


End Sub
[/GPECODE]
 
Anh chị cho e hỏi cái dòng code "ActiveCell.Offset(1, 0).Range("A1").Select" có nghĩa là sao ah? có thể giải thích cho e chi tiết không ah.
Khi nào thì sử dụng nó.
Nó Có tác dụng gì?


[GPECODE=vb]
Sub diachituongdoi()
ActiveCell.FormulaR1C1 = " Ninh Thi Tien"
ActiveCell.Offset(1, 0).Range("A1").Select


End Sub
[/GPECODE]

là tại cell đang đứng (activecell)
nhảy xuống một dòng
nhưng sao lại có range("A1") để làm gì vậy?
chỉ cần vậy
Mã:
ActiveCell.Offset(1, 0).Select
 
Upvote 0
là tại cell đang đứng (activecell)
nhảy xuống một dòng
nhưng sao lại có range("A1") để làm gì vậy?
chỉ cần vậy
Mã:
ActiveCell.Offset(1, 0).Select


Khi e cho CHạy code thì e cũng thấy như vậy.
Nhưng ý e là nó có tác dụng như thế nào. và khi nào thì dùng nó.
Bác LetGaugau có thể nói chi tiết và rõ hơn không.
Cái Range("A1") cũng không biết thấy code cũ có như thế. E cũng không hiểu có tác dụng như thế nào?
 
Upvote 0
Khi e cho CHạy code thì e cũng thấy như vậy.
Nhưng ý e là nó có tác dụng như thế nào. và khi nào thì dùng nó.
Bác LetGaugau có thể nói chi tiết và rõ hơn không.
Cái Range("A1") cũng không biết thấy code cũ có như thế. E cũng không hiểu có tác dụng như thế nào?

thì offset là nó dời vị trí so với vị trí mình chọn
ví dụ
[A1].offset(1)
là nó thành A2
[A1].offset(,1) thì nó thành [B1]
tức là offset (dòng, cột)
tương tự như vậy bạn có lệnh resize
ví dụ
[A1].resize(1)==>nó thàng range A1:A2
[A1].resize(,1)==> nó thành A1:B1

hy vọn rỏ phần nào
 
Upvote 0
thì offset là nó dời vị trí so với vị trí mình chọn
ví dụ
[A1].offset(1)
là nó thành A2
[A1].offset(,1) thì nó thành [B1]
tức là offset (dòng, cột)
tương tự như vậy bạn có lệnh resize
ví dụ
[A1].resize(1)==>nó thàng range A1:A2
[A1].resize(,1)==> nó thành A1:B1

hy vọn rỏ phần nào
Mấy cái đỏ đỏ là trật rồi nha.
 
Upvote 1
ninhmoon;615483]Anh chị cho e hỏi cái dòng code "ActiveCell.Offset(1, 0).Range("A1").Select" có nghĩa là sao ah? có thể giải thích cho e chi tiết không ah.
Khi nào thì sử dụng nó.
Nó Có tác dụng gì?
Giải thích nôm na thôi nha.

1- Nghĩa của Offset:
Offset có nghĩa là "chuyển dịch". Cú pháp .Offset(số dòng, số cột).
Ví dụ: .Offset(1,0) có nghĩa là tại vị trí xác định, dịch chuyển tới vị trí mới, cách vị trí cũ 1 dòng, 0 cột. Do không dịch chuyển cột nên có thể viết tắt là .Offset(1).
hoặc .Offset(0,1) là dịch chuyển 0 dòng, 1 cột nên có thể viết tắt là .Offset(,1)

2- Khi nào thì sử dụng nó.
Sử dụng nó khi ta không thể xác định được vị trí vùng (dòng, cột) cần chọn mà phải thông qua 1 vị trí khác có thể xác định.

Ví dụ: khi bạn lấy phòng nghỉ, lễ tân đưa cho bạn chìa khóa có số phòng là 215 và dặn: tầng 3 phòng 15
Tức là từ tầng 1 bạn phải đi 2 tầng và 14 phòng

Vậy câu lệnh sẽ là:
Mã:
Sub TimPhong()
    Tầng1 .Offset(2, 14)
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Anh chị cho e hỏi cái dòng code "ActiveCell.Offset(1, 0).Range("A1").Select" có nghĩa là sao ah? có thể giải thích cho e chi tiết không ah.
Khi nào thì sử dụng nó.
Nó Có tác dụng gì?
[GPECODE=vb]
Sub diachituongdoi()
ActiveCell.FormulaR1C1 = " Ninh Thi Tien"
ActiveCell.Offset(1, 0).Range("A1").Select


End Sub
[/GPECODE]

Activecell là ô được chọn, nếu chọn cả vùng trong bảng tính thì activecell là ô đầu tiên được chọn (ô này có màu giống những ô không được chọn và không nhất thiết phải là ô góc trên bên trái vì có thể chọn từ dưới lên).
Activecell.Offset(1,0) là ô ở dưới activecell 1 dòng và cùng cột.
Activecell.Offset(1,0).Range("A1") là ô góc trên trái của activecell.offset(1,0). Range("A1") ở đây cũng như cells(1,1) không phải ô A1 trên bảng tính. Ví dụ Range("A2:B2").Range("A2") là ô B2. Tuy nhiên do activecell là 1 ô duy nhất nên thêm range("A1") là thừa.
 
Upvote 0
Anh chị cho e hỏi cái dòng code "ActiveCell.Offset(1, 0).Range("A1").Select" có nghĩa là sao ah? có thể giải thích cho e chi tiết không ah.
Khi nào thì sử dụng nó.
Nó Có tác dụng gì?


[GPECODE=vb]
Sub diachituongdoi()
ActiveCell.FormulaR1C1 = " Ninh Thi Tien"
ActiveCell.Offset(1, 0).Range("A1").Select


End Sub
[/GPECODE]

Nếu bạn chịu khó học sơ qua cách debug code - chỉ cần sơ sơ thôi, 1 tiếng đồng hồ là cùng.
Kể từ ấy về sau, bạn có thể dùng debug để tự trả lời 90% các thắc mắc của mình về "code này làm gì?"

trong đoạn code kia, bạn chỉ cần biết hầu hết các hàm/thuộc tính/phương thức liên quan đến range đều có thể dễ hiểu hơn nếu ta bảo nó liệt kê cái địa chỉ của nó ra:

Mã:
Sub diachituongdoi()
ActiveCell.FormulaR1C1 = " Ninh Thi Tien"

[COLOR=#ff0000]MsgBox ActiveCell.Offset(1, 0).Addess[/COLOR]

ActiveCell.Offset(1, 0).Range("A1").Select

[COLOR=#ff0000]MsgBox ActiveCell.Addess & " " & Selection.Address
[/COLOR]
[COLOR=#0000ff]ActiveCell.FormulaR1C1 = " Ninh Thi Tien, địa chỉ mới"
[/COLOR]
End Sub

Đại khái là vậy, thử tới thử lui một hồi sẽ nghiệm ra chân lý.
 
Upvote 0
Cái này sử dụng trong Record marco với Use Relative References. Khi đó thì VBA sẽ chọn ô đầu tiên sau khi di chuyển từ ActiveCell làm ô A1 (tuyệt đối của tương đối) (khác với ô A1 trong bảng tính)
 
Upvote 0
Web KT

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

Back
Top Bottom