Nhờ các anh chị chỉ giúp code xuất 1 phần của Array hoặc tách 1 Array thành nhiều Array.

Liên hệ QC

QTHAO312

Thành viên mới
Tham gia
19/3/18
Bài viết
15
Được thích
2
Giới tính
Nam
Xin chào mọi người, em cần code xuất 1 phần của Array hoặc có cách nào tách 1 Array thành nhiều Array nhờ các anh chị chỉ giúp.
Sub Vidu()
Dim Arr(1 To 10, 1 To 3) As String
Arr(1, 1) = "A1"
Arr(2, 1) = "A1"
Arr(3, 1) = "A3"
Arr(4, 1) = "A3"
Arr(5, 1) = "A5"
Arr(1, 2) = "B1"
Arr(2, 2) = "B2"
Arr(3, 2) = "B3"
Arr(4, 2) = "B4"
Arr(5, 2) = "B5"
Arr(1, 3) = "C1"
Arr(2, 3) = "C2"
Arr(3, 3) = "C3"
Arr(4, 3) = "C4"
Arr(5, 3) = "C5"
End Sub
Code: Range("A1:C5") = Arr
Cho kết quả
A1 B1 C1
A1 B2 C2
A3 B3 C3
A3 B4 C4
A5 B5 C5
Giờ em cần code để xuất.
A3 B3 C3
A3 B4 C4
hoặc em cần cần tách Array trên thành nhiều Array với số Array phụ thuộc vào giá trí khác nhau ở cột A
 
Xin chào mọi người, em cần code xuất 1 phần của Array hoặc có cách nào tách 1 Array thành nhiều Array nhờ các anh chị chỉ giúp.
Sub Vidu()
Dim Arr(1 To 10, 1 To 3) As String
Arr(1, 1) = "A1"
Arr(2, 1) = "A1"
Arr(3, 1) = "A3"
Arr(4, 1) = "A3"
Arr(5, 1) = "A5"
Arr(1, 2) = "B1"
Arr(2, 2) = "B2"
Arr(3, 2) = "B3"
Arr(4, 2) = "B4"
Arr(5, 2) = "B5"
Arr(1, 3) = "C1"
Arr(2, 3) = "C2"
Arr(3, 3) = "C3"
Arr(4, 3) = "C4"
Arr(5, 3) = "C5"
End Sub
Code: Range("A1:C5") = Arr
Cho kết quả
A1 B1 C1
A1 B2 C2
A3 B3 C3
A3 B4 C4
A5 B5 C5
Giờ em cần code để xuất.
A3 B3 C3
A3 B4 C4
hoặc em cần cần tách Array trên thành nhiều Array với số Array phụ thuộc vào giá trí khác nhau ở cột A
Thế nếu dữ liệu 1000 dòng khác nhau là tách thành 1000 array? Bạn phải nói rõ mục đích sau khi phân tách ra bạn sẽ làm gì? Có thể chỉ cần khai báo 1 array rồi tùy biến theo mục đích
 
Upvote 0
Chắc bạn muốn vầy?
PHP:
Dim i&, j&
 For i =1 to ubound(arr)
    For j =1 to ubound(arr,2)
        Cells(i,j).value = arr(i,j)
    Next
 Next
 
Upvote 0
Thế nếu dữ liệu 1000 dòng khác nhau là tách thành 1000 array? Bạn phải nói rõ mục đích sau khi phân tách ra bạn sẽ làm gì? Có thể chỉ cần khai báo 1 array rồi tùy biến theo mục đích
File mình cũng khoảng 1k~50k dòng và chắc cũng tác ra 5-20 sheet thôi.
Bài đã được tự động gộp:

Chắc bạn muốn vầy?
PHP:
Dim i&, j&
 For i =1 to ubound(arr)
    For j =1 to ubound(arr,2)
        Cells(i,j).value = arr(i,j)
    Next
 Next
Code này là điền dữ liệu vào sheet mà bác
Em có dùng Dic để tạo sheet add dữ liêu cho từng cell nhưng tốc độ chậm và khi diền từng cell thì lại dễ sai vì vậy em muốn tách 1 Array thành nhiều Array or em sắp sếp lại Array sau đó add từng đoạn array cho từ sheet nhưng em chỉ biết code xuất nguyên 1 Array chứ ko biết code xuất từng đoạn hay code tách 1 Array thành nhiều Array
 
Lần chỉnh sửa cuối:
Upvote 0
Em có dùng Dic để tạo sheet add dữ liêu cho từng cell nhưng tốc độ chậm và khi diền từng cell thì lại dễ sai vì vậy em muốn tách 1 Array thành nhiều Array or em sắp sếp lại Array sau đó add từng đoạn array cho từ sheet nhưng em chỉ biết code xuất nguyên 1 Array chứ ko biết code xuất từng đoạn hay code tách 1 Array thành nhiều Array
Khó hiểu nhỉ. Mình giả sử thế này, ví dụ bạn có mảng arr(1 to 100,1 to 1) có 100 items, muốn tách thành 4 cái arr1,arr2,arr3,arr4:
PHP:
For i = 1 to 100
    If i<=25 then 
        arr1(i,1) =arr(i,1)
    elseIf i<=50 then 
       k=k+1
        arr2(k,1) =arr(i,1)
..... tiếp tục cho đến arr3, arr4 với các mức kế tiếp là 75 và 100
Next
 
Upvote 0
File mình cũng khoảng 1k~50k dòng và chắc cũng tác ra 5-20 sheet thôi.
Bài đã được tự động gộp:


Code này là điền dữ liệu vào sheet mà bác
Em có dùng Dic để tạo sheet add dữ liêu cho từng cell nhưng tốc độ chậm và khi diền từng cell thì lại dễ sai vì vậy em muốn tách 1 Array thành nhiều Array or em sắp sếp lại Array sau đó add từng đoạn array cho từ sheet nhưng em chỉ biết code xuất nguyên 1 Array chứ ko biết code xuất từng đoạn hay code tách 1 Array thành nhiều Array
Vậy là bạn cũng biết nhiều đấy chứ, mình nghĩ thôi chưa làm:
1/ Chèn cột phụ cuối cùng điền stt từ 1-> hết dữ liệu (để đó)
2/ Sort dữ liệu theo cột A (cột mà bạn muốn tách sheet, sort cả bảng, bao gồm cả cột phụ)
3/ Lặp trên xuống, nếu tại cột A có ký tự khác thì bê cái phần phía trên ký tự khác đó qua sheet mới
4/ Lặp cho đến khi kết thúc dữ liệu, quay lại sheet dữ liệu gốc rồi sort lại cột phụ từ bé đến lớn để trả về ban đầu, và xóa cột phụ đó
Tốc độ không biết sẽ thế nào, nhưng đỡ phải dùng dic
 
Upvote 0
Xin chào mọi người, em cần code xuất 1 phần của Array hoặc có cách nào tách 1 Array thành nhiều Array nhờ các anh chị chỉ giúp.
. . . . .
1./ Xuất 1 phần của Array là xuất cho ai?
2./ Tách 1 Array thành nhiều Array, thì
cái 1 Array đó khoảng bao nhiều dòng, bao nhiêu cột?
Tách thành nhiều Array, thì những Array này có cùng số dòng hay cùng số cột với Array đầu; Hay dòng cột bất kỳ miễn là bé hơn dòng & cột Array đầu?
. . . . .
 
Upvote 0
Code này là điền dữ liệu vào sheet mà bác
Thì bạn có nói rõ bạn muốn gì đâu mà hi vọng người ta hiểu ý mình?

Nếu bạn đã có một mảng 2 chiều nào đó và muốn tách những dòng có cùng giá trị tại cột thứ 1 sang một sheet mới thì code không hề khó về mặt kỹ thuật, cứ phương pháp "cần cù" - "đi mãi ắt tới" mà phang. Có rất nhiều người thích thi thố code ít chữ mà nhanh. Tôi không thi thố gì cả, tôi chỉ bàn về mặt kỹ thuật. Code như ở dưới. Code tổng quát là Sub tach_xuong_sheet_moi, còn mảng dulieu có thể tạo ra bằng nhiều cách, vd. nhập từ một sheet nào đấy, hoặc tạo bằng code như sub Vidu.

Tôi chỉ viết một lần. Nếu cần thì bạn tự sửa và rút kinh nghiệm lần sau. Hãy mô tả kỹ vấn đề, đừng bắt người khác mất thêm công sức không đáng mất.

Đây là mục lập trình nên tôi làm bằng code.
Mã:
Option Explicit

Private Arr() As String

Sub Vidu()
    ReDim Arr(1 To 5, 1 To 3)
    Arr(1, 1) = "A1"
    Arr(2, 1) = "A1"
    Arr(3, 1) = "A3"
    Arr(4, 1) = "A3"
    Arr(5, 1) = "A5"
    Arr(1, 2) = "B1"
    Arr(2, 2) = "B2"
    Arr(3, 2) = "B3"
    Arr(4, 2) = "B4"
    Arr(5, 2) = "B5"
    Arr(1, 3) = "C1"
    Arr(2, 3) = "C2"
    Arr(3, 3) = "C3"
    Arr(4, 3) = "C4"
    Arr(5, 3) = "C5"
End Sub

Sub tach_xuong_sheet_moi(dulieu() As String)
'    tach nhung dong co cung gia tri tai cot 1 cua mang dulieu sang mot sheet moi
Dim r As Long, c As Long, sodong As Long, cotA As String, item(), key, dic As Object
    Set dic = CreateObject("Scripting.Dictionary")
    dic.comparemode = vbTextCompare
    For r = 1 To UBound(dulieu, 1)
        cotA = dulieu(r, 1)
        If Len(cotA) Then
            If dic.exists(cotA) Then
                item = dic.item(cotA)
            Else
                ReDim item(1 To UBound(dulieu, 1), 1 To UBound(dulieu, 2) + 1)
            End If
            sodong = item(1, UBound(item, 2)) + 1
            item(1, UBound(item, 2)) = sodong
            For c = 1 To UBound(dulieu, 2)
                item(sodong, c) = dulieu(r, c)
            Next c
            dic.item(cotA) = item
        End If
    Next r
    If dic.Count Then
        For Each key In dic.keys
            item = dic.item(key)
            With ThisWorkbook.Worksheets.Add
                .Name = key & "_" & Format(Now, "ddmmyyyyhhmmss")
                .Range("A1").Resize(item(1, UBound(item, 2)), UBound(item, 2) - 1).Value = item
            End With
        Next key
    End If
    Set dic = Nothing
End Sub

Sub test()
    Vidu
    tach_xuong_sheet_moi Arr
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Đại khái thớt muốn một cái hàm hay gì đó hoạt động giống như hàm Offset của WorkSheet.
Mà nói tiếng Anh nhiều quá, nhìn bắt mỏi mắt.

Chú: tìm một vùng trống trên sheet, đặt cả cái array xuống. Có rồi thì tha hồ dùng hàm Offset để lấy array con. Làm xong thì xóa cái array mẹ ra khỏi sheet.
 
Upvote 0
Khó hiểu nhỉ. Mình giả sử thế này, ví dụ bạn có mảng arr(1 to 100,1 to 1) có 100 items, muốn tách thành 4 cái arr1,arr2,arr3,arr4:
PHP:
For i = 1 to 100
    If i<=25 then
        arr1(i,1) =arr(i,1)
    elseIf i<=50 then
       k=k+1
        arr2(k,1) =arr(i,1)
..... tiếp tục cho đến arr3, arr4 với các mức kế tiếp là 75 và 100
Next
Dạ đúng rồi đó ạ. Nhưng khai báo bao nhiêu arr thì lại phụ thuộc và dữ liệu ở cột A và sau đó lại phải xác định được arr này xuất kết quả vào sheet nào.
Bài đã được tự động gộp:

1./ Xuất 1 phần của Array là xuất cho ai?
2./ Tách 1 Array thành nhiều Array, thì
cái 1 Array đó khoảng bao nhiều dòng, bao nhiêu cột?
Tách thành nhiều Array, thì những Array này có cùng số dòng hay cùng số cột với Array đầu; Hay dòng cột bất kỳ miễn là bé hơn dòng & cột Array đầu?
. . . . .
Hi Bác,
1./ Xuất 1 phần của Array ra 1 sheet mới
2./Hiện array ban đầu khoảng 50k dòng và 20 cột
Các Array tách ra format y như Array ban đầu vào số dòng thì phụ thuộc vào bao nhiêu dòng trùng dữ liệu ở cột A và vì tách ra từ Array ban đầu nên số dòng <= Array ban đầu
 
Lần chỉnh sửa cuối:
Upvote 0
Thì bạn có nói rõ bạn muốn gì đâu mà hi vọng người ta hiểu ý mình?

Nếu bạn đã có một mảng 2 chiều nào đó và muốn tách những dòng có cùng giá trị tại cột thứ 1 sang một sheet mới thì code không hề khó về mặt kỹ thuật, cứ phương pháp "cần cù" - "đi mãi ắt tới" mà phang. Có rất nhiều người thích thi thố code ít chữ mà nhanh. Tôi không thi thố gì cả, tôi chỉ bàn về mặt kỹ thuật. Code như ở dưới. Code tổng quát là Sub tach_xuong_sheet_moi, còn mảng dulieu có thể tạo ra bằng nhiều cách, vd. nhập từ một sheet nào đấy, hoặc tạo bằng code như sub Vidu.

Tôi chỉ viết một lần. Nếu cần thì bạn tự sửa và rút kinh nghiệm lần sau. Hãy mô tả kỹ vấn đề, đừng bắt người khác mất thêm công sức không đáng mất.

Đây là mục lập trình nên tôi làm bằng code.
Mã:
Option Explicit

Private Arr() As String

Sub Vidu()
    ReDim Arr(1 To 5, 1 To 3)
    Arr(1, 1) = "A1"
    Arr(2, 1) = "A1"
    Arr(3, 1) = "A3"
    Arr(4, 1) = "A3"
    Arr(5, 1) = "A5"
    Arr(1, 2) = "B1"
    Arr(2, 2) = "B2"
    Arr(3, 2) = "B3"
    Arr(4, 2) = "B4"
    Arr(5, 2) = "B5"
    Arr(1, 3) = "C1"
    Arr(2, 3) = "C2"
    Arr(3, 3) = "C3"
    Arr(4, 3) = "C4"
    Arr(5, 3) = "C5"
End Sub

Sub tach_xuong_sheet_moi(dulieu() As String)
'    tach nhung dong co cung gia tri tai cot 1 cua mang dulieu sang mot sheet moi
Dim r As Long, c As Long, sodong As Long, cotA As String, item(), key, dic As Object
    Set dic = CreateObject("Scripting.Dictionary")
    dic.comparemode = vbTextCompare
    For r = 1 To UBound(dulieu, 1)
        cotA = dulieu(r, 1)
        If Len(cotA) Then
            If dic.exists(cotA) Then
                item = dic.item(cotA)
            Else
                ReDim item(1 To UBound(dulieu, 1), 1 To UBound(dulieu, 2) + 1)
            End If
            sodong = item(1, UBound(item, 2)) + 1
            item(1, UBound(item, 2)) = sodong
            For c = 1 To UBound(dulieu, 2)
                item(sodong, c) = dulieu(r, c)
            Next c
            dic.item(cotA) = item
        End If
    Next r
    If dic.Count Then
        For Each key In dic.keys
            item = dic.item(key)
            With ThisWorkbook.Worksheets.Add
                .Name = key & "_" & Format(Now, "ddmmyyyyhhmmss")
                .Range("A1").Resize(item(1, UBound(item, 2)), UBound(item, 2) - 1).Value = item
            End With
        Next key
    End If
    Set dic = Nothing
End Sub

Sub test()
    Vidu
    tach_xuong_sheet_moi Arr
End Sub
Đúng code em cần rồi ạ. Thanks bác
 
Upvote 0
Web KT

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

Back
Top Bottom