?Khai báo mảng

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
Xin hỏi các bạn 2 cách sau co khác nhau và ưu điểm
1/
Dim TkDu As Range
Set TkDu = S01.Range("F1", S01.Range("F1000").End(xlUp))
...
Set TkDu = NotThing

S01.Range("F1", S01.Range("F1000").End(xlUp)).Name = "TkDu"
...
S01.Names("TkDu").Delete

2/
With Range("TKDU")
.AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=S01.Range("X1"), Unique:=True
End With
Có cách gì tạo thành 1 range("XYX") mà không cần phải S01.Range("X1") qua 1 cell trên sheet.
Range("XYX") và Range("X1:X...") chỉ cần tạm thời.
Xin cám ơn.
 
ThuNghi đã viết:
Xin hỏi các bạn 2 cách sau co khác nhau và ưu điểm
1/
Dim TkDu As Range
Set TkDu = S01.Range("F1", S01.Range("F1000").End(xlUp))
...
Set TkDu = NotThing


S01.Range("F1", S01.Range("F1000").End(xlUp)).Name = "TkDu"
...
S01.Names("TkDu").Delete

2/

Có cách gì tạo thành 1 range("XYX") mà không cần phải S01.Range("X1") qua 1 cell trên sheet.
Range("XYX") và Range("X1:X...") chỉ cần tạm thời.
Xin cám ơn.


Vấn đề 1:

- Hai cái này sẽ khác nhau, khi range là 1 name thì sẽ chạy chậm hơn (ở một mức nào đó), vì name thực chất là công thức (ở đây là trả về cho ta một mảng), vì vậy mỗi lần workbook hoặc sheet tính toán lại thì sẽ tính luôn cả name lại --> chậm lại tính toán.. Đó là chưa kể mỗi khi tính toán lại thì mảng do name tạo ra rất có khả nămg sẽ thay đổi.
- Tuy nhiên dùng name sẽ dễ dàng hơn với người mới bắt đầu, và trong một số TH cần các mảng đặc biệt, thông qua nhiều công thức, thì dùng name lại tốt hơn

Vấn đề 2:


- Tạo một mảng trong VBA và làm các lệnh với nó giống như ta đã làm với mảng trong sheet (delete, sort, chạy vòng lặp, nhiều cột . . . ), cái này mình cũng đã thắc mắc rồi nhưng chưa ai trả lời (mình dùng để tạo List cho combobox)



Biết đến đâu trả lời đến đó, thông cảm.



Thân!
 
Sort và copy Array to sh thì tôi tìm thấy cái này, nhưng chưa thể nào tạo ra duy I
Mã:
Sub SortArr()
Dim lLoop As Long, lLoop2 As Long
Dim str1 As String
Dim str2 As String
Dim MyArray()
iRows = s02.Range("MyRng").Rows.Count
    For x = 1 To iRows
        ReDim Preserve MyArray(x)
        MyArray(x) = s02.Range("b" & x)
    Next x
  
    'Sort array
    For lLoop = 1 To UBound(MyArray)
       For lLoop2 = lLoop To UBound(MyArray)
            If UCase(MyArray(lLoop2)) < UCase(MyArray(lLoop)) Then
                str1 = MyArray(lLoop)
                str2 = MyArray(lLoop2)
                MyArray(lLoop) = str2
                MyArray(lLoop2) = str1
            End If
        Next lLoop2
    Next lLoop
    
    'Output sorted array - paste vao cot B
    Range("E1:E" & UBound(MyArray) + 1) _
    = WorksheetFunction.Transpose(MyArray)
End Sub
Bạn nghiên cứu thêm cái sau về Array to listbox, trên ddth. Tôi chả hiểu cái này.
Mã:
Private Sub Testmulticolumn()
'In: Just load data to a sample multi-dimension array...
'out: set the list() property to the data charged array...'Paulsteigel
Dim i, j, Rows As Single
' We have to be sure in advance how many columns should be added to the list (as we can only redeclare the second dimension of the array)
Dim MyArray(2, 3) As String
' How many column, the list should have
ListBox1.ColumnCount = 3
' this is to decide widths of colums in listbox
ListBox1.ColumnWidths = "1 in;1 in;1 in"
' let's assuming that we have only 2 rows for fun...
Rows = 2
' looping for adding data to the array
For j = 0 To ListBox1.ColumnCount - 1
For i = 0 To Rows - 1
MyArray(i, j) = "Row " & i & ", Column " & j
Next i
Next j
'Load MyArray into ListBox1
ListBox1.List() = MyArray
End Sub
Nghiên cứu xong giải thích hộ. Cám ơn.
 
Web KT
Back
Top Bottom