Truy xuất bằng phương thức Offset của 1 vùng?

  • Thread starter QDuc
  • Ngày gửi
QDuc

QDuc

Cao cấp
3/6/06
254
18
18
Biển khơi
Tôi đã chọn một số ô, VD C4:C9;
Tại đây bằng cách nào tôi lấy gia trị ô B3 đưa vô biến đã khai báo;
Các bạn giúp tôi viết câu lệnh này với;
Sub TruySuat(Rng As Range)
Dim Temp As Variant
'?
Temp = Rng.Ofset(-1,-1).Value
MsgBox Temp.Address
Lúc đó sẽ hiện không chỉ là ô B3 tôi cần mà 3 ô B3:B5

Mong sự giúp đỡ & hết sức cảm ơn!
 
Khóa học Quản trị dòng tiền
adam_tran

adam_tran

Guitar inspiration
17/5/05
1,373
36
48
48
Goooogle
Sub TruySuat(Rng As Range)
Dim Temp As Variant
'?
Temp = Rng.Ofset(-1,-1).Value
MsgBox Temp.Address

Không rõ lắm ý của bạn.
Thủ tục (chứ không phải hàm) trên kết thúc bằng 1 msgbox. Nhưng biến Temp trả về 1 giá trị chắc chắn không phải là 1 object - không phải 1 range mà là 1 giá trị chứa trong ô được xác định bởi biến Rng (vì biến Rng là 1 Range - Rng as Range) (câu lệnh màu đỏ sẽ sai).
Ý bạn muốn thủ tục (hay hàm) trả về 1 Range bằng 1 loạt các phép tính toán phụ thuộc vào biến đưa vào hàm thì cú pháp phải là:
Function TruyXuat(Rng as Variant) as Range
Cau lenh 1
Cau lenh 2
.......
TruyXuat = f(Rng)
f chính là hàm số tính toán phụ thuộc vào giá trị Rng.
Có phải vậy không?
 
QDuc

QDuc

Cao cấp
3/6/06
254
18
18
Biển khơi
Xin lỗi Adam & các bạn; Í mình là như vầy:
Sub TruySuat(Rng As Range)
Dim Temp As Variant, Rng1 As Range
For Each Rng1 In Rng
MsgBox Rng.Ofset(-1,-1).Address
Next Rng1

End Sub

Nếu tôi chọn trước 3 ô C4:C6 & nhấn tổ hợp phím gán trước để chạy macro này, thì tôi sẽ nhận (hiện trong Box) lần lượt 3 địa chỉ:
$B$3
$B$4
$B$5
Xin cảm ơn Adam & mọi người quan tâm!!
 
S

SA_DQ

Thành viên Cố vấn - Webketoan Mentors
29/6/05
614
104
43
68
HCM city
Thử cái này xem có đúng í bạn chưa(?)

Option Explicit
Sub OffsetArray()
Dim Matx, Rng As Range
Dim iJ As Integer

Set Rng = Selection
Matx = Rng.Offset(-1, -1).Value
For iJ = 1 To 3
MsgBox Matx(iJ, 1)
Next iJ
End Sub

Nếu bạn chọn & kích hoạt trước 4 ô tại C3:C7 thì sẽ hiện lên giá trị tại
B2 , B3 & B4
 
adam_tran

adam_tran

Guitar inspiration
17/5/05
1,373
36
48
48
Goooogle
Thế này có phải đúng ý chưa?

Sub TruySuat(Rng As Range)
Dim Temp As Range, Rng1 As Range
'Vì Temp là 1 biến kiểu object nên khi gán giá trị phải dùng lệnh Set
Set Temp = Rng.Offset(-1, -1)
For Each Rng1 In Temp.Cells
MsgBox Rng1.Address
Next Rng1
End Sub

Sub Test()
Dim Tmp As Range
Set Tmp = Selection
TruySuat Tmp
End Sub
 

Xem nhiều