Hỏi cách gán giá trị từ mảng cho vùng range

Liên hệ QC

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

  • KH.xlsm
    22.1 KB · Đọc: 15
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
Back
Top Bottom