Lấy dữ liệu tự động của sheetA,B,C sang D theo từng dịch vụ (1 người xem)

Liên hệ QC

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

trieusgvn

Thành viên mới
Tham gia
16/6/07
Bài viết
30
Được thích
2
Xin chào các bạn!
}}}}}
Mình vừa tập tành cùng Giải pháp excel được 1 chương trình nho nhỏ xử lý việc quản lý các túi/gói/kiện hàng từ nơi gửi đến nơi nhận và cần tổng hợp chúng theo từng dịch vụ.
Mình đã thực hiện thử tổng hợp cho dịch vụ 1A bằng liên kết tĩnh, tức là bên sheetA, B, C có bao nhiêu hàng thì bên dịch vụ 1 chừa bấy nhiêu dòng.
Nhưng nếu có nhiều sheet, mỗi sheet không giới hạn 12 dòng thì khi tổng hợp theo từng dịch vụ quả là rất vất vả, chưa kể các dòng trống không có dữ liệu nếu dùng autofilter thì hơi bất tiện cho người sử dụng cần phải thao tác thêm tác vụ này.
Rất mong các huynh, đệ hỗ trợ mình giải pháp excel nào tốt nhất
Mình gửi tập tin đính kèm.
Cám ơn nhiều.
Chúc mọi người vui vẻ, hạnh phúc.
 

File đính kèm

Bạn có thích giải fáp do VBA đưa lại hay không?

Sẽ hiệu quả hơn công thức, chắc chắn vậy!


Chờ tin bạn & thân ái.
 
Rât tố t. cám ơ n bạ n nhiề u. Mì nh đ ang tì m hiể u VBA như ng hiiiii chắ c phả i họ c hỏ i bạ n rồ i!!!
 
Bạn kiểm số liệu xem đúng chưa nha, để ta tiếp tục

Macro có sẵn fím nóng, bạn có thể sử dụng hay đổi lại tùy nghi;

Fần format để sau, một khi dữ liệu đạt cái đã!
 
Lần chỉnh sửa cuối:
Macro có sẵn fím nóng, bạn có thể sử dụng hay đổi lại tùy nghi;

Fần format để sau, một khi dữ liệu đạt cái đã!

Cám ơn bạn nhiều, Đã giải quyết được vấn đề lấy dữ liệu, nhưng sao chỉ có dòng đầu của từng sheet và thú thật mình mù tịt VBA nên đọc khó hiểu, bạn vui lòng chú thích các dòng lệnh để mình hiệu chỉnh theo ý muốn. Ví dụ như thêm nhiều sheet nữa, các dịch vụ còn lại có biến đổi vị trí lấy dữ liệu...
À tên tắt sử dụng chạy macro là gì vậy bạn!?
 
Lần chỉnh sửa cuối:
Fiên bản mới đê, mại zô!

Fím nóng {CTRL}+{SHIFT}+G
Vẫn có thể chạy macro cũ với tổ hợp {CTRL}+{SHIFT}+T

PHP:
Option Explicit
Sub gpe_TongHop()
1 Dim Jj As Byte, Rws As Long, Col As Byte, Resiz As Byte, Dz As Byte, Offs As Byte, VTr As Byte
 Dim Sh As Worksheet, Rng As Range, Cls As Range
3 Dim ShName As String:                          Const TGK As String = "TGKgpe"
 
 For Jj = 1 To 4
5    ShName = "DVu" & CStr(Jj)
    ThisWorkbook.Worksheets(ShName).Select
7    [A12:A239].Resize(, 10).ClearContents
    For Each Sh In ThisWorkbook.Worksheets
9        If Left(Sh.Name, 2) = "Sh" Then
            Rws = Sh.[c13].End(xlDown).Row - 12
11            Col = Choose(Jj, 4, 6, 8, 11)
            If Col < 7 Then Resiz = 2 Else Resiz = 3
13            Set Rng = Sh.Cells(13, Col).Resize(Rws, Resiz)
            For Each Cls In Rng
15                If Cls.Value > 0 Then
                    With [A240].End(xlUp)
17                        If .Value = Sh.Cells(Cls.Row, "A").Value Or .Row < 12 Then
                            Dz = 1
19                        Else
                            Dz = 5
21                        End If
                        .Offset(Dz).Resize(, 3).Value = Sh.Cells(Cls.Row, 1).Resize(, 3).Value
23                        VTr = InStr(TGK, UCase$(Sh.Cells(Cls.Row, "O")))
                        
                        Select Case Cls.Column
25                        Case 4, 6, 8, 11
                            Offs = 3 + VTr - 1
27                        Case 5, 9, 12
                            Offs = 5 + VTr - 1
29                        Case 10, 13
                            Offs = 7
31                        Case 7
                            Offs = 5
33                        End Select
                        .Offset(Dz, Offs).Value = Cls.Value
35                        VTr = Choose(Jj, 7, 6, 8, 8)
                        .Offset(Dz, VTr).Resize(, 2).Value = Sh.Cells(Cls.Row, "N").Resize(, 2).Value
37                    End With
                End If
39            Next Cls
        End If
41    Next Sh
 Next Jj
End Sub
 

File đính kèm

D1:D3: Khai báo các biến cần dùng; (D3b: Khai 1 hằng kiểu chuỗi)

D4: Thiết lập vòng lặp để duyệt lần lượt 4 trang tính ‘DVuX’; Kết thúc vòng lặp tại D42

D5: Lấy tên các trang tính cần duyệt cho vô biết chuỗi;

D6: Kích hoạt trang tính tương ứng;

D7: Xóa dữ liệu cũ của các trang này;

D8: Tạo vòng lặp duyệt toàn bộ các trang tính; Vòng này kết thúc tại D41;

D9: Điều kiện, nếu 2 chữ cái đầu của trang tính là ‘Sh’; Bạn chú í khi thêm các trang tính mới liên
quan với ĐK này.

D10: lấy dòng cuối có dữ liệu thuộc cột ‘C’ của trang tính đang KS (khảo sát) cho vô biến;

D11: Lấy cột tương ứng với biến Jj gán vô biến bằng hàm Choose() của VBA

D12: Lập ĐK cho tham biến Resiz nhận trị tương ứng

D13: Lấy vùng cần thiết của trang đang KS gán vô biến đối tượng Rng;

D14: Thiết lập vòng lặp duyệt toàn bộ các ô trong vùng vừa xác định; Vòng này kết thúc tại D39

D15: ĐK nếu trị trông ô duyệt >0 thì thực thi các lệnh. . . cho đến D38

D16: Tuyên bố làm việc với ô cuối có dữ liệu dưới ô [A11] thuộc trang tính đang kích hoạt; (Không fải trang tính đang KS à nha!). (Làm miết cho đến D37)
(Tạm gọi ô này là ô Tb)

D17-D21: Nếu trị trong ô Tb = trị của ô đầu dòng của ô KS, hay hàng của ô Tb <12 thì biến Dz =1; còn không vậy thì = 5

D22: Cách ô Tb fía dưới Dz dòng & mở rọng nó về fía fải thêm 2 ô sẽ nhận giá trị là 3 ô đầu dòng của ô đang KS

D23: Lấy trị loại bao gói cho vô biến;

D24: Lập lựa chọn theo trị cột của biến Cls

D25:-D33: Nếu ứng tham số thuộc dòng lệnh mang chỉ số lẽ, thì biến Offs sẽ mang trị của dòng lệnh có chỉ số chẵn)

D34: Ô có tham số tương ứng được gán trị trong ô KS;

D35: Xác định cột cần chép thích hợp cho 2 cột số liệu cuối cùng, (tương ứng với biến Jj)

D36: Nhập số liệu cho 2 cột này từ 2 số liệu cuối dòng của ô KS

D37::D42: Đã đề cập bên trên.


(húc thành công!
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom