Cho em hỏi về khai báo biến một cách tự động! (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

maxft2911

Thành viên chính thức
Tham gia
17/4/15
Bài viết
63
Được thích
0
Em xin chào các anh chị GPE, ví dụ em có một biến a có thể là 2, 3, 4, 5,......đến n, được nhập từ TextBox.
Khi em nhập 2 thì sẽ khai báo ra 2 mảng, tương tự khi nhập 3, 4, 5, ...... Và mỗi mảng có kích thước 5x5.
Xin cho em hỏi là có cách nào để có thể tự động khai báo được mảng như vậy không?
Giả sử như :
For i =1 to 5 step 1
Dim Array & i As Variant
next i
Và kết quả là không thể chạy được!
Em cảm ơn!
 
Em xin chào các anh chị GPE, ví dụ em có một biến a có thể là 2, 3, 4, 5,......đến n, được nhập từ TextBox.
Khi em nhập 2 thì sẽ khai báo ra 2 mảng, tương tự khi nhập 3, 4, 5, ...... Và mỗi mảng có kích thước 5x5.
Xin cho em hỏi là có cách nào để có thể tự động khai báo được mảng như vậy không?
Giả sử như :
For i =1 to 5 step 1
Dim Array & i As Variant
next i
Và kết quả là không thể chạy được!
Em cảm ơn!

bạn xem ví dụ rồi tự ngẫm nhé

Mã:
Public Sub hello()
Dim arr, number As Long, r As Long, childArr
number = 8
ReDim arr(1 To number)
For r = 1 To UBound(arr) Step 1
    ReDim childArr(1 To 5, 1 To 5)
    arr(r) = childArr
Next
arr(1)(2, 2) = 5
arr(2)(2, 2) = 7
arr(number)(2, 2) = 10
MsgBox arr(1)(2, 2) & vbCrLf & arr(2)(2, 2) & vbCrLf & arr(number)(2, 2)
End Sub
 
Upvote 0
bạn xem ví dụ rồi tự ngẫm nhé

Mã:
Public Sub hello()
Dim arr, number As Long, r As Long, childArr
number = 8
ReDim arr(1 To number)
For r = 1 To UBound(arr) Step 1
    ReDim childArr(1 To 5, 1 To 5)
    arr(r) = childArr
Next
arr(1)(2, 2) = 5
arr(2)(2, 2) = 7
arr(number)(2, 2) = 10
MsgBox arr(1)(2, 2) & vbCrLf & arr(2)(2, 2) & vbCrLf & arr(number)(2, 2)
End Sub
Cảm ơn anh AutoReply rất nhiều, đoạn code rất hay! em ngẫm nghĩ nhưng có chỗ này không thông, anh giải thích giùm em một xíu nhé:
- Ở đây mảng arr được khai báo là 1 chiều, sau đó khai báo mảng childArr là mảng 2 chiều, vậy tại sao khi lấy arr(r) = childArr lại được? Theo em hiểu thì từng phần tử của mảng arr(mảng 1 chiều) sẽ bằng nguyên cái mảng trống có định dạng 5x5 của childArr(mảng 2 chiều). Tại sao một mảng 2 chiều lại gán được vào một phần tử của mảng 1 chiều nhỉ?
Em cảm ơn!
 
Upvote 0
Cảm ơn anh AutoReply rất nhiều, đoạn code rất hay! em ngẫm nghĩ nhưng có chỗ này không thông, anh giải thích giùm em một xíu nhé:
- Ở đây mảng arr được khai báo là 1 chiều, sau đó khai báo mảng childArr là mảng 2 chiều, vậy tại sao khi lấy arr(r) = childArr lại được? Theo em hiểu thì từng phần tử của mảng arr(mảng 1 chiều) sẽ bằng nguyên cái mảng trống có định dạng 5x5 của childArr(mảng 2 chiều). Tại sao một mảng 2 chiều lại gán được vào một phần tử của mảng 1 chiều nhỉ?
Em cảm ơn!
Cái này người ta gọi là mảng trong mảng
Các phần tử của 1 mảng có thể là bất cứ thứ gì: là mảng thậm chí là 1 object cũng không có vấn đề gì cả
 
Upvote 0
Đó là cách khai báo mảng động. Nếu muốn dùng mảng tĩnh thì như sau:

Mã:
[COLOR=#008000]' khai báo mảng trong mảng.
' sub hello dùng cách khai báo động 100%
' sub hello2 dùng cách khai báo tĩnh 100%
[/COLOR]
Private Type MangCon
a(1 To 5, 1 To 5)
End Type

Public Sub hello()
Dim arr, number As Long, r As Long, childArr
number = 8
ReDim arr(1 To number)
For r = 1 To UBound(arr) Step 1
    ReDim childArr(1 To 5, 1 To 5)
    arr(r) = childArr
Next
arr(1)(2, 2) = 5
arr(2)(2, 2) = 7
arr(number)(2, 2) = 10
MsgBox arr(1)(2, 2) & vbCrLf & arr(2)(2, 2) & vbCrLf & arr(number)(2, 2)
End Sub

Public Sub hello2()
Dim arr(1 To 8) As MangCon, number As Long
number = 8
arr(1).a(2, 2) = 5
arr(2).a(2, 2) = 7
arr(number).a(2, 2) = 10
MsgBox arr(1).a(2, 2) & vbCrLf & arr(2).a(2, 2) & vbCrLf & arr(number).a(2, 2)
End Sub

Theo nguyên tắc, tĩnh nhanh hơn động 1 tí. Và đương nhiên, tĩnh không thể uyển chuyển bằng động.
Nếu muốn lập mảng răng cưa, tức là các mảng con khong giống nhau thì phải sửa mảng tĩnh lại thành tĩnh 50%, phần mảng mẹ thì tĩnh, phần mảng con thì động.
 
Upvote 0
Đó là cách khai báo mảng động. Nếu muốn dùng mảng tĩnh thì như sau:

Mã:
[COLOR=#008000]' khai báo mảng trong mảng.
' sub hello dùng cách khai báo động 100%
' sub hello2 dùng cách khai báo tĩnh 100%
[/COLOR]
Private Type MangCon
a(1 To 5, 1 To 5)
End Type

Public Sub hello()
Dim arr, number As Long, r As Long, childArr
number = 8
ReDim arr(1 To number)
For r = 1 To UBound(arr) Step 1
    ReDim childArr(1 To 5, 1 To 5)
    arr(r) = childArr
Next
arr(1)(2, 2) = 5
arr(2)(2, 2) = 7
arr(number)(2, 2) = 10
MsgBox arr(1)(2, 2) & vbCrLf & arr(2)(2, 2) & vbCrLf & arr(number)(2, 2)
End Sub

Public Sub hello2()
Dim arr(1 To 8) As MangCon, number As Long
number = 8
arr(1).a(2, 2) = 5
arr(2).a(2, 2) = 7
arr(number).a(2, 2) = 10
MsgBox arr(1).a(2, 2) & vbCrLf & arr(2).a(2, 2) & vbCrLf & arr(number).a(2, 2)
End Sub

Theo nguyên tắc, tĩnh nhanh hơn động 1 tí. Và đương nhiên, tĩnh không thể uyển chuyển bằng động.
Nếu muốn lập mảng răng cưa, tức là các mảng con khong giống nhau thì phải sửa mảng tĩnh lại thành tĩnh 50%, phần mảng mẹ thì tĩnh, phần mảng con thì động.
Em cảm ơn anh VietMini rất nhiều, đã chỉ dạy cặn kẽ! :)
 
Upvote 0
Web KT

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

Back
Top Bottom