Xuất dữ liệu hàng loạt bằng VBA

Liên hệ QC

Xiaojiangs

Thành viên mới
Tham gia
1/1/12
Bài viết
11
Được thích
7
Em chào các anh chị diễn đàn GPE!

Em có 1 vấn đề nhờ các anh chị giúp sức.
Em có 1 file excel, trong file có 2 sheet : "T1" và "PX"
"T1" là sheet nguồn chứa dữ liệu nguồn
"PX" là sheet để chứa dữ liệu xuất ra thỏa mãn điều kiện, vùng điều kiện là vùng từ cột F đến cột Q, điều kiện là nếu các ô trong cột F, G, H....đến Q có dữ liệu (lớn hơn 0) thì xuất dữ liệu đó sang đúng vùng tương ứng bên Sheet "PX"
Em đã hiện thử kết quả bằng tay trong file ví dụ ứng với cột F, điều kiện dữ liệu xuất hiện trong cột F thì xuất sang vùng từ B10 sheet PX trở đi. Trước đây em có làm bằng công thức cho các cột nhưng dữ liệu nhiều quá ảnh hưởng đến tốc độ của File, em muốn nhờ các anh chị chuyển thành code VBA giúp em.

Em xin chân thành cảm ơn!
 

File đính kèm

  • VPP-2012.rar
    44 KB · Đọc: 75
Lần chỉnh sửa cuối:
Em chào các anh chị diễn đàn GPE!

Em có 1 vấn đề nhờ các anh chị giúp sức.
Em có 1 file excel, trong file có 2 sheet : "T1" và "PX"
"T1" là sheet nguồn chứa dữ liệu nguồn
"PX" là sheet để chứa dữ liệu xuất ra thỏa mãn điều kiện, vùng điều kiện là vùng từ cột F đến cột Q, điều kiện là nếu các ô trong cột F, G, H....đến Q có dữ liệu (lớn hơn 0) thì xuất dữ liệu đó sang đúng vùng tương ứng bên Sheet "PX"
Em đã hiện thử kết quả bằng tay trong file ví dụ ứng với cột F, điều kiện dữ liệu xuất hiện trong cột F thì xuất sang vùng từ B10 sheet PX trở đi. Trước đây em có làm bằng công thức cho các cột nhưng dữ liệu nhiều quá ảnh hưởng đến tốc độ của File, em muốn nhờ các anh chị chuyển thành code VBA giúp em.

Em xin chân thành cảm ơn!

Tôi thấy ở sheet PX bạn có 12 bảng, mỗi bảng chưa tối đã 50 dòng.
Vậy nếu như dữ liệu từ bên sheet T1 xuất sang nhiều hơn 50 dòng thì tính sao?
Sao không chia 12 bảng ra 12 sheet cho khỏe? Vì cách bố trí dữ liệu như file của bạn vậy là không hợp lý cho lắm ---> Bảng biểu phải liên tục chứ không thể có chuyện bảng này nằm dưới bảng kia ---> Sẽ gây khó khăn trong việc quản lý
 
Upvote 0
Theo dữ liệu của bạn ấy thì có 121 mặt hàng
Còn nếu chỉ lọc tất cả vào 1 bảng bạn có thể tham khảo Code sau:
Mã:
Sub Button1_Click()
Dim arr
Dim i, j As Long
ReDim arr(1 To Cells(65536, 18).End(xlUp).Row - 6, 1 To 6)
j = 1
For i = 5 To Cells(65536, 18).End(xlUp).Row - 1
    If Cells(i, 18) > 0 Then
        arr(j, 1) = j
        arr(j, 2) = Cells(i, 3)
        arr(j, 3) = Cells(i, 4)
        arr(j, 4) = Cells(i, 5)
        arr(j, 5) = Cells(i, 18)
        arr(j, 6) = Cells(i, 19)
    j = j + 1
    End If
Next


Sheets("px").Range("a10").Resize(UBound(arr), 6) = arr
 
Upvote 0
Cảm ơn anh đã quan tâm, đúng là cách bố trí dữ liệu không được hợp lý cho lắm nhưng nó có mục đích riêng ạ.
Em sửa được code rồi, he he he. Lâu rồi không đụng đến, ngố quá!
Các bác ai có yêu cầu giống em thì tham khảo nhé, hic.
Cảm ơn các anh chị đã quan tâm.
PHP:
Sub Loc()
Dim i As Long
Dim j As Long
Dim k As Long
Dim nR As Long
Dim sArr(), dArr()
sArr = Sheets("T1").Range("B5:Q387").Value
ReDim dArr(1 To 50, 1 To 5)
nR = 10
For j = 5 To 16
k = 0
        For i = 1 To UBound(sArr, 1)
            If sArr(i, j) > 0 Then
                k = k + 1
                dArr(k, 1) = sArr(i, 2)
                dArr(k, 2) = sArr(i, 3)
                dArr(k, 3) = sArr(i, 4)
                dArr(k, 4) = sArr(i, j)
                dArr(k, 5) = sArr(i, j) * sArr(i, 4)
            End If
         Next i
            Sheets("PX").Range("B" & nR).Resize(k, 5).Value = dArr
            nR = nR + 66
Next j
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom