Làm thế nào convert ... sang array!

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

ThuNghi

Hãy cho rồi sẽ nhận!
Thành viên đã mất
Tham gia
16/8/06
Bài viết
3,808
Được thích
4,449
Tôi có 1 range MyRng: A1:A100 như sau:
A1= "x"
A2= "y"
A3...
...
A100="dfghsdfg sdgh"
Làm thế nào để chuyển range trên thành
MyArr=Array("x","y",...,"dfghsdfg sdgh")
Và chắc chắn là
IsArray(MyArr) =True.
Xin cám ơn!
 
Tôi có 1 range MyRng: A1:A100 như sau:
A1= "x"
A2= "y"
A3...
...
A100="dfghsdfg sdgh"
Làm thế nào để chuyển range trên thành
MyArr=Array("x","y",...,"dfghsdfg sdgh")
Và chắc chắn là
IsArray(MyArr) =True.
Xin cám ơn!
Anh test thử code này xem sao:
PHP:
Sub test()
Dim Myarr As Variant, myRng As Range
Set myRng = Sheet1.[A1:A100]
Myarr = Application.WorksheetFunction.Transpose(myRng)
MsgBox Myarr(4)
MsgBox IsArray(Myarr)
End Sub
 
Upvote 0
Đâu cần TRANSPOSE gì chứ
Vầy là được:
PHP:
Sub Test()
  Dim MyArray As Variant
  MyArray = Range("A1:A100")
  MsgBox IsArray(MyArray)
End Sub
 
Upvote 0
Anh test thử code này xem sao:
PHP:
Sub test()
Dim Myarr As Variant, myRng As Range
Set myRng = Sheet1.[A1:A100]
Myarr = Application.WorksheetFunction.Transpose(myRng)
MsgBox Myarr(4)
MsgBox IsArray(Myarr)
End Sub
Cám ơn nhiều, nhưng mìn muốn có câu để khai biến vào VBA thì làm tiếp cái gì!
MyArr=Array("x","y",...,"dfghsdfg sdgh")
 
Upvote 0
Upvote 0
Cám ơn nhiều, nhưng mìn muốn có câu để khai biến vào VBA thì làm tiếp cái gì!
MyArr=Array("x","y",...,"dfghsdfg sdgh")
Thì câu này đã gán rồi đó anh:
PHP:
Myarr = Application.WorksheetFunction.Transpose(myRng)
Hoặc anh nói rõ thêm ý của anh được không?
 
Upvote 0
Dạ được, nhưng anh thử đưa 1 giá trị nào đó của mảng MyArray ra messagebox thử xem!
Ẹc... Ẹc... May quá.. có chuẩn bị trước
Là cái này nè:
PHP:
Sub Test()
  Dim MyArray As Variant
  MyArray = Range("A1:A10").Value
  MsgBox MyArray(3, 1)
  MsgBox IsArray(MyArray)
End Sub
Nói thêm:
Người ta hay dùng đoạn code sau để lưu vùng dử liệu ra biến tạm:
Temp = Range(...).Value
sau khi hoàn tất, lại trả về trạng thái ban đầu bằng cách:
Range(...).Value = Temp
Cái Temp này chính là 1 Array đấy (cũng giống y chang Define name)
 
Upvote 0
Dạ được, nhưng anh thử đưa 1 giá trị nào đó của mảng MyArray ra messagebox thử xem!
Ví dụ:
A1="Sun"
A2="Mon"
A3="Tue"
Làm thế nào ta có
MyArr=Array("Sun","Mon","Tue")
Đừng nói là dùng &
Sau này ta bỏ hết A1, A2...Và chỉ lưu lại
MyArr=Array("Sun","Mon","Tue") và ứng dụng vào file khác. Đây giống như khai báo định mức từ Sheet cho dễ. Thay vì phải nhập ...
Như trong bài Salam hỏi.
 
Lần chỉnh sửa cuối:
Upvote 0
transpose chi vậy Cadafi? nó ra 1 mảng ngang à nha!
thử lại nha:
PHP:
Sub test()
Dim Myarr As Variant, myRng As Range
Set myRng = Sheet1.[A1:A10]
Myarr = Application.WorksheetFunction.Transpose(myRng)
Range("B1:B10") = Myarr
End Sub

10 ô B1:B10 giống nhau! và giống A1.

Nếu cần 1 mảng thông thường (dọc), thì như vầy:
PHP:
Sub test()
Dim Myarr As Variant
Myarr = Sheet1.Range("A1:A100").value
End Sub
 
Upvote 0
Ẹc... Ẹc... May quá.. có chuẩn bị trước
Là cái này nè:
PHP:
Sub Test()
  Dim MyArray As Variant
  MyArray = Range("A1:A10").Value
  MsgBox MyArray(3, 1)
  MsgBox IsArray(MyArray)
End Sub

Đúng vậy, ví dụ của anh là cái em cũng muốn nói đến, em dùng Transpose vì anh ThuNghi cần mảng ngang, không phải là mảng dọc! |||||

@ptm0412: thì đề bài yêu cầu ra mảng ngang mà anh!
 
Upvote 0
Hỏng biết ThuNghi định làm gì nhỉ? Có lẽ nói rõ ý đồ sẽ thuận tiện hơn đấy (5 ve Tiger cho anh Kiệt)
Lão cheettit hùn 5 ve (nếu yêu cầu của thunghi là mảng ngang).
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Ví dụ:
A1="Sun"
A2="Mon"
A3="Tue"
Làm thế nào ta có
MyArr=Array("Sun","Mon","Tue")
Đừng nói là dùng &
Sau này ta bỏ hết A1, A2...Và chỉ lưu lại
MyArr=Array("Sun","Mon","Tue") và ứng dụng vào file khác. Đây giống như khai báo định mức từ Sheet cho dễ. Thay vì phải nhập ...
Như trong bài Salam hỏi.
Nếu biết trước mảng này có bao nhiêu phần tử thì anh khai báo như sau (trong ví dụ anh đưa ra là 3 phần tử), đại khái:
PHP:
Dim myArr(3) as Variant
myArr(1)="Sun"
myArr(2)="Mon"
myArr(3)="Tue"
Còn không biết trước thì khai báo đại khái như sau:
PHP:
Sub test()
Dim Myarr As Variant
Myarr = Array("Sun", "Mon", "Tue")
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu biết trước mảng này có bao nhiêu phần tử thì anh khai báo như sau (trong ví dụ anh đưa ra là 3 phần tử), đại khái:
PHP:
Dim myArr(3) as Variant
myArr(1)="Sun"
myArr(2)="Mon"
myArr(3)="Tue"
Có cài này tôi vẫn chưa biết làm thế nào!
Giã sử ta đã tạo được mãng (từ range nào đó)... biết chắc mãng ấy có giá trị là:
"Sun","Mon","Tue","Wed","Thu","Fri","Sat"
Vậy làm sao hiện chúng ra MsgBox y chang thế (toàn bộ mãng)
 
Upvote 0
Vậy làm sao hiện chúng ra MsgBox y chang thế (toàn bộ mãng)
Chắc là phải ăn gian:

Mã:
For i = 1 to 10
MyText = MyText  & MyArr(i, 1) & ", "
Next
MsgBox Left(MyText, Len(MyText) - 2)
 
Lần chỉnh sửa cuối:
Upvote 0
Có cài này tôi vẫn chưa biết làm thế nào!
Giã sử ta đã tạo được mãng (từ range nào đó)... biết chắc mãng ấy có giá trị là:
"Sun","Mon","Tue","Wed","Thu","Fri","Sat"
Vậy làm sao hiện chúng ra MsgBox y chang thế (toàn bộ mãng)
Nếu ta chưa biết mảng có bao nhiêu phần tử thì ta dùng hàm Ubound(MyArr) để xác định.
Sau đó tạo một biến string và dùng vòng lặp nối các phần tử trong mãng lại với nhau.

Lưu ý: phần tử đầu tiên trong mảng là MyArr(0)

PHP:
Dim MyArr as Variant
.............................
Dim MyText as string
For i = 0 to Ubound(MyArr)
MyText = MyText & "-" MyArr(i)
Next i
MyText = Left(MyText,Len(MyText)-1)
Msgbox MyText
Nói thêm:
Tổng số phần tử trong mảng (total elements in an array) = Ubound(Array) - Lbound(Array) + 1
 
Lần chỉnh sửa cuối:
Upvote 0
Thì ra là nối chuổi... Tưởng Array nó có tính năng gì đó đặc biệt
Xem ra việc tạo mãng, truy xuất các phần tử trong mãng còn dể hơn là "ráp" chúng lại với nhau thành 1 khối ---> Vì nói cho cùng sau khi chúng ta "nối" kiểu đó thì hóa ra nó thành "vật chết" mất rồi
Nhớ không lầm thì Kiệt đã từng hỏi điều này: Làm sao nối các phần tử trong mãng với nhau (bằng công thức) ---> Và câu trả lời là VÔ PHƯƠNG
Hic...
 
Upvote 0
Function ConvertVni(Str As String) As String
MaVni = Array("a", "aù", "aø", "aû", "aõ", "aï", "aê", "aé", "aè", "aú", "aü", "aë", "aâ", "aá", "aà", "aå", "aã", "aä", "b", "c", "d", "ñ", "e", "eù", "eø", "eû", "eõ", "eï", "eâ", "eá", "eà", "eå", "eã", "eä", "f", "g", "h", "i", "í", "ì", "æ", "ó", "ò", "j", "k", "l", "m", "n", "o", "où", "oø", "oû", "oõ", "oï", "oâ", "oá", "oà", "oå", "oã", "oä", "ô", "ôù", "ôø", "ôû", "ôõ", "ôï", "p", "q", "r", "s", "t", "u", "uù", "uø", "uû", "uõ", "uï", "ö", "öù", "öø", "öû", "öõ", "öï", "v", "w", "x", "y", "yù", "yø", "yû", "yõ", "î", "z")
...
Bây giờ tôi muốn có câu như trên, chẳng lẽ ngồi nhập
MaVni = Array("a",...
Hiển nhiên là lấy từ sh DanhMuc, mấy bữa tôi làm gia công theo ghép chuổi nhưng thấy rừng quá.
 
Upvote 0
Bây giờ tôi muốn có câu như trên, chẳng lẽ ngồi nhập
MaVni = Array("a",...
Hiển nhiên là lấy từ sh DanhMuc, mấy bữa tôi làm gia công theo ghép chuổi nhưng thấy rừng quá.
Theo em thì bác nên nhập tất cả vào 1 ô, các ký tự ngăn cách nhau bởi 1 ký tự nào đó, rồi Split nó ra là ok thôi. Còn cái vụ ghép vào, nếu là mảng 1 chiều thì có thể dùng Join mà ko cần phải dùng vòng lặp For.
 
Upvote 0
Theo em thì bác nên nhập tất cả vào 1 ô, các ký tự ngăn cách nhau bởi 1 ký tự nào đó, rồi Split nó ra là ok thôi. Còn cái vụ ghép vào, nếu là mảng 1 chiều thì có thể dùng Join mà ko cần phải dùng vòng lặp For.
Ồ, cái vụ Join này hay quá! Cảm ơn rollover79 nhiều nha!
Vậy code bên dưới ngắn hơn nhiều nhỉ:
PHP:
Dim MyArr as Variant
.............................
Dim MyText as string
Msgbox Join(MyArr,"-")

Cái này dùng để tạo UDF MyConcat(Array) thì trên cả tuyệt vời!
 
Upvote 0
Bây giờ tôi muốn có câu như trên, chẳng lẽ ngồi nhập
MaVni = Array("a",...
Hiển nhiên là lấy từ sh DanhMuc, mấy bữa tôi làm gia công theo ghép chuổi nhưng thấy rừng quá.

Ý của bạn có phải như thế này không:

Mã:
Sub getStrArr()
Dim r As Range, c As Range, s As String
Set r = Selection
If r.Cells.Count = 1 Then Exit Sub
For Each c In r
    s = s & Chr(34) & c & Chr(34) & ","
Next
Debug.Print "Array(" & Left(s, Len(s) - [COLOR=red]1[/COLOR]) & ")"
End Sub

Chọn vùng chứa các chuỗi cần tạo mảng. Chạy macro, nhấn Ctrl-G mở cửa số Immediate, copy chuỗi vào VBE thế là xong.
Không biết có đúng ý không?
Thân!
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom