Chuyển dữ liệu từ RANGE vô MẢNG (1 người xem)

Liên hệ QC

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

bun_bo_hue

Thành viên chính thức
Tham gia
31/12/09
Bài viết
78
Được thích
11
Mình đang bí vấn đề sau. Giả sử trong range "A1:A10" có data. Ta chuyển data từ range vô mảng theo lệnh VBA sau array=Range("A1:A10").value

Nếu giả sử range A2,A5 bị ẩn. Mình chỉ muốn lấy data chuyển vô mảng nhưng cell nào không bị HIDE thì phải làm sao ???

Mình dùng lệnh sau thì bị báo lỗi array=Range("A1:A10").SpecialCells(xlCellTypeVisible).Value thì bị báo lỗi.

Các bạn giúp mình với.-\\/.
 
Mình đang bí vấn đề sau. Giả sử trong range "A1:A10" có data. Ta chuyển data từ range vô mảng theo lệnh VBA sau array=Range("A1:A10").value
Nếu giả sử range A2,A5 bị ẩn. Mình chỉ muốn lấy data chuyển vô mảng nhưng cell nào không bị HIDE thì phải làm sao ???
Mình dùng lệnh sau thì bị báo lỗi array=Range("A1:A10").SpecialCells(xlCellTypeVisible).Value thì bị báo lỗi.
Các bạn giúp mình với.-\\/.
Sao đặt biến là chữ array được chứ <--- Trùng với hàm Array trong VBA, nó cằn nhằn là phải rồi
Ngoài ra không thể chơi chiêu SpecialCells(xlCellTypeVisible) vầy được! Cùng lắm nó chỉ lấy được Area đầu tiên mà thôi
Tóm lại: For... Next mà làm
 
Upvote 0
Cảm ơn bác NDU. Em chỉ ví dụ là chữ arrray thôi ạ. Vấn đề là FOR...NEXT quét RANGE em sợ chậm.

Sao đặt biến là chữ array được chứ <--- Trùng với hàm Array trong VBA, nó cằn nhằn là phải rồi
Ngoài ra không thể chơi chiêu SpecialCells(xlCellTypeVisible) vầy được! Cùng lắm nó chỉ lấy được Area đầu tiên mà thôi
Tóm lại: For... Next mà làm
 
Upvote 0
Cảm ơn bác NDU. Em chỉ ví dụ là chữ arrray thôi ạ. Vấn đề là FOR...NEXT quét RANGE em sợ chậm.
Sao mà chậm được chứ. Dùng mảng luôn cho tốc độ nhanh nhất nếu biết cách
Cho bạn 1 ví dụ nhé
PHP:
Function Range2Array(ParamArray sArray())
  Dim SubArr, Item, Arr(), i As Long
  For Each SubArr In sArray
    For Each Item In SubArr
      If Trim(CStr(Item)) <> "" Then
        ReDim Preserve Arr(i)
        Arr(i) = Item
        i = i + 1
      End If
    Next
  Next
  Range2Array = Arr
End Function
PHP:
Sub Test()
  Dim Arr
  Arr = Range2Array(Range("A1:A10").SpecialCells(12))
  MsgBox Join(Arr, " - ")
End Sub
Trong đó A1:A10 là dữ liệu gì đó và có 1 vài dòng bị ẩn ---> Thử xem
 
Upvote 0
Bái phục bác NDU. Đúng là nhanh thật kô thua gì lệnh chuyển trực tiếp vô mảng. Cám ơn bác rất nhiều ạ.

Sao mà chậm được chứ. Dùng mảng luôn cho tốc độ nhanh nhất nếu biết cách
Cho bạn 1 ví dụ nhé
PHP:
Function Range2Array(ParamArray sArray())
  Dim SubArr, Item, Arr(), i As Long
  For Each SubArr In sArray
    For Each Item In SubArr
      If Trim(CStr(Item)) <> "" Then
        ReDim Preserve Arr(i)
        Arr(i) = Item
        i = i + 1
      End If
    Next
  Next
  Range2Array = Arr
End Function
PHP:
Sub Test()
  Dim Arr
  Arr = Range2Array(Range("A1:A10").SpecialCells(12))
  MsgBox Join(Arr, " - ")
End Sub
Trong đó A1:A10 là dữ liệu gì đó và có 1 vài dòng bị ẩn ---> Thử xem
 
Upvote 0
Các bạn làm thừa việc này rồi. Khi vùng chọn vùng có số cột >1 hoặc số dòng > 1 thì thuộc tính Value là mảng 2 chiều rồi. Chúng ta lại đi tạo mảng rồi nhận từng giá trị là làm thừa.

Mã:
Sub GetArray()
    Dim mArr, I&, J&
    mArr = Selection.Value
    For I = LBound(mArr, 1) To UBound(mArr, 1)
        For J = LBound(mArr, 2) To UBound(mArr, 2)
            MsgBox mArr(I, J)
        Next J
    Next I
End Sub
 
Upvote 0
Các bạn làm thừa việc này rồi. Khi vùng chọn vùng có số cột >1 hoặc số dòng > 1 thì thuộc tính Value là mảng 2 chiều rồi. Chúng ta lại đi tạo mảng rồi nhận từng giá trị là làm thừa.

Mã:
Sub GetArray()
    Dim mArr, I&, J&
    mArr = Selection.Value
    For I = LBound(mArr, 1) To UBound(mArr, 1)
        For J = LBound(mArr, 2) To UBound(mArr, 2)
            MsgBox mArr(I, J)
        Next J
    Next I
End Sub
Tuân không để ý rồi... Cái người ta cần lấy là các giá trị trên các cell không ẩn
 
Upvote 0
Web KT

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

Back
Top Bottom