Các câu hỏi về mảng trong VBA (Array)

  • Thread starter Thread starter viehoai
  • Ngày gửi Ngày gửi
Liên hệ QC

viehoai

Thành viên gắn bó
Tham gia
22/5/09
Bài viết
2,599
Được thích
2,908
Xin các anh chị giúp đỡ Code Gán các giá trị của một Range là các phần tử của Mãng
Ví dụ: Tôi có các giá trị của Range("A1:A10"). Tôi muốn viết code để gán giá trị của các cells từ A1:A10 là các phần tử của Mãng Arr chẳn hạn.
Xin cảm ơn các anh chị
 
Ủa cái tên "Lười Biếng Nhấc Máy" ấy là phụ nữ hở? còn phya mới tin.

@LBNM: ndu không thường dùng tiếng Tây nên hang có nghĩa là Tùy Chọn : { "hang", "háng", "hàng", "hãng", "hạng" }
Nếu gặp mấy người hay viết Đía Ồn thì hang có nghĩa là treo, và cot có nghĩa là cái giường em bé
 
Upvote 0
Cho em hỏi có câu lệnh nào để kiểm tra trong một mảng có chứa giá trị là số hay không ? Tạm thời em dùng phương thức Find.
 
Lần chỉnh sửa cuối:
Upvote 0
Cho em hỏi có câu lệnh nào để kiểm tra trong một mảng có chứa giá trị là số hay không ? Tạm thời em dùng phương thức Find.
+ Nếu bạn đầu, khai báo mảng có kiểu dữ liệu rõ ràng, thì đã biết.
+ Nếu khai báo mảng không đi kèm kiểu dữ liệu, thì mình thường dùng vòng lặp duyệt qua các phần tử của mảng.Để kiểm tra số mình sẽ dùng Isnumeric function để kiểm tra.
 
Upvote 0
+ Nếu bạn đầu, khai báo mảng có kiểu dữ liệu rõ ràng, thì đã biết.
+ Nếu khai báo mảng không đi kèm kiểu dữ liệu, thì mình thường dùng vòng lặp duyệt qua các phần tử của mảng.Để kiểm tra số mình sẽ dùng Isnumeric function để kiểm tra.
Hàm isnumber sẽ không đảm bảo chính xác.
Mã:
MsgBox IsNumeric("123")
 
Upvote 0
Hàm isnumber sẽ không đảm bảo chính xác.
Mã:
MsgBox IsNumeric("123")

- Đúng là không chính xác, 02 câu lệnh sau đều trả về True.
PHP:
Sub abc()
' B2="123"
' B3=123
    Dim arr
    arr = Range("B2:B3")
    Debug.Print IsNumeric(arr(1, 1))
    Debug.Print IsNumeric(arr(2, 1))
End Sub

Vậy giải pháp ở đây là gì, để xác định là number hay number được lưu dưới dạng text.
 
Upvote 0
- Đúng là không chính xác, 02 câu lệnh sau đều trả về True.
PHP:
Sub abc()
' B2="123"
' B3=123
    Dim arr
    arr = Range("B2:B3")
    Debug.Print IsNumeric(arr(1, 1))
    Debug.Print IsNumeric(arr(2, 1))
End Sub

Vậy giải pháp ở đây là gì, để xác định là number hay number được lưu dưới dạng text.
Nếu mảng đọc từ range, thì số nó chỉ có mấy dạng là: double, boolean, date. Dùng hàm vartype kiểm tra lần lượt. Còn là string chứa các con số thì cũng dùng vartype kiểm tra xem nó là string không, rồi dùng hàm isnumber nữa.
 
Upvote 0
Cho em hỏi em khai báo mảng như sau
PHP:
Dim Arr()
Dim Rws As Integer, J As Integer
Rws = Range("B65536").End(xlUp).Row

 Arr = Range("B11").Resize(Rws, 97).Value
...

Nếu em khai báo như này thì không sao nhưng nếu mảng em khai là:

Arr = Range("B11").Resize(Rws, 98).Value

Thì báo lỗi ở mảng này (Khai báo cột cứ lớn hơn 97 là lỗi).
RWS của em bằng 3987 dòng.

Sao lại như vậy nhỉ?
 
Upvote 0
Cho em hỏi em khai báo mảng như sau
PHP:
Dim Arr()
Dim Rws As Integer, J As Integer
Rws = Range("B65536").End(xlUp).Row

 Arr = Range("B11").Resize(Rws, 97).Value
...

Nếu em khai báo như này thì không sao nhưng nếu mảng em khai là:

Arr = Range("B11").Resize(Rws, 98).Value

Thì báo lỗi ở mảng này (Khai báo cột cứ lớn hơn 97 là lỗi).
RWS của em bằng 3987 dòng.

Sao lại như vậy nhỉ?
cái này cũng khó nói lắm, có thể có 2 vấn đề
thứ nhất là bạn đang chạy chương trình khác, máy chiếm dụng bộ nhớ tạm nhiều quá , nên có khả năng nó thông báo là tràn bộ nhớ
thứ 2 là có thể ở cột 98 trong sheet có chứa giá trị lỗi. Lỗi này tôi thường xuyên bị
 
Upvote 0
cái này cũng khó nói lắm, có thể có 2 vấn đề
thứ nhất là bạn đang chạy chương trình khác, máy chiếm dụng bộ nhớ tạm nhiều quá , nên có khả năng nó thông báo là tràn bộ nhớ
thứ 2 là có thể ở cột 98 trong sheet có chứa giá trị lỗi. Lỗi này tôi thường xuyên bị


Chứa giá trị lỗi bạn ạ, cảm ơn nhiều nhé :)
 
Upvote 0
Hôm Mình có đọc đâu đó trên GPE nói giới hạn của hàm Application.Transpose tối đa của nó là bao nhiêu ký tự trong 1 Cells ...gì gì đó mà mình không nhớ !!??
và tối đa của nó là bao nhiêu dòng ....

vì mình có sử dụng biến Arr() trong Excel để lấy duy nhất mã hàng trong table Access hiên tại dữ liệu ít thấy xài tốt VD: dữ liệu dòng (Record trong Access) lớn hơn 1048576 thì nó có lỗi hay không ...??!!!!

Mong các Bạn ai biết xin giải thích dùm ....
Xin cảm ơn


Arr = Application.Transpose(Dic.Keys)
 
Upvote 0
Hôm Mình có đọc đâu đó trên GPE nói giới hạn của hàm Application.Transpose tối đa của nó là bao nhiêu ký tự trong 1 Cells ...gì gì đó mà mình không nhớ !!??
và tối đa của nó là bao nhiêu dòng ....

vì mình có sử dụng biến Arr() trong Excel để lấy duy nhất mã hàng trong table Access hiên tại dữ liệu ít thấy xài tốt VD: dữ liệu dòng (Record trong Access) lớn hơn 1048576 thì nó có lỗi hay không ...??!!!!

Mong các Bạn ai biết xin giải thích dùm ....
Xin cảm ơn


Arr = Application.Transpose(Dic.Keys)
có đó anh kiều mạnh, nó sẽ xuất hiện lỗi tràn bộ nhớ, vì tôi hay làm việc với số liệu lớn, máy khách hàng thì không sao? chứ đem về máy tôi, nếu mảng quá lớn thì sẽ báo lỗi.
chưa tính đến là nó chạy cà dựt, lúc báo lỗi lúc không? nếu chạy nhiều cái khác cùng một lúc, nó sẽ báo là tràn bộ nhớ nếu máy cấu hình không mạnh
 
Lần chỉnh sửa cuối:
Upvote 0
có đó anh kiều mạnh, nó sẽ xuất hiện lỗi tràn bộ nhớ, vì tôi hay làm việc với số liệu lớn, máy khách hàng thì không sao?(vì khách hàng máy rất cừ) chứ đem về máy tôi, nếu mảng quá lớn thì sẽ báo lỗi.
 
Upvote 0
Hôm Mình có đọc đâu đó trên GPE nói giới hạn của hàm Application.Transpose tối đa của nó là bao nhiêu ký tự trong 1 Cells ...gì gì đó mà mình không nhớ !!??
và tối đa của nó là bao nhiêu dòng ....

vì mình có sử dụng biến Arr() trong Excel để lấy duy nhất mã hàng trong table Access hiên tại dữ liệu ít thấy xài tốt VD: dữ liệu dòng (Record trong Access) lớn hơn 1048576 thì nó có lỗi hay không ...??!!!!

Mong các Bạn ai biết xin giải thích dùm ....
Xin cảm ơn


Arr = Application.Transpose(Dic.Keys)
Anh thử 2 ví dụ sau xem...
PHP:
Sub vidu1()
'Lân 1: Nhâp vao [A1]=REPT("1",255) rôi F5
'Lân 2: Nhâp vao [A1]=REPT("1",256) rôi F5
Dim a, t
a = Sheet1.Range("A1:A2").Value
t = Application.Transpose(a)
End Sub

'-------'
Sub Vidu2()
Dim maxLong As Long
maxLong = (2) ^ 31      'Lân 1    
'maxLong = (2) ^ 31 - 1  'Lân 2 : Đây là giá trị max nhưng chạy được hay không thì còn phụ thuộc bộ nhớ RAM của hệ thống (xem link)
ReDim a(1 To maxLong, 0)
End Sub
Link:
https://msdn.microsoft.com/en-us/library/b388cb5s(v=vs.90).aspx

https://stackoverflow.com/questions/7817427/excel-2007-vba-array-size-limit
 
Upvote 0
Anh thử 2 ví dụ sau xem...
PHP:
Sub vidu1()
'Lân 1: Nhâp vao [A1]=REPT("1",255) rôi F5
'Lân 2: Nhâp vao [A1]=REPT("1",256) rôi F5
Dim a, t
a = Sheet1.Range("A1:A2").Value
t = Application.Transpose(a)
End Sub

'-------'
Sub Vidu2()
Dim maxLong As Long
maxLong = (2) ^ 31      'Lân 1   
'maxLong = (2) ^ 31 - 1  'Lân 2 : Đây là giá trị max nhưng chạy được hay không thì còn phụ thuộc bộ nhớ RAM của hệ thống (xem link)
ReDim a(1 To maxLong, 0)
End Sub
Link:
https://msdn.microsoft.com/en-us/library/b388cb5s(v=vs.90).aspx

https://stackoverflow.com/questions/7817427/excel-2007-vba-array-size-limit
Vidu1 Mình hiểu tối đa trong 1 Cells là 255 ký tự nếu 256 là lỗi
Vidu2 máy Mình chạy thấy lỗi ..........Máy RAM 6G
 
Upvote 0
Upvote 0
Web KT

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

Back
Top Bottom