Góp ý, thắc mắc về topic "Ứng dụng VBA trong Pivot Table"

Liên hệ QC
Gởi nmhung,
Code của nmhung hình như dư 1 đoạn cuối từ For Each Rng2 trở về sau?
Dạ, đoạn code này dùng để tìm tên khi mà Mã Chủ Hàng bị gộp lại, nếu bình thường thì dư, như nó chưa tổng quát Thầy ah
Mà sao khi em gộp mà chủ hàng bên sheet Pivottalbe thì bên sheet Phuong an bi lỗi như hình sau đây là bị sao vậy Thầy

hinh1.jpg
hinh2.jpg
 
Chỉnh sửa lần cuối bởi điều hành viên:
Cái vụ nhấn dấu - cho thành + của 2007 và 2010, bên 2003 không có (không phải group nha, là Hide detail). Khi Hide detail thì field "PhuongAn" bị dấu đi, hàm GetPivotData tìm không ra (ở 2 tham số cuối). Nên lỗi là #Ref#: tham chiếu không tìm thấy.

GETPIVOTDATA(data_field,pivot_table,field1,item1,field2,item2,..., field14,item14)

Ở đây là field 3.
 
Gời nmhung,
Theo tôi suy đoán thì L_E sẽ không group, không Hide/Unhide gì cái Pivot table đâu, Sheet P-An đã chuẩn bị 48 dòng vì đã dự đoán dữ liệu chỉ có 1 số nhóm nhất định. Do đó dùng công thức và hàm GetPivotDadta là ổn rồi.

Còn nếu bạn muốn nghiên cứu thêm, thì xem file kèm theo: Không công thức, không VBA, chỉ là thủ thuật Pivot và dấu dòng, không sợ Group/Ungroup, Hide/Unhide gì nữa:
Insert 3 calculated field:
SumSLDB ='SL-GT' +'SL-NK' +'SL-DV'
SumTLDB ='TL-GT' +'TL-NK' +'TL-DV'
Xa =TLXaXe +TLXaXL +TLXaSM +TLXaNK

Cấu trúc có thể khác file gốc 1 tí ti về thứ tự cột Phuongan và cột lược khai, nhưng đây chỉ là thí dụ mẫu.
 

File đính kèm

  • DayPivot2.rar
    10.3 KB · Đọc: 60
Lần chỉnh sửa cuối:
Chuyển dữ liệu từ Pivot bằng VBA

Pivot đối với tôi còn rất mới mẽ, tuy nhiên sau khi đọc cuốn sách hướng dẫn Pivot 2003 của Thầy PTM tôi rất thích và bắt đầu nghiên cứu về nó.

Cám ơn Thầy PTM đã tận tình hướng dẫn hổm rày. Nay dùng VBA để chuyển dữ liệu mà qua những File Thầy gửi lên, nghiên cứu rồi viết thành Code.

Xin Thầy và các Anh, Chị vui lòng xem qua, nếu code thừa, thiếu gì xin được bổ sung ạ!

PHP:
Private Sub PhucHoi()
  With BangPhuongAn
    .AutoFilterMode = False
    .Range("A9:I48, L9:O48, Q9:Q48").ClearContents
    BangPivot.[X1:Z4].Copy .[A9]
  End With
End Sub

PHP:
Sub TinhPhuongAn()
  With Application
    .EnableEvents = False: .ScreenUpdating = False
    .Calculation = xlCalculationManual
    On Error GoTo ExitSub
    Dim MaChuHang As String, MaCH As String, PhuongAn As Range, MyRng As Range
    Dim SoHangMS As Byte, SoHangPA As Byte, i As Byte, a As Byte
    Dim Ham: Set Ham = .WorksheetFunction
 
    With Range(CSDL1.[A4], CSDL1.[A65536].End(xlUp)).Resize(, 20)
      If .Rows.Count = 1 Then CSDL2.[A4:T5].Name = "NguonPivot" Else .Name = "NguonPivot"
    End With
    With BangPivot
      .PivotTables("PivotTable1").PivotCache.Refresh
      .[T:V].Clear
    End With
    Call PhucHoi ''<--- XONG SE XOA, hoac chuyen mã cho BangPhuongAn
    If BangPhuongAn.[A8] <> "" Then
      With BangPhuongAn
        Range(.[A9], .[A48].End(xlUp)).Resize(, 3).Copy BangPivot.[T1]
        .Range("A9:I48, L9:O48, Q9:Q48").ClearContents
      End With
      With BangPivot
        SoHangMS = .[T65536].End(xlUp).Row
        For i = 1 To SoHangMS
          MaCH = .Range("T" & i)
          MaChuHang = .[A1]
          .PivotTables("PivotTable1").PivotFields(MaChuHang).CurrentPage = MaCH
          Set PhuongAn = Range(.[B5], .[B65536].End(xlUp))
          SoHangPA = Ham.CountA(PhuongAn)
          Set MyRng = BangPhuongAn.[A48].End(xlUp)
          With PhuongAn
            .Copy: MyRng.Offset(1, 16).PasteSpecial 3
            .Offset(, 1).Resize(, 6).Copy: MyRng.Offset(1, 3).PasteSpecial 3
            .Offset(, 7).Resize(, 4).Copy: MyRng.Offset(1, 11).PasteSpecial 3
          End With
          .Range("T" & i).Resize(, 3).Copy: MyRng.Offset(1).PasteSpecial 3
          If SoHangPA >= 2 Then
            For a = 2 To SoHangPA
              BangPhuongAn.[A48].End(xlUp).Offset(1) = BangPhuongAn.[A48].End(xlUp).Value
            Next
          End If
        Next
        .PivotTables("PivotTable1").PivotFields(MaChuHang).CurrentPage = "(All)"
        .[T:V].Clear
      End With
    End If
  With BangPhuongAn
    .[A8:A48].AutoFilter 1, "<>", , , False
    ''.[A:A].EntireColumn.Hidden = True
  End With
ExitSub:
    .Calculation = xlCalculationAutomatic
    .ScreenUpdating = True: .EnableEvents = True
  End With
End Sub
 

File đính kèm

  • ThucHanhPivotVBA.rar
    25.2 KB · Đọc: 61
Lần chỉnh sửa cuối:
Trong các mẫu báo cáo của Anh Ptm0412 em thấy có các dòng kẻ bao quanh, đó hình như là Anh Ptm0412 đặt tên vùng in Print_Area, và khi dữ liệu Pivot table thay đổi thì nó cũng thay đổi theo. Cách làm như thế nào vậy các Bác. Em cảm ơn nhiều ạ!
 
Nhờ ptm0412 làm cho bài này với ( mình đã làm theo bạn hướng
dẫn đợt trước mà ko được )
mình cần bạn giúp:
1, kẻ dòng giống như trong File
2, tự động điền STT
3, tạo chữ ký
4, đỉa chỉ Download: http://laoupload.com/WGZ8D6V13MVC/Baocao_PV.xls.html
( bạn thông cảm,vì ko vào DD bằng PC được )
 
Dữ liệu của bạn không chuẩn. Tôi đã nhắc đi nhắc lại ở khắp nơi về điều này: Pivot table, ADO, MSQuery, bài này bài kia, trong sách, trong bài viết:
- Tiêu đề là 1 dòng đơn, không merge cell,
- Tiêu đề không được trùng và không được bỏ trống: ເລກທີ có 4 cột, ລົງວັນທີ có 3 cột, để trống rất nhiều tên cột
- Không được có dòng trống xen kẽ, hoặc dòng thứ tự cột.

Ngoài ra, tôi không biết chữ Lào nên không biết A1, A2, ... lấy từ cột chữ Lào nào
Tên thì tôi đoán (và test bằng thủ thuật riêng) là ຊື່ເຈົ້າຂອງຕອນດິນ, Diện tích, thì đoán và test sẽ là tổng các cột từ S đến AW, thể hiện trên cột AX, mà AX lại chẳng thấy công thức SUM?

Tóm lại, tôi bó tay
 
Lần chỉnh sửa cuối:
Hôm qua,sau khi hỏi thì ngồi mày mò lại bài của bạn và đã làm được khâu STT và kẻ dòng cho cột A.
Còn vấn đề muốn bạn giúp là:
1, làm cho ròng kẻ thành ______thay vì...........
2, kẻ dòng cho các ô nằm bên phải của Pivot,ví dụ: thêm 4 cột.
3, chèn chữ ký dưới Pivot.
Cảm ơn bạn.
 
Rất cảm ơn ptm0412 đã giải thích cặn kẽ về những điều cơ
bản khi muốn làm việc với PV.
Nhưng nghe bạn nói thì rễ,khi bắt tay vào làm nó lại khó
thế ( chắc là mình chưa hiểu được là PV có thể làm được
những cái gì )
Nhân đây nhờ bạn làm giúp cho khamha theo kiểu ngược lại ( theo
mình chắc là rễ hiểu hơn )
---> Bạn xem bản báo cáo của mình và sắp xếp thứ tự trong
Data thế nào để thuận tiện cho việc sử dụng PV<---
LinkDownload: http://laoupload.com/TE5T203HOKUG/BaoCao.xls.html

* Giá của từng loại đất nằm trong Sheet"DLN"
 
Nếu chỉ nói về borders thì sửa code border như sau:
PHP:
Sub BorderSelection()

On Error Resume Next
    With Selection
    For i = 7 To 12
         .Borders(i).LineStyle = 1
         .Borders(i).Weight = 1
    Next
    End With
End Sub
 
Lần chỉnh sửa cuối:
With ActiveSheet.PivotTables("<PivotTableName>").PivotFields("<FieldName>")
For
i = 1 To .PivotItems.Count
With
.PivotItems(i)
.
Visible = (Condition1 And/Or Condition2 And/Or Condition3 ...)
End With
Next
End With

Code trên là của thầy PTM để Filter multi selection trong PivotTable.
Nhưng em làm thử không được, với lại em không hiểu chỗ
(Condition1 And/Or Condition2 And/Or Condition3 ...)

Mong thầy PTM viết code filter cho pivot từ ngày....đến ngày... dùm em.

Em xin cảm ơn. (có file mẫu kèm theo).
 
(Condition1 And/Or Condition2 And/Or Condition3 ...) là các điều kiện của bạn. Ở đây là 2 điều kiện

(CDate(.Value) <= [H3] And CDate(.Value) >= [H2])

PHP:
Sub abc()
With ActiveSheet.PivotTables(1).PivotFields("Ngày")
For i = 1 To .PivotItems.Count
    With .PivotItems(i)
        .Visible = (CDate(.Value) <= [H3] And CDate(.Value) >= [H2])
    End With
Next
End With

End Sub

Ghi chú: Nhớ lưu về dạng xlsm.
 
Thầy PTM ơi, code đã lọc được nhiều ngày rồi.
Nhưng mà nó cứ lọc ngày lộn xộn tùm lum.
Em nghĩ chắc là do cái kiểu DATE. (em thấy trong code có CDate rồi mà vẫn bị).

Thầy xem lại trong file mẫu dùm em nhé.

Em xin cảm ơn.
 
VBA nhận dạng ngày trong pivot table nếu ngày <13 là tháng và nếu ngày >=13 nhận dạng đúng là ngày.

Định dạng trường "Ngay" là [$-409]d-mmm-yy;@ hoặc long date English sẽ hết lỗi. Muốn vậy nhấn chuột phải vào ô B1, field setting, chọn format number

PHP:
Sub abc()
Application.ScreenUpdating = False
On Error Resume Next
With ActiveSheet.PivotTables("NHAP").PivotFields("NGAY")
For i = 1 To .PivotItems.Count
    With .PivotItems(i)
        .Visible = CDate(.Value) <= [H3] And CDate(.Value) >= [H2]
    End With
Next
.PivotItems(ErrNo).Visible = False
End With

Application.ScreenUpdating = True
End Sub
 

File đính kèm

  • FILEMAUPIVOTTABLE.xlsm
    40.3 KB · Đọc: 30
VBA nhận dạng ngày trong pivot table nếu ngày <13 là tháng và nếu ngày >=13 nhận dạng đúng là ngày.

Định dạng trường "Ngay" là [$-409]d-mmm-yy;@ hoặc long date English sẽ hết lỗi. Muốn vậy nhấn chuột phải vào ô B1, field setting, chọn format number

PHP:
Sub abc()
Application.ScreenUpdating = False
On Error Resume Next
With ActiveSheet.PivotTables("NHAP").PivotFields("NGAY")
For i = 1 To .PivotItems.Count
    With .PivotItems(i)
        .Visible = CDate(.Value) <= [H3] And CDate(.Value) >= [H2]
    End With
Next
.PivotItems(ErrNo).Visible = False
End With

Application.ScreenUpdating = True
End Sub

Em xin cảm ơn thầy PTM !
 
Ứng dụng VBA trong Pivot Table

Em đang gặp một vấn đề lớn trong khi làm việc với Pivot Table, nhờ mọi người giúp đỡ

Trong sheet BCTH toi muốn lọc dữ liệu theo trường tên khách hàng, nhưng không hiểu sao không lọc được. Em có làm theo hướng dẫn trên diễn đàn nhưng không chạy được. Mong mọi người chỉ giáo
 

File đính kèm

  • TH_SL.rar
    22.4 KB · Đọc: 19
Rows("17:500").Hidden = False EndR = ActiveSheet.[B1000].End(xlUp).Row
Rows(EndR + 1 & ":" & EndR + 10).Clear

Thầy ptm ơi
Thầy chú thích cho em mấy cái này với, sao em làm cứ báo lỗi ở dòng 3 hoài.
 
Web KT
Back
Top Bottom