sắp xếp giá trị vào bảng

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

gio_rung

Thành viên mới
Tham gia
22/3/18
Bài viết
10
Được thích
2
Giới tính
Nam
Nhờ các bạn hỗ trợ. Mình có bảng giá trị (Bảng 1)
Mình muốn tự động điền số tiền theo tháng ở bảng trên (bảng 1) vào bảng kết quả. Mỗi tháng mỗi người 1 dòng (như phần tô vàng)
Cám ơn mọi người ạ!
1722937532507.jpeg
 

File đính kèm

  • mau.xlsx
    10 KB · Đọc: 7
PHP:
Sub XepLaiBang()
 Dim Rws As Long, W As Integer, Col As Integer, Cot As Integer
 Dim Rng As Range, Cls As Range
 
 Rws = [C3].End(xlDown).Row
 Set Rng = [F3].Resize(Rws, 2)
 ReDim Arr(1 To 2 * Rws, 1 To 7)
1  [A20].Resize(5+Rws, 7).Value = Arr()
 For Each Cls In Rng
    If Cls.Value > 0 Then
        W = W + 1:              Arr(W, 1) = W
        For Col = 2 To 5
            Arr(W, Col) = Cells(Cls.Row, Col).Value
        Next Col
        Arr(W, Cls.Column) = Cls.Value
    End If
 Next Cls
 2 [A12].Resize(W, 7).Value = Arr()
End Sub
 
Lần chỉnh sửa cuối:
PHP:
Sub XepLaiBang()
 Dim Rws As Long, W As Integer, Col As Integer, Cot As Integer
 Dim Rng As Range, Cls As Range
 
 Rws = [C3].End(xlDown).Row
 Set Rng = [F3].Resize(Rws, 2)
 ReDim Arr(1 To 2 * Rws, 1 To 7)
 [A20].Resize(5+Rws, 7).Value = Arr()
 For Each Cls In Rng
    If Cls.Value > 0 Then
        W = W + 1:              Arr(W, 1) = W
        For Col = 2 To 5
            Arr(W, Col) = Cells(Cls.Row, Col).Value
        Next Col
        Arr(W, Cls.Column) = Cls.Value
    End If
 Next Cls
 [A12].Resize(W, 7).Value = Arr()
End Sub
Cám ơn bác nhiều lắm ạ! Em có thể nhờ bác sửa lại nếu chia 2 bảng thành 2 sheet với số dòng không giới hạn ko ạ?
 
Rảnh rỗi viết mấy hàm excell để góp vui, chứ giờ VBA lên ngôi quá :)))
 

File đính kèm

  • mau.xlsx
    12.7 KB · Đọc: 9
Rảnh rỗi viết mấy hàm excell để góp vui, chứ giờ VBA lên ngôi quá :)))
Trừ phi bạn là dân lập trình, chuyên phát triển ứng dụng, chứ để cho VBA "lên ngôi" là hiện tượng xấu.

Mà tôi cũng chả hiểu sao thớt lại đi unpivot nửa chừng bảng của mình ra làm cái gì. Loại bảng unpivot nửa chừng vừa khó đọc vừa khó tính toán.
 
@Chủ bài đăng

Bảng kết quả hiện thời là:
Bảng kết quả
STTMã SốHọ tênNơi sinhĐịa chỉTháng 1Tháng 2
111Nguyễn Văn A100,000
211Nguyễn Văn A-200,000
322Nguyễn Văn B-200,000
433Đặng Thị C300,000-
544Vũ Văn D200,000-
644Vũ Văn D-200,000
755Nguyễn Thị E300,000-

Giờ bạn muốn thành 2 bảng ở 2 trang như vậy, phải không:

STTMã SốHọ tênNơi sinhĐịa chỉTháng 1
111Nguyễn Văn A100,000
433Đặng Thị C300,000
544Vũ Văn D200,000
755Nguyễn Thị E300,000
STTMã SốHọ tênNơi sinhĐịa chỉTháng 2
211Nguyễn Văn A200,000
322Nguyễn Văn B200,000
644Vũ Văn D200,000
 
@Chủ bài đăng

Bảng kết quả hiện thời là:
Bảng kết quả
STTMã SốHọ tênNơi sinhĐịa chỉTháng 1Tháng 2
111Nguyễn Văn A100,000
211Nguyễn Văn A-200,000
322Nguyễn Văn B-200,000
433Đặng Thị C300,000-
544Vũ Văn D200,000-
644Vũ Văn D-200,000
755Nguyễn Thị E300,000-

Giờ bạn muốn thành 2 bảng ở 2 trang như vậy, phải không:

STTMã SốHọ tênNơi sinhĐịa chỉTháng 1
111Nguyễn Văn A100,000
433Đặng Thị C300,000
544Vũ Văn D200,000
755Nguyễn Thị E300,000
STTMã SốHọ tênNơi sinhĐịa chỉTháng 2
211Nguyễn Văn A200,000
322Nguyễn Văn B200,000
644Vũ Văn D200,000
Ý em là như này ạ:
1722990291007.jpeg
1722990308331.jpeg
 
À, thì ra là đem bảng kết quả sang trang khác;
/-)úng là tiếng Việt!

Vậy thì bạn thiết kế bảng kết quả ở trang tính trống nào đó (Ví dụ nó có tên là 'GPE")
& thêm tên trang tính vô đầu 2 dòng lệnh mà mình vừa winh số ở bài trên của mình là OK thôi;
Ví dụ Sheets("GPE").[A20].Resize(5+Rws, 7).Value = Arr()
Chúc bạn sớm thành công!
 
Mình chỉ chỉnh lại code của bác trên, bạn có thể dùng thử

Sub XepLaiBang2()
Dim Rws As Long, W As Integer, Col As Integer, Cot As Integer
Dim Rng As Range, Cls As Range

Rws = ThisWorkbook.Sheets("Du_lieu").[C3].End(xlDown).Row
Set Rng = ThisWorkbook.Sheets("Du_lieu").[F3].Resize(Rws, 2)
ReDim Arr(1 To 2 * Rws, 1 To 7)
'ThisWorkbook.Sheets("Ket_qua").[A20].Resize(5 + Rws, 7).Value = Arr()
For Each Cls In Rng
If Cls.Value > 0 Then
W = W + 1: Arr(W, 1) = W
For Col = 2 To 5
Arr(W, Col) = ThisWorkbook.Sheets("Du_lieu").Cells(Cls.Row, Col).Value
Next Col
Arr(W, Cls.Column) = Cls.Value
End If
Next Cls
ThisWorkbook.Sheets("Ket_qua").[A4].Resize(W, 7).Value = Arr()
End Sub
 
À, thì ra là đem bảng kết quả sang trang khác;
/-)úng là tiếng Việt!
...
Ý của thớt,theo thuật ngữ kỹ thuật là:
- Pivot theo người, Tên Nhân Viên + Mã Số.
- Cross-Tabbed theo tháng.
Đó là mẫu Full Pivot, bảng đầu vào

Nếu Unpivot Fully thì bảng đầu ra sẽ có dạng là
- Các tabs sẽ trở thành dòng, không còn tabs tháng 1, tháng 2, ... tháng n nữa.
Mỗi dòng sẽ là
Tên Nhân Viên + Mã Số + Tháng + Dữ liệu tháng

Bấy giờ thớt muốn Partly Unpivot bảng đầu ra
- Tức là vẫn còn giữ các tabs tháng 1, tháng 2, ... tháng n
- Nhưng lúc cross-tab thì không đặt cùng hàng mà sang hàng khác (trái với luật pivot)
- Nói cách khác, dữ liệu tháng 2 không nằm cùng dòng với dữ liệu tháng 1, mà nằm ở dòng kế tiếp. Nếu có n tháng thì mỗi trị pivot (Mã + Tên NV) sẽ có n dòng.
 
Cám ơn bác @SA_DQ và rất @doredore1988 nhiều ạ! Em làm được rồi ạ
Bài đã được tự động gộp:

Ý của thớt,theo thuật ngữ kỹ thuật là:
- Pivot theo người, Tên Nhân Viên + Mã Số.
- Cross-Tabbed theo tháng.
Đó là mẫu Full Pivot, bảng đầu vào

Nếu Unpivot Fully thì bảng đầu ra sẽ có dạng là
- Các tabs sẽ trở thành dòng, không còn tabs tháng 1, tháng 2, ... tháng n nữa.
Mỗi dòng sẽ là
Tên Nhân Viên + Mã Số + Tháng + Dữ liệu tháng

Bấy giờ thớt muốn Partly Unpivot bảng đầu ra
- Tức là vẫn còn giữ các tabs tháng 1, tháng 2, ... tháng n
- Nhưng lúc cross-tab thì không đặt cùng hàng mà sang hàng khác (trái với luật pivot)
- Nói cách khác, dữ liệu tháng 2 không nằm cùng dòng với dữ liệu tháng 1, mà nằm ở dòng kế tiếp. Nếu có n tháng thì mỗi trị pivot (Mã + Tên NV) sẽ có n dòng.
Ý của em đơn giản như 2 bác trên hướng dẫn thôi ạ. Chứ không cao như này đâu ạ. Cám ơn bác ạ!
 
Nếu có n tháng thì mỗi trị pivot (Mã + Tên NV) sẽ có n dòng.
Cấu trúc này thì data cũng không phải, mà báo cáo cũng không phải.
- Nếu dùng nó như data nguồn để tính toán thì sẽ phải dùng công thức khủng hoặc VBA (lại lên ngôi)
- Nếu dùng nó như báo cáo thì khó xem và in tốn giấy chứ chả tích sự gì
- Dùng để vẽ biểu đồ theo tháng thì so với bảng ban đầu chả khác gì. Vẽ biểu đồ tròn thì vô phương.
 
...
Ý của em đơn giản như 2 bác trên hướng dẫn thôi ạ. Chứ không cao như này đâu ạ. Cám ơn bác ạ!
Pivot và Unpivot, Cross-tabbed table là căn bản của xây dựng bảng tính và phân tích dữ liệu.
Chúng chỉ là bậc trung. Người lười học thống kê dữ liệu mới lấy cớ chúng là dòng cao cấp.
Sử dụng Excel mà không biết hình dạng của Pivot Table là kiến thức hạng sơ đẳng chứ chưa phải là trung.

Ở bài #11, tôi chỉ giải thích cho các bạn có nhu cầu học phân tích dữ liệu sự khác biệt giữa Pivot table và Partly Pivot.
 
Web KT

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

Back
Top Bottom