giúp sử lý 4 mảng 1 chiều 10 phần tử thành một mảng 2 chiều (1 người xem)

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

diemhuyenanh

Thành viên hoạt động
Tham gia
6/9/09
Bài viết
167
Được thích
58
Chào các anh chi GPE! tôi có 4 mảng một chiều 10 phần tử arr(1 to 10) (arr1,arr2,arr3,arr4). Tôi muốn anh chị sử lý giúp làm thế nào để đưa về mảng 2 chiều arr(1 to 10,1 to 4) để gán xuống sheet. Cảm ơn các anh chị nhiều
 
Chào các anh chi GPE! tôi có 4 mảng một chiều 10 phần tử arr(1 to 10) (arr1,arr2,arr3,arr4). Tôi muốn anh chị sử lý giúp làm thế nào để đưa về mảng 2 chiều arr(1 to 10,1 to 4) để gán xuống sheet. Cảm ơn các anh chị nhiều

hỏi thé này chắc có kiến thức lập trình rui, vậy tự khai báo, sau đây là code bỏ túi vừa đi vừa bỏ như sau:
PHP:
b=array(arr1,arr2,arr3,arr4)

for  j=0 to 3
   for i=1 to 10
          arr(i,j+1)=b(j)(i)
   next i
next j
 
Lần chỉnh sửa cuối:
Upvote 0
sao em lam lai không được hỉ. mình up file nhờ mọi người giúp với
code trong form dùng ghi du lieu listbox xuong sheet
 

File đính kèm

Upvote 0
trong userform1 bác bấm đúp vào cmdghi sẽ thấy code thôi. ở đó em gán 4 cột của listbox vào 4 mảng và em chơi kiểu cò con là gán từng mảng một xuống bốn cột trên sheet.
giờ bác giúp em gộp 4 mảng đó vào một mảng 2 chiều n dòng và n cột theo 4 mảng trên để đập một phát xuống sheets cho no pro
 
Upvote 0
trong userform1 bác bấm đúp vào cmdghi sẽ thấy code thôi. ở đó em gán 4 cột của listbox vào 4 mảng và em chơi kiểu cò con là gán từng mảng một xuống bốn cột trên sheet.
giờ bác giúp em gộp 4 mảng đó vào một mảng 2 chiều n dòng và n cột theo 4 mảng trên để đập một phát xuống sheets cho no pro

Bạn nhét đoạn này vào đầu sub cmdGhi_Click đó đoạn code sau
PHP:
Dim kArr
kArr = ListBox1.List
MsgBox LBound(kArr) & "-->" & UBound(kArr) & "  x  " & LBound(kArr, 2) & "-->" & UBound(kArr, 2)
Exit Sub

chú ý có Exit Sub --> thoát ra

bạn rút ra điều gì, từ đó --> có phải bảng 1 hay 2 chiều, và nên xử lý thế nào tiếp
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn nhét đoạn này vào đầu sub cmdGhi_Click đó đoạn code sau
PHP:
Dim kArr
kArr = ListBox1.List
MsgBox LBound(kArr) & "-->" & UBound(kArr) & "  x  " & LBound(kArr, 2) & "-->" & UBound(kArr, 2)
Exit Sub

chú ý có Exit Sub --> thoát ra

bạn rút ra điều gì, từ đó --> có phải bảng 1 hay 2 chiều, và nên xử lý thế nào tiếp
như vậy mảng karr=listbox1.list là mảng 2 chiêu một chiều từ o đến 1055 và một chiều là từ 0 đến 4 phải không bạn.
bạn giải thich cách khai báo mảng dim kArr. tôi thấy khi khai báo mảng thi khai báo Arr() hoăc Arr(1 to 2) hoặc Arr(1 to 2,1 to 3)
Vậy bản chất khai báo mảng dim kArr là gì
 
Upvote 0
như vậy mảng karr=listbox1.list là mảng 2 chiêu một chiều từ o đến 1055 và một chiều là từ 0 đến 4 phải không bạn.
bạn giải thich cách khai báo mảng dim kArr. tôi thấy khi khai báo mảng thi khai báo Arr() hoăc Arr(1 to 2) hoặc Arr(1 to 2,1 to 3)
Vậy bản chất khai báo mảng dim kArr là gì

Dim kArr là một biến Variant, nó tương đương với Dim kArr As Variant.

Nó có thể nhận bất cứ giá trị hay kiểu dữ liệu (Data type) nào.

Nếu muốn cụ thể nó là mảng, bạn khai Dim kArr()
 
Upvote 0
như thế bài của bạn chẳng liên quan gì đến mảng 1 chiều , mà do bạn quan niệm sai, cuối cùng nên làm như sau (ví dụ thế)
PHP:
Private Sub CommandButton1_Click()
    Dim i As Long, kQ()
    ReDim kQ(1 To ListBox1.ListCount - 1, 1 To 4)
    With ListBox1
        For i = 1 To .ListCount - 1
            kQ(i, 1) = .List(i, 0)
            kQ(i, 2) = .List(i, 1)
            kQ(i, 3) = .List(i, 2)
            kQ(i, 4) = .List(i, 3)
        Next i
    End With
    
    With Sheet3
        .Range("B" & .Rows.Count).End(xlUp).Offset(1, -1).Resize(ListBox1.ListCount - 1, 4).Value = kQ
    End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
cảm ơn mubiroi tôi tự học vba cũng từ các bạn trên GPE giúp đỡ lên còn nhiều thiếu xót cứ loanh quanh mãi với cái listbox thành ra. Cũng là vừa hỏi vừa học mà. cảm ơn sự giúp đỡ của bạn
lúc đầu định chơi thế này

Private Sub CommandButton1_Click()
Dim Arr(), i As Integer, j As Integer
ReDim Arr(0 To ListBox1.ListCount, 0 To ListBox1.ColumnCount)
For i = 0 To UBound(Arr, 1)
For j = 0 To UBound(Arr, 2)
Arr(i, j) = ListBox1.List(i, j)
Next j
Next i
Sheet3.Range("A").Resize(UBound(Arr, 1), UBound(Arr, 2)) = Arr
End Sub

nhưng cái listbox nó không cho phép bác ợ
 
Upvote 0
cảm ơn mubiroi tôi tự học vba cũng từ các bạn trên GPE giúp đỡ lên còn nhiều thiếu xót cứ loanh quanh mãi với cái listbox thành ra. Cũng là vừa hỏi vừa học mà. cảm ơn sự giúp đỡ của bạn
lúc đầu định chơi thế này

Private Sub CommandButton1_Click()
Dim Arr(), i As Integer, j As Integer
ReDim Arr(0 To ListBox1.ListCount, 0 To ListBox1.ColumnCount)
For i = 0 To UBound(Arr, 1)
For j = 0 To UBound(Arr, 2)
Arr(i, j) = ListBox1.List(i, j)
Next j
Next i
Sheet3.Range("A").Resize(UBound(Arr, 1), UBound(Arr, 2)) = Arr
End Sub

nhưng cái listbox nó không cho phép bác ợ
Code bạn không sai những bạn set properties của listbox là columncount = 8 trong khi dữ liệu bạn là 5 cột khi chạy sẽ bị lỗi
Do listbox luôn bắt dầu là 0 nên khi bạn ubound cột hoặc dòng nên trừ 1, trong code bạn phải Ubound(Arr,1) -1 và Ubound(Arr,2) -1 nếu không sẽ bị lỗi nếu không dùng ubound thì dùng listbox1.listcount -1 và listbox1.columncount -1
Bạn chỉnh lại Properties của listbox columncount = 5 sẽ hiểu

--------------------------
Chủ đề này của bạn đúng không??

[h=1]Ghi tất cả listbox từ Form xuống Sheet[/h]
 
Lần chỉnh sửa cuối:
Upvote 0
.........................................
nhưng cái listbox nó không cho phép bác ợ
Không phải nó không cho mà do bạn làm sai

Khi Load Form bạn đã quy định Listbox có 5 cột
Mã:
ListBox1.List = Sheet1.Range("A5:H" & n).Value

Trong khi bạn lại gán vào Arr dựa theo ListBox1.List(i, j) là 8 cột
Mã:
For j = 0 To UBound(Arr, 1)

Mặt khác Code của bạn còn sai tại một số điểm

1/ Lấy UBound(Arr, 1), UBound(Arr, 2) để gán vào ListBox1.List(i, j) => Sai, bởi Ubound lấy cận trên của mảng khai báo Arr(1 To 1000, 1 To 8) đối chiếu với listbox sẽ vượt
2/ Dòng: Sheet3.Range("A1").Resize(UBound(Arr, 1), UBound(Arr, 2)) = Arr
bạn thiếu phần chữ đỏ.
 
Upvote 0

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

Back
Top Bottom