anhtuan1066
Thành viên gạo cội
- Tham gia
- 10/3/07
- Bài viết
- 5,802
- Được thích
- 6,912
Các cao thủ cho hỏi: Trong VBA ta dùng code gì đễ truy xuất phần tử thứ n cũa 1 mãng cho trước?
ANH TUẤN
ANH TUẤN
VD ta có mảng n cột, m hàng với hàng đầu tiên có số thứ tự là 0 Mang(m,n)anhtuan1066 đã viết:Các cao thủ cho hỏi: Trong VBA ta dùng code gì đễ truy xuất phần tử thứ n cũa 1 mãng cho trước?
ANH TUẤN
Đúng là cao thủ nói cao thủ hiểu. Hay quá nhưng chẳng hiểu gì cả. Trình độ mình còn non kém. Mong bác tuấn hay bác Okebab giải thích rõ và cho một VD đi . ThanksMr Okebab đã viết:VD ta có mảng n cột, m hàng với hàng đầu tiên có số thứ tự là 0 Mang(m,n) phần tử thứ i tại cột x là : Mang(i-1,x) Thân!
anhtuan1066 đã viết:Bắp cho hỏi thêm: Nếu tôi có 1 name mà giá trị cũa nó là 1 mãng.. Ví dụ name ARR = {9,10,11,12,13,14,15} (mãng ngang)
Vậy nếu tôi muốn truy xuất phần tử thứ 5 cũa mãng này thì cú pháp nó như thế nào?
(Đây là 1 mãng ảo, dc tạo ra nhờ công thức chứ nó ko nhìn thấy dc trong Worksheet)
Nó nằm chổ nào đại ca ơi... tìm cực quá mà hỏng có thấy... Tốt nhất là cho luôn cái cú pháp cũa nó, đở mất công tìm...levanduyet đã viết:To: anhtuan1066,
Anh nên đọc bài về mãng trong CLB VEC.
Các bạn hãy chỉ cho tôi biết nếu dùng code thì làm như thế nào?
Option Explicit
Sub MangName()
Dim Rng As Range
Set Rng = Range("Ten")
MsgBox Rng.Cells(3, 1)
End Sub
anhtuan1066 đã viết:Cám ơn file cũa Duyệt.. xem như tôi cũng học thêm dc 1 chút...
Nhưng mà.. với cái mãng ARR mà tôi đã đặt trong Define name thì các cách mà cao thủ hướng dẫn vẩn chưa thành công...
Như tôi đã nói, cái mãng này nó tương đối đặt biệt, gần như ko tham chiếu đến bất cứ cell nào cã, vì thế nó ko phải là 1 range... áp dụng vào sẽ lập tức báo lỗi... Mãng ARR mà tôi dùng trong file ấy có 5 phần tử, giá trị luôn luôn biến động do quá trình tính toán cũa các công thức...
Nghi cũng lạ, nếu tôi show mãng ấy ra 5 cell trên bãng tính rồi dùng cú pháp truy xuất mãng lại ko có vấn đề... Vụ này có lần đã bàn trên diển đàn rồi, có khi giá trị của name đưa vào code nó lại chẳng hiễu... thế mới chết!
ANH TUẤN
Rõ ràng với công thức trên thì ARR không thể là 1 Range được (vì hàm Large trả về số lớn thứ k trong mảng).=LARGE((WEEKDAY(NGAY)=1)*(ROW(Sheet1!6:36)),6-{1;2;3;4;5})
Khi nhấn CTRL+SH+ENTER thì chỉ Excel đã định dạng lại theo kiểu mảng để xử lý. Điều này chỉ thực hiện trong logic xử lý của phần mềm Excel mà thôi. Bản chất ARR không phải là mảng nên không thể truy cập vào từng phần tử được!Ctrl + Shift + Enter sẽ có kết quã... Một minh chứng nữa là có thể dùng INDEX đễ truy xuất ARR
Sub GetElements()
Dim index, lb, ub
Dim Args
Args = Evaluate("ARGs") 'Gan gia tri vao bien mang
If Not VarType(Args) = (vbArray Or vbVariant) Then
MsgBox "Kong phai la Array"
Exit Sub
End If
lb = LBound(Args, 1)
ub = UBound(Args, 1)
Debug.Print "Type=" & VarType(Args), lb, ub
'Excel coi Args la mang 2 chieu
For index = lb To ub
MsgBox Args(index, 1), , index
Next index
End Sub
Nhờ TuanVNUNI giải thích hộ.Mã:Dim Args