Khai báo trong Scripting.Dictionary (1 người xem)

Liên hệ QC

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

hungpecc1

Thành viên gắn bó
Tham gia
24/8/12
Bài viết
1,709
Được thích
2,304
Giới tính
Nam
Em có đoạn code như sau :
Mã:
Public Sub THVL()
Dim arr(), Item, Tmparr, tmp As String
Dim i As Long, n As Long
    Tmparr = Range("C1", Range("C65536").End(xlUp))
[SIZE=3][COLOR=#b22222]    ReDim arr(1 To Range("C65536").End(xlUp).Row, 1 To 2)[/COLOR][/SIZE]
    With CreateObject("Scripting.Dictionary")
        For Each Item In Tmparr
            tmp = Trim(CStr(Item))
            If Len(tmp) Then
                If Not .Exists(tmp) Then
                    n = n + 1
                    .Add tmp, n
[SIZE=3][COLOR=#b22222]                    arr(n, 1) = tmp[/COLOR][/SIZE]
                End If
            End If
        Next
    End With
    Range("J4", "K4").Resize(150).ClearContents
    If n Then Range("J4").Resize(n) = arr
   
End Sub

Nếu khai báo Arr() là mảng 1 chiều thì kết quả sẽ khác
Do kiến thức còn hạn chế nên mong :

Các pác giải thích giùm em ! ^^ thanks các pác nhiều
 
Lần chỉnh sửa cuối:
Qua quá trình mò mẫm e đã tìm được lối sai ở chỗ này

Nếu Arr() là mảng 2 chiều thì ok :
If n Then Range("J4").Resize(n) = arr

Còn nếu Arr() là mảng 1 chiều thì :

If n Then Range("J4").Resize(n) = arr sẽ ra kết quả khác

các pác cho ý kiến thêm !
 
Lần chỉnh sửa cuối:
Upvote 0
Qua quá trình mò mẫm e đã tìm được lối sai ở chỗ này

Nếu Arr() là mảng 2 chiều thì ok :
If n Then Range("J4").Resize(n) = arr

Còn nếu Arr() là mảng 1 chiều thì :

If n Then Range("J4").Resize(n) = arr sẽ ra kết quả khác

các pác cho ý kiến thêm !

Thì đương nhiên vậy rồi
- Với mảng 2 chiều, khi đưa xuống sheet, chiều thứ 1 của mảng sẽ ứng với chiều cao của dữ liệu và chiều thứ 2 của mảng sẽ ứng với chiều dài dữ liệu (hình chữ nhật)
- Với mảng 1 chiều, khi đưa xuống sheet nó sẽ nằm ngang (trải ra trên các cột chứ không trải theo dòng)
Vậy, với Arr là mảng 1 chiều, bạn có 2 lựa chọn:
Hoặc là:
If n Then Range("J4").Resize(, n) = arr ---> Đưa xuống sheet theo chiều ngang
Hoặc là:
If n Then Range("J4").Resize(n) = WorksheetFunction.Transpose(arr)
---> Đưa xuống sheet theo chiều dọc
----------------
Mà nè: Câu hỏi này là hỏi về Array chứ liên quan gì đến Dictionary?
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom