Vba ile PivotTable' da istediğimiz alanı filtreleme

Katılım
8 Temmuz 2018
Mesajlar
13
Excel Vers. ve Dili
TR
Merhabalar,
Aşağıdaki kod ile aynı sayfada bulunan tüm Pivot lar da tek seferde filtreleme yapabiliyorum.
E58 hücresinde ki değeri referans alarak filtreleme yapıyor. Mesela 10 yazarsam ilk 10 değeri görüyorum.
Kodun çalışmasıyla ilgili bir sorun yok, yalnızca pivotta birden fazla değer varsa her zaman ilk alana ait değeri alıp filtreleme yapıyor.
Örneğin 1.değer alanı hedef, 2.değer alanı gerçekleşen, 3.değer alanı gerçekleşen oranıysa, kod ile yalnızca 1.değer alanını filtreleyebiliyorum. Ama benim istediğim 3.değer alanına göre filtreleme yapmak. Çok araştırdım denedim ancak ben bir yol bulamadım. Yardımcı olabilirseniz çok sevinirim..


Kod:
Option Explicit

Private Sub Worksheet_Change _
  (ByVal Target As Range)
Dim ws As Worksheet
Dim wsL As Worksheet
Dim pt As PivotTable
Dim pf As PivotField
Dim pfD As PivotField
Dim rngType As Range
Dim rngTypeSel As Range
Dim rngNum As Range
Dim lType As Long

If Intersect(Target, [E58]) Is Nothing Then Exit Sub
If [E58] = "TOP 10" Then
    Rows("77:173").EntireRow.Hidden = True
ElseIf [E58] = "ALL" Then
    Rows("77:173").EntireRow.Hidden = False
Else
    MsgBox "İşlem Yapılmadı"
End If


On Error GoTo errHandler

Set ws = ActiveSheet
Set wsL = Worksheets("Lists")
Set rngType = ws.Range("TypeSel")
Set rngTypeSel _
  = wsL.Range("TypeValSel")
Set rngNum = ws.Range("NumSel")

Select Case Target.Address
  Case rngType.Address, _
    rngNum.Address
      Application.ScreenUpdating = False
      Application.EnableEvents = False
For Each pt In ws.PivotTables
  Set pf = pt.RowFields(1)
  Set pfD = pt.DataFields(1)
  pf.ClearAllFilters
  If rngNum.Value > 0 And _
        rngTypeSel > 0 Then
    pf.PivotFilters.Add _
        Type:=rngTypeSel.Value, _
        DataField:=pfD, _
        Value1:=rngNum.Value
  End If
Next pt


End Select

exitHandler:
  Application.ScreenUpdating = True
  Application.EnableEvents = True
  Exit Sub
    

errHandler:
  MsgBox "Filtre Uygulanamadı"
  Resume exitHandler
End Sub
 
Katılım
8 Temmuz 2018
Mesajlar
13
Excel Vers. ve Dili
TR
Yanıtın, uzman için kolay ancak uzman olmayan için gerçekten karmaşık olduğunu düşünüyorum. Belki burada soruyu cevaplayabilecek yetkinlikte birilerini bulabileceğimi umuyorum. Yardımcı olabilecek biri çıkarsa çok sevinirim.
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
Pivot table oluşturmadan, kodlarınızı denemeden yazıyorum
Set pfD = pt.DataFields(1) yerine
Set pfD = pt.DataFields(2)
yazınca istediğiniz oluyor mu dener misin?
 
Katılım
8 Temmuz 2018
Mesajlar
13
Excel Vers. ve Dili
TR
Pivot table oluşturmadan, kodlarınızı denemeden yazıyorum
Set pfD = pt.DataFields(1) yerine
Set pfD = pt.DataFields(2)
yazınca istediğiniz oluyor mu dener misin?

Üstad Allah senden razı olsun. Ben bunu 2 gündür bir çok yöntemle birlikte denedim ve bir türlü olmadı. Kendi dosya ve datalarımı paylaşamayacağım için farkı verilerle ayrı yeni bir excel dosyası oluşturdum size göndermek üzere, dosya üzerinden daha iyi görebilesiniz durumu diye. Ancak göndermeden daha önce denediğim ve yukarıda yazdığınız değişikliği yaptım ve oldu :) Gerçekten inanılmaz.
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
Bilmem halen denemedim.
Siz yazın ve deneyin. Bence olacaktır
Datafields(Range("C2")
 
Katılım
8 Temmuz 2018
Mesajlar
13
Excel Vers. ve Dili
TR
Bilmem halen denemedim.
Siz yazın ve deneyin. Bence olacaktır
Datafields(Range("C2")
Denedim olmadı, sizin için örnek bir dosya hazırladım, vakit bulup bakabilirseniz belki. Dilerseniz aşağıdaki linkten indirebilirsiniz.
Trend sayfası C2 hücresi açılır liste orada ki seçime göre Lists sayfasında E2 hücresinden değerin neye göre filtreleyeceğini belirleniyor.
Sonra Trend sayfasında C3 hücresinde yazılı değeri ölçü alarak filtreleme yapıyor. Mesela ben burada Küçüktür filtrelemesini yaptırıyorum.

Datafields(2) değerini Trend sayfasında ki F2 hücresinden aldırmaya çalışıyorum.

 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
Dener misin

C++:
          pfNo = Range("F2")
          Set pfD = pt.DataFields(pfNo)
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
Mevcut dosyanızdaki Pivot Table yenikeyerek denediniz mi?
Zira Raw isimli sayfanızdaki verilerle tablonuz eşleşmiyor.
 
Katılım
8 Temmuz 2018
Mesajlar
13
Excel Vers. ve Dili
TR
Mevcut dosyanızdaki Pivot Table yenikeyerek denediniz mi?
Zira Raw isimli sayfanızdaki verilerle tablonuz eşleşmiyor.
Öyle de denedim olmadı ancak daha önce Dim pfNo As Range olarak denemiştim, Integer olarak deneyip kontrol ettim ve oldu.

Gerçekten güzel yol gösterdiniz, çok teşekkür ederim desteğinize..
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
Rica ederim. Kolay gelsin.
 
Üst