Hỏi về đối tượng Range trong VBA.

Liên hệ QC

tramp

Thành viên mới
Tham gia
22/2/09
Bài viết
18
Được thích
2
Chào các bạn.
Cho mình hỏi là để truy cập đến 1 vùng dữ liệu vd : [A1:B2] thì dùng code là :
Range("A1:B2").Select
Nhưng cách truy cập trên gặp phải một hạn chế là khi mình muốn vùng nầy chạy trong vòng lập thì không thể (Tức là địa chỉ vùng sẽ thay đổi theo từng loop thì ko được).
Vậy có cách truy cập đến vùng như thế nào để địa chỉ vùng có thể thay đổi không?
Cám ơn các bạn nhiều.
 
Lần chỉnh sửa cuối:
Chào các bạn.
Cho mình hỏi là để truy cập đến 1 vùng dữ liệu vd : [A1:B2] thì dùng code là :
ActiveSheet("Sheet1").Range("A1:B2").Select
Nhưng cách truy cập trên gặp phải một hạn chế là khi mình muốn vùng nầy chạy trong vòng lập thì không thể (Tức là địa chỉ vùng sẽ thay đổi theo từng loop thì ko được).
Vậy có cách truy cập đến vùng như thế nào để địa chỉ vùng có thể thay đổi không?
Cám ơn các bạn nhiều.
Code này mà chạy được mới ghê! ---> Gì mà ActiveSheet("Sheet1") chứ
Có nhiều cách để truy xuất vùng dử liệu thông qua vòng lập
Ví dụ:
PHP:
For Each Clls in Range("A1:A10")
     Gì gì đó = Clls.Value
Next Clls
hoặc
PHP:
For i = 1 to 10
      Range("A1:A10")(i)
Next i
vân vân và vân vân...
Bạn phải cho file lên, nói rõ ý định mới biết nên làm thế nào được!
 
Đây là file mình cần giúp mong các bạn chỉ giáo.
Mình muốn tạo 1Macro để chọn vùng dữ liệu thôi (Còn dùng trong vòng lặp thì chưa cần lắm)
Mình có ghi cụ thể trong file.
Thanks
 

File đính kèm

  • Hoi ve doi tuong Range.xls
    15.5 KB · Đọc: 76
Lần chỉnh sửa cuối:
Câu hỏi chưa rõ lắm , dữ liệu trong cột A,C,E là gì ?
Nếu chọn số 4 như ví dụ ở 3 cột đều có thì hiểu thế nào
 
Mình ví dụ thế nầy cho dể hiểu đi.
Đối với câu lệnh nầy Cells(1,2).Select : Đia chỉ ô là cố định
Còn câu lệnh nầy Cells(i,j).Select : Đia chỉ ô có thể thay đổi tùy theo giá trị của i,j
Câu lệnh nầy Range("A1:A2").Select : Đia chỉ vùng là cố định
Vậy câu lệnh nào để chọn vùng mà địa chỉ vùng có thể thay đổi.? (Giả sử mình viết Range(i:j).select thì VBA ko hỉu) .Ý mình muốn hỏi là cú pháp đó.
 
Mình ví dụ thế nầy cho dể hiểu đi.
Đối với câu lệnh nầy Cells(1,2).Select : Đia chỉ ô là cố định
Còn câu lệnh nầy Cells(i,j).Select : Đia chỉ ô có thể thay đổi tùy theo giá trị của i,j
Câu lệnh nầy Range("A1:A2").Select : Đia chỉ vùng là cố định
Vậy câu lệnh nào để chọn vùng mà địa chỉ vùng có thể thay đổi.? (Giả sử mình viết Range(i:j).select thì VBA ko hỉu) .Ý mình muốn hỏi là cú pháp đó.

VD :
Range("A1:B" & i).select
Range(cells(i,1),cells(1,j)).select
 
...
Có nhiều cách để truy xuất vùng dử liệu thông qua vòng lập
Ví dụ:
PHP:
For Each Clls in Range("A1:A10")
     Gì gì đó = Clls.Value
Next Clls
hoặc
PHP:
For i = 1 to 10
      Range("A1:A10")(i)
Next i
vân vân và vân vân...

Tôi mới biết 2 kiểu vòng lặp này và thường dùng tuỳ thích. Hôm nay đọc bài Bàn về thói quen comments (viết diễn giải) và optimizing (tối ưu) khi coding của anh Hai2Hai có nói rằng "viết chạy ra đúng thì chưa đủ. Viết phải tối ưu..." nên tôi muốn biết khi nào nên dùng vòng lặp For Each Clls in Range, khi nào nên dùng vòng lặp For i. ? Thanks !
 
Lần chỉnh sửa cuối:
Tôi mới biết 2 kiểu vòng lặp này và thường dùng tuỳ thích.
. . . Tôi muốn biết khi nào nên dùng vòng lặp For Each Clls in Range, khi nào nên dùng vòng lặp For i. ? Thanks !

Một điều mình vừa cảm nhận ngay là For i . . . phải liên tục hay cách quảng đều đặn;
Còn For each . . . (dùng cho Cells) có thể là 1 tập hợp rời rạc, tản mạn (thiếu trật tự)

:-=
 
Mình ví dụ thế nầy cho dể hiểu đi.
Đối với câu lệnh nầy Cells(1,2).Select : Đia chỉ ô là cố định
Còn câu lệnh nầy Cells(i,j).Select : Đia chỉ ô có thể thay đổi tùy theo giá trị của i,j
Câu lệnh nầy Range("A1:A2").Select : Đia chỉ vùng là cố định
Vậy câu lệnh nào để chọn vùng mà địa chỉ vùng có thể thay đổi.? (Giả sử mình viết Range(i:j).select thì VBA ko hỉu) .Ý mình muốn hỏi là cú pháp đó.
Tôi đoán cái bạn cần có lẽ là:
PHP:
Sub Test()
  With ActiveCell
    Range(Cells(1, .Column), Cells(65536, .Column).End(xlUp)).Select
  End With
End Sub
Xem file ví dụ
 

File đính kèm

  • Select_Range.xls
    19 KB · Đọc: 209
tôi muốn biết khi nào nên dùng vòng lặp For Each Clls in Range, khi nào nên dùng vòng lặp For i. ? Thanks !

For Each A in B:
B phải là 1 tập hợp các phần tử cùng loại đã xác định trước (có thể là 1 vùng ô, nhiều vùng ô, các đối tượng drawing, ...). A là 1 phần tử trong B
Vòng lặp duyệt lần lượt từng phần tử A của B theo một thứ tự do VBA quy định (1 vùng ô thì ô duyệt lần lượt từ trái qua phải, từ trên xuống dưới. Đối tượng drawing thì đối tượng tạo trước đến đối tượng tạo sau, ...).

For i=n to m (step ...):
i chỉ là 1 số chạy từ n đến m. Không liên quan bất kỳ đối tượng nào. Tùy yêu cầu mà ta sử dụng i cho một mục đích nào đó. Sử dụng vòng lặp này ta kiểm soát được thứ tự lặp.

Các thủ tục dưới đây ghi địa chỉ các ô vùng B1:D3 vào cột A
MyRange duyệt các ô theo thứ tự từ cột B > D, từ dòng 1 đến 3
Mã:
Sub MyRange()
r = 1
For Each mycell In Range("B1:D3")
  Cells(r, 1) = mycell.Address(0, 0)
  r = r + 1
Next
End Sub

ForNext1 cho làm việc như MyRange
Mã:
Sub ForNext1()
r = 1
For cc = 2 To 4
  For rr = 1 To 3
    Cells(r, 1) = Cells(rr, cc).Address(0, 0)
    r = r + 1
  Next
Next
End Sub

ForNext2 duyệt các ô theo thứ tự ngược lại, từ dòng 1 đến 3, từ cột B > D
Mã:
Sub ForNext2()
r = 1
For rr = 1 To 3
  For cc = 2 To 4
    Cells(r, 1) = Cells(rr, cc).Address(0, 0)
    r = r + 1
  Next
Next
End Sub
 
Web KT
Back
Top Bottom