Chuyển từ Range -> Array

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

ThuNghi

Hãy cho rồi sẽ nhận!
Thành viên đã mất
Tham gia
16/8/06
Bài viết
3,808
Được thích
4,449
Nhờ các bạn giúp chuyển từ Range -> Array
vd: Ta có MyRng: A1:A10 là 1,2,3,...,10
Làm thế nào đẩ chuyển thành
1/ MyArray("1","2","3",...,"10")
2/ MyArray2("1","3","5",...,"9") chỉ lấy số lẻ.
Không dùng cell trung gian rồi xóa đi.
Xin cám ơn!
 
Không biết có phải như sau không nhỉ?
Mã:
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
From ThuNghi:
Cám ơn rất nhiều! NVSON mà tham gia là OK; Nhờ bạn giải thích hộ 2 lệnh sau
ReDim MyArray và ReDim Preserve
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
ThuNghi đã viết:
Cám ơn rất nhiều! NVSON mà tham gia là OK
Nhờ bạn giải thích hộ 2 lệnh sau
ReDim MyArray và ReDim Preserve

Để mình giải thích hộ ban NVSon nhé

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.

hì, bạn nào biết sâu hơn thì thêm nhé, mình chỉ biết tới đây.

Thân.
 
Upvote 0
ThuNghi đã viết:
Cám ơn rất nhiều! NVSON mà tham gia là OK
Nhờ bạn giải thích hộ 2 lệnh sau
ReDim MyArray và ReDim Preserve

Gửi bác ThuNghi!

Khi dùng ReDim cho MyArray, các Item trong mảng sẽ bị mất đi.
Còn khi dùng ReDim Preserve cho MyArray, các Item trong mảng vẫn được giữ nguyên.
 
Upvote 0
Nếu tôi nhớ không lầm thì khi tôi dùng
Mã:
Set rngMyRange = Range("A1:A10")

Thì tôi đã có một mảng rồi. (Trong file ví dụ chuyển từ mảng-> ListView)

Lê Văn Duyệt
 
Upvote 0
Thành thật cám ơn các Bác nhiều, sorry Bác Duyệt nhé, tìm ra rồi trong CostingHelp
PHP:
 Set vRange = Range(TableName)
   i = vRange.Rows.Count
   j = vRange.Columns.Count
   ReDim arr(1 To i, 1 To j)
   For m = 1 To i
      For n = 1 To j
         arr(m, n) = vRange(m, n).Value
      Next n
   Next m
   TableToArray = arr
   Set vRange = Nothing
Các Bác có tài liệu này = tiếng Việt không, thay rất hay mà hiện tại như "Vịt nghe sấm".
 
Upvote 0
SoiBien đã viết:
Để mình giải thích hộ ban NVSon nhé

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.

hì, bạn nào biết sâu hơn thì thêm nhé, mình chỉ biết tới đây.

Thân.

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).
 
Upvote 0
Web KT

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

Back
Top Bottom