Vùng chọn (Range) trong VBA??

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

Quy Vu

Thành viên chính thức
Tham gia
4/8/17
Bài viết
65
Được thích
4
Giới tính
Nam
Chào các anh chị trong diễn đàn, e có đoạn code như dưới
Mã:
Public Sub s_Gpe()
Dim sArr(), I As Long, R As Long, Txt As String
sArr = Range("A2", Range("A2").End(xlDown)).Resize(, 3).Value
R = UBound(sArr)
For I = 1 To R
    If sArr(I, 3) = "Wood" Then Txt = Txt & sArr(I, 1) & ChrW(10)
Next I
MsgBox "xxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyy:" & ChrW(10) & ChrW(10) & Txt, , "GiaiphapExcel.com"
End Sub
Em không hiểu cái chỗ sArr = Range("A2", Range("A2").End(xlDown)).Resize(, 3).Value vì nếu chọn range thì người ta hay viết vd: Range("A1:A2"), ở kia lại là dấu phẩy
For I = 1 To R
If sArr(I, 3) = "Wood" Then Txt = Txt & sArr(I, 1) & ChrW(10)
Next I
Cái đoạn code For...to là lấy dữ liệu từ ô, em không biết cái này là thuộc đoạn lý thuyết nào ấy ạ? vì cái này sArr(I,3) thường dùng cho mảng, e muốn hỏi thêm nếu e muốn sửa dữ liệu một ô trong vùng sArr thì làm như nào ạ?
Mong anh chị giải đáp, vì e không rõ lên diễn đạt hơi khó hiểu, mong anh chị bỏ qua!
 
Em không hiểu cái chỗ sArr = Range("A2", Range("A2").End(xlDown)).Resize(, 3).Value vì nếu chọn range thì người ta hay viết vd: Range("A1:A2"), ở kia lại là dấu phẩy
Đọc mục 3 ở bài này: https://www.giaiphapexcel.com/diendan/threads/bài-6-range-cells.130603/

Dùng End(xlDown) phải bẫy lỗi trường hợp 'tụt *** tận chân'.
Cái đoạn code For...to là lấy dữ liệu từ ô, em không biết cái này là thuộc đoạn lý thuyết nào ấy ạ? vì cái này sArr(I,3) thường dùng cho mảng, e muốn hỏi thêm nếu e muốn sửa dữ liệu một ô trong vùng sArr thì làm như nào ạ?
Đọc bài này: http://www.giaiphapexcel.com/diendan/threads/bài-10-array.130807/
 
Upvote 0
Em không hiểu cái chỗ sArr = Range("A2", Range("A2").End(xlDown)).Resize(, 3).Value vì nếu chọn range thì người ta hay viết vd: Range("A1:A2"), ở kia lại là dấu phẩy
Diễn dịch ra tiếng mẹ đẻ từ ngôn ngữ VBA thì là:
Lấy vùng dữ liệu bắt đầu từ ô [A2] đến ô cuối của cột A có chứa dữ liệu; (vùng này) được mở rọng sang phải (thêm) 3 cột gán vô mảng sRaa() đã khai báo (A)

Phương thức End(xlDown)) từ ô [A2] sẽ giống như ta thao tác (trên bàn phím):
Chọn ô [A2] & nhấn tổ hợp CTRL & mũi tên xuống
Phương thức này cho ta cách đi đến dòng cuối có dữ liệu của 1 cột có ô đang chọn ([A2])

Cũng là diễn dịch như A, nhưng bạn có thể bắt gặp các cách viết như sau:
sArr()=Range("A2: D20").Value : Cái này bạn quen mắt & [D20] là tĩnh; Khi D20 là 'Động' thì:
sArr() = Range([A2], [A2].End(xldown)).Resize(, 3).Value
sArr() = Range([A2], [A2].End(xldown).offset(, 2)).Value
. . . .
Cách đơn giản để bạn tự hiểu chuyện ngày sẽ là:
Trước hay sau câu lệnh không hiểu ta xài câu lệnh:

MsgBox Range([A2], [A2].End(xldown).offset(, 2))..Address

Cái đoạn code For...to là lấy dữ liệu từ ô, em không biết cái này là thuộc đoạn lý thuyết nào ấy ạ?
Đó không phải như bạn nghĩ, rằng lấy dữ liệu từ ô; Mà là nên được diễn dịch như sau
Điều kiện (Khi đang duyệt trong vòng lặp) nếu phần tử thứ 3 của dòng (mảng) đang duyệt trùng với từ "Wood" thì
Lấy phần tử đầu (của dòng) nối tiếp vô biến Txt đã khai báo & sau đó nối tiếp vô thêm ký tự CHR(10) (Tạm hiểu là "Kí tự" ấn định xuống dòng dưới liền kề)
e muốn hỏi thêm nếu e muốn sửa dữ liệu một ô trong vùng sArr thì làm như nào ạ?
Các câu lệnh mà bạn trích dẫn không thể xen chuyện sửa dữ liệu trong mảng được. Bạn nên cho ra khỏi đầu suy nghỉ đó đi thôi!

Chúc vui!
 
Upvote 0
Cám ơn các anh / chị, e hiểu rồi ạ! :D
 
Upvote 0
Web KT

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

Back
Top Bottom