Hỏi cách gán giá trị từ mảng cho vùng range (1 người xem)

Liên hệ QC

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

maytinhvp01

Thành viên thường trực
Tham gia
27/7/13
Bài viết
390
Được thích
179
Mình có doạn code tren và file đính kèm
Mã:
Private Sub Worksheet_Activate()
Dim dic As Object
Dim nguon, i As Long, j As Long
Dim arr(1 To 20, 1)
Set dic = CreateObject("scripting.dictionary")
nguon = Worksheets("DM").Range("D2:E" & Worksheets("DM").[E6500].End(xlUp).Row)
    j = 0
    For i = 1 To UBound(nguon)
        If Len(nguon(i, 2)) = 1 Then
            If Not dic.exists((nguon(i, 1) & nguon(i, 2))) Then
                j = j + 1
                dic.Add (nguon(i, 1) & nguon(i, 2)), j
                arr(j, 1) = (nguon(i, 1) & nguon(i, 2))
              
            End If
        End If
    Next
[COLOR=#ff0000]For i = 1 To 20
Worksheets("ADMIN").Range("A" & i) = arr(i, 1)
Next
[/COLOR]End Sub
doạn bôi màu đỏ mình muốn thay bằng
Mã:
[COLOR=#ff0000]Worksheets("ADMIN").Range("A1:A20" ) = arr[/COLOR]
đer không phải chạy vòng lặp nhưng không được ai giải thích với
 

File đính kèm

Trong Code của bạn có khai báo
Mã:
Dim arr(1 To 20, 1)
=> Đó là 1 mảng gồm 2 cột, cột 1 có index 0, cột 2 có index 1
Nên khi bạn đặt
Mã:
Worksheets("ADMIN").Range("A1:A20" ) = arr
Tức là bạn chỉ gán cột 1 (Index 0) xuống Sheet
trong khi dữ liệu bạn Add vào Arr là cột Index 2
Mã:
arr(j, 1) = (nguon(i, 1) & nguon(i, 2))

* Chú ý: Khi không khai báo điểm bắt đầu của mảng thì cột đầu tiên, hàng đầu tiên luôn là Index 0

Để khắc phục bạn có thể làm theo các cách sau
- Cách 1: Khai báo lại mảng
Mã:
Dim arr(1 To 20, 1 to 1)

- Cách 2: Khai báo tại đầu Module đoạn code sau để ấn định hàng, cột, chỉ số đầu tiên của mảng là 1
Mã:
Option Base 1

Dựa vào các từ khóa bạn có thể tìm hiểu thêm trên GPE.
 
Upvote 0
Trong Code của bạn có khai báo
Mã:
Dim arr(1 To 20, 1)
=> Đó là 1 mảng gồm 2 cột, cột 1 có index 0, cột 2 có index 1
Nên khi bạn đặt
Mã:
Worksheets("ADMIN").Range("A1:A20" ) = arr
Tức là bạn chỉ gán cột 1 (Index 0) xuống Sheet
trong khi dữ liệu bạn Add vào Arr là cột Index 2
Mã:
arr(j, 1) = (nguon(i, 1) & nguon(i, 2))

* Chú ý: Khi không khai báo điểm bắt đầu của mảng thì cột đầu tiên, hàng đầu tiên luôn là Index 0

Để khắc phục bạn có thể làm theo các cách sau
- Cách 1: Khai báo lại mảng
Mã:
Dim arr(1 To 20, 1 to 1)

- Cách 2: Khai báo tại đầu Module đoạn code sau để ấn định hàng, cột, chỉ số đầu tiên của mảng là 1
Mã:
Option Base 1

Dựa vào các từ khóa bạn có thể tìm hiểu thêm trên GPE.

Mình đã hiểu rùi cảm ơn bạn nhiều!!!
 
Upvote 0
Web KT

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

Back
Top Bottom