Điều chỉnh kích thước mảng.

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

sealand

Thành viên gạo cội
Tham gia
16/5/08
Bài viết
4,883
Được thích
7,688
Giới tính
Nam
Nghề nghiệp
Kế Toán
Trong VBA mình đã khai báo mảng bằng lệnh Dim my_array(20,4)
Nhưng khi nạp giá trị cho mảng trên mới biết số dòng của dữ liệu (Ví dụ kích thước là (j,4)).Mình dùng lệnh Redim không được. Vậy điều chỉnh như thế nào để nạp dữ liệu vừa với mảng. Mong các bạn hướng dẫn giúp. Cảm ơn nhiều.
 
Khi khai báo đừng khai báo kích thước trước.Thí dụ:
Mã:
Dim MyArray()
i=Range("gì đó").rows.count
j=gì đó khác
Redim MyArray(i,j)
 
Upvote 0
Mình hỏi thêm trường hợp mảng đã có kích thước rồi thì sao?
 
Upvote 0
Mã:
Dim MyArray()
i=Range("gì đó").rows.count
j=gì đó khác
Redim MyArray(i,j)
'Do something
i=5
j=6
Redim MyArray(i,j)
'Do something else

Mình đã thử rồi. (chộp đại 1 file có sẵn, nhét đại code vào)
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Trong VBA mình đã khai báo mảng bằng lệnh Dim my_array(20,4)
Nhưng khi nạp giá trị cho mảng trên mới biết số dòng của dữ liệu (Ví dụ kích thước là (j,4)).Mình dùng lệnh Redim không được. Vậy điều chỉnh như thế nào để nạp dữ liệu vừa với mảng. Mong các bạn hướng dẫn giúp. Cảm ơn nhiều.

Code của NVSON :

PHP:
Option Explicit
Public Sub Range2Array()
Dim rngMyRange As Range
Dim MyArray1() 'Mang tat ca cac so
Dim MyArray2() 'Mang cac so le
Dim i As Long, j As Long
Set rngMyRange = Range("A1:A10")
ReDim MyArray1(1 To rngMyRange.Rows.Count)
For i = 1 To rngMyRange.Rows.Count
    MyArray1(i) = rngMyRange.Cells(i, 1)
    If rngMyRange.Cells(i, 1) Mod 2 Then
        j = j + 1
        ReDim Preserve MyArray2(1 To j)
        MyArray2(j) = rngMyRange.Cells(i, 1)
    End If
Next i
End Sub

SoiBien đã viết:
ReDim

Trường hợp mảng mà ta không xác định trước được số phần tử trong mảng thì khi khai báo biến, ta để trống số phần tử mảng, khi đã xác định được số phần tử mảng thì ta dùng lệnh Redim để "Khai báo lại" số phần tử mảng đó có.

Preserve

Nếu ta chỉ dùng Redim, thì các giá trị có trứơc đó trong mảng sẽ bị xóa hết giá trị, nếu bạn muốn giữ lại giá trị của chúng thì thêm option Presrve.

...................................................

Chú thích thêm:
Khi dủng option Preserve thỉ ta chỉ dùng để thay đổi được Dimension cuối cùng của Array có nhiều Dimension VD:
dim 3D(10, 10, 10)
Redim preserve 3D (10, 10, 15)

không thể dùng
Redim Preserve (10, 15, 10).

Tham khảo tại :

http://www.giaiphapexcel.com/forum/showthread.php?t=4073

Thân!
 
Upvote 0
Cám ơn các bạn "Lỗi do tại hạ", các bạn hướng dân mình làm ngon rồi.
 
Upvote 0
Web KT

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

Back
Top Bottom