Nhờ anh chị giúp tách dữ liệu cột thành dòng trong excel.

Liên hệ QC

quangnguyentbb

Thành viên mới
Tham gia
17/10/18
Bài viết
21
Được thích
5
Em có 1 bảng dữ liệu như sau:

NgàySố phiếuMặt hàngTiền hàngChi phí
01/01/2019
PX001
Mặt hàng 1500.00050.000
01/01/2019PX001mặt hàng 2600.000
02/01/2019PX002Mặt hàng 3400.00080.000
03/01/2019PX003Mặt hàng 4700.000

Em mong muốn là sẽ có 1 hàm hoặc đoạn mã VBA chạy được việc tự động tạo 1 bảng mới.
Trong đó dòng chi phí sẽ nằm ở cột tiền hàng, tên mặt hàng tương ứng là: Dịch vụ vận chuyển, ngày, số phiếu giữ nguyên.
Kết quả sẽ là:

NgàySố phiếuMặt hàngTiền hàng
01/01/2019
PX001
Mặt hàng 1500.000
01/01/2019PX001mặt hàng 2600.000
01/01/2019PX001Dịch vụ vận chuyển50.000
02/01/2019PX002Mặt hàng 3400.000
02/01/2019PX002Dịch vụ vận chuyển80.000
03/01/2019PX003Mặt hàng 4700.000
Rất mong anh/chị giúp đỡ!
 

File đính kèm

Em có 1 bảng dữ liệu như sau:

NgàySố phiếuMặt hàngTiền hàngChi phí
01/01/2019
PX001
Mặt hàng 1500.00050.000
01/01/2019PX001mặt hàng 2600.000
02/01/2019PX002Mặt hàng 3400.00080.000
03/01/2019PX003Mặt hàng 4700.000

Em mong muốn là sẽ có 1 hàm hoặc đoạn mã VBA chạy được việc tự động tạo 1 bảng mới.
Trong đó dòng chi phí sẽ nằm ở cột tiền hàng, tên mặt hàng tương ứng là: Dịch vụ vận chuyển, ngày, số phiếu giữ nguyên.
Kết quả sẽ là:

NgàySố phiếuMặt hàngTiền hàng
01/01/2019
PX001
Mặt hàng 1500.000
01/01/2019PX001mặt hàng 2600.000
01/01/2019PX001Dịch vụ vận chuyển50.000
02/01/2019PX002Mặt hàng 3400.000
02/01/2019PX002Dịch vụ vận chuyển80.000
03/01/2019PX003Mặt hàng 4700.000
Rất mong anh/chị giúp đỡ!
Bạn thử code này.
Mã:
Sub chuyendulieu()
    Dim arr, i As Long, j As Long, lr As Long, chiphi As Double, kq, a As Long
    With Sheets("DATA")
         lr = .Range("B" & Rows.Count).End(xlUp).Row + 1
         arr = .Range("A2:E" & lr).Value
         ReDim kq(1 To UBound(arr) + 1000, 1 To 4)
         For i = 1 To UBound(arr) - 1
                a = a + 1
                For j = 1 To 4
                    kq(a, j) = arr(i, j)
                Next j
                chiphi = chiphi + arr(i, 5)
             If UCase(arr(i + 1, 2)) <> UCase(arr(i, 2)) And chiphi Then
                 a = a + 1
                 kq(a, 1) = arr(i, 1)
                 kq(a, 2) = arr(i, 2)
                 kq(a, 3) = "Dich vu van chuyen"
                 kq(a, 4) = chiphi
                 chiphi = 0
              End If
         Next i
         .Range("G2").Resize(a, 4).Value = kq
     End With
End Sub
 
Upvote 0
Làm 1 lần hay nhiều lần?

Nếu chỉ làm 1 vài lần thì làm thủ công cho nó chuẩn:
1. Filter theo cột chi phí
2. copy phần này sang sheet khác. Ví dụ là sheetA
3. ở sheetA: copy "chi phí" vào "tiền hàng", sửa "tên hàng" thành "Dịch vụ vận chuyển"
4. copy vào cuối bảng ban đầu
5. xoá cột chi phí, đổi thành "số thứ tự" và đánh số thứ tự cho mỗi dòng
6. sort theo ngày, số phiếu và số thứ tự
7. xoá cột số thứ tự
8. hết

Viết code cũng có thể dựa theo giải thuật trên. Dùng ADO để sử dụng lệnh SQL thì càng dễ.
 
Upvote 0
Cái này em có 2 phần mềm nên phải xuất dữ liệu từ web bán hàng nhập vào phần mềm kế toán.
Cái này làm thủ công nhiều mệt quài.
Bác cho em xin giải pháp ADO kết hợp SQL với.
VBA em không biết gì nhưng SQL thì em biết một chút!
 
Upvote 0
Select F1, F2, F3, F4 From
(Select F1, F2, F3, F4, "" As VC From Bang
Union All
Select F1, F2, "Dịch vụ vận chuyển", F5, "VC" From Bang Where F5 <> 0
Order by F1, F2, VC)
 
Upvote 0
Web KT

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

Back
Top Bottom