Daten Konsolidieren - Spalten ausblenden. Pivot?

Hallo,

Beispielhaft sei folgende Datei

http://www.herber.de/bbs/user/74418.xls

Ich habe hierbei folgendes Problem:

Ich möchte eine Methode haben, wie ich all die Produkte (Spalten) ausblenden kann, in denen das Material X nicht verwendet wird

Wähle ich z.B. Materialname „name 12“ aus, soll nur die Spalte „O“ angezeigt werden (die, wo das X ist)

Die Originaldatei ist wesentlich größer und es wird dadurch sehr unübersichtlich wenn man sich immer erst durch die Datei scrollen muss, bis man das „X“ gefunden hat

Ich denke eigentlich das ganze müsste mit einer Pivot Tabelle funktionieren aber leider kenne ich mich damit gar nicht aus und würde mich über Unterstützung freuen

Vielen Dank im Voraus

Hallo,

in die Tabelle ein Feld anklicken und auf Pivottabelle gehen.
Wenn sich der Assi öffnet, kannst Du sofort auf Fertig klicken.

Nun in der Pivottabelle, ziehst Du die Materialnamen in das Seitenfelder… (ganz oben) und die einzelnen Materialnummern in Datenfelder….

Nun kannst Du oben bei Materialname immer auswählen welches Material Du gerne hättest und dort wo in der Tabelle ne 1 steht, da is es drin.

VG René

Hallo Rene,

das ist soweit korrekt, aber durch diese Methode sehe ich nur in wievielen Produkten das besagte Material drin ist
Ich will aber nicht wissen in wievielen sondern will angezeigt bekommen in welchen

VG
Stefan

Hallo,

schon mal gestestet?

VG René

Hi,

ja schon gestest
Ich hab dann eine Spalte „Ergebnis“ und da steht dann 1

das heißt das material wird in einem produkt verarbeitet, ich sehe aber nicht in welchem

wenn ich dann einen doppelklick dadrauf mache, öffnet er mir in einem neuen tabellenblatt das material aber wieder mit allen produkten und ich muss mir das produkt dann wieder raussuchen

dann kann ich aber auch alles direkt in einer großen tabelle lassen

Hi,

kannst Du mal ne Bsp.-Datei mir der Pivottabelle posten, denn bei mir zeigt er alle Produkte und daneben ne 1, wenn in diesen vorhanden?
(im xls Format bitte!)

VG René

hier schau mal
http://www.herber.de/bbs/user/74425.xls
evtl hab ich die tabelle auch falsch gemacht aber habs eigentlich so gemacht wie du das geschrieben hattest

oh ha…mein Fehler, es sollten alle Produktnummern in die Datenfelder!

sorry!

VG René

Hallo Rene,

problem bei der Sache ist, die Originaldatei hat über 1500 Produktnummern und man müsste jedes Produkt einzeln in den Datenbereich packen

Grüße
Stefan

problem bei der Sache ist, die Originaldatei hat über 1500
Produktnummern und man müsste jedes Produkt einzeln in den
Datenbereich packen

Hallo Stefan,

passe dir nachfolgendes Makro an. Es ist getestet in XL 2000 und XL 2007. Es erzeugt diese Pivot:

http://www.image-load.net/show/img/kVXFjL6OD1.jpg

Gruß
Reinhard

In ein Standardmodul, Modul1 o.ä.
Wenn du nicht klarkommst, hier deine Mappe mit Pivot:
http://www.file-upload.net/download-3363047/Pivottab…

Option Explicit

Sub PivotErstellen()
Dim Zei As Long, Spa As Long, maxSpa As Long, PTName As String, Anz As Integer
Dim wks1 As Worksheet
On Error GoTo hell
Application.ScreenUpdating = False
Anz = ActiveWorkbook.PivotCaches.Count + 1
PTName = "PivotTable" & Anz
With Workbooks("Pivottabelle.xls")
 Set wks1 = .Worksheets("Tabelle1")
 wks1.Activate
 maxSpa = wks1.Cells(2, Columns.Count).End(xlToLeft).Column
 Zei = wks1.Cells(Rows.Count, 1).End(xlToLeft).Row
 .PivotCaches.Add(SourceType:=xlDatabase, SourceData:="Tabelle1!R2C1:R" & Zei \_
 & "C" & maxSpa).CreatePivotTable TableDestination:="", TableName:=PTName
 .ActiveSheet.Name = "Pivot" & Anz
 With .Worksheets("Pivot" & Anz)
 .PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
 .Cells(3, 1).Select
 .PivotTables(PTName).SmallGrid = False
 With .PivotTables(PTName).PivotFields("Materialname")
 .Orientation = xlPageField
 .Position = 1
 End With
 For Spa = 4 To maxSpa
 With .PivotTables(PTName).PivotFields(wks1.Cells(2, Spa).Value)
 .Orientation = xlDataField
 .Position = Spa - 3
 End With
 Next Spa
 End With
 Select Case Application.Version
 Case "9.0" ' Excel 2000
 Application.CommandBars("PivotTable").Visible = False
 Case "12.0" ' Excel 2007
 .ShowPivotTableFieldList = False
 Case Else
 'Nix
 End Select
End With
hell:
Application.ScreenUpdating = True
If Err.Number 0 Then MsgBox Err.Number & vbCr & Err.Description
End Sub

Hallo Reinhard,

ich hab dein Modul mal ion meine Exceltabelle kopiert aber leider klappt es nicht so wirklich

ich erhalte dauernd ein fenster mit folgender Meldung

„9
Index außerhalb des gültigen Bereichs“

Desweiteren gibt es eine Möglichkeit in der Pivottabelle nur die Produkte anzuzeigen die „betroffen“ sind und die anderen nicht?

Wähle ich z.B. Materialname „name 12“ aus, soll nur die Spalte
„O“ angezeigt werden (die, wo das X ist)

Hallo Sportsman
Ich habe folgendes Makro

Sub ausblenden()
Dim r, c, p
r = Selection.Row
c = Selection.Column
If r "x" Then Columns(c).EntireColumn.Hidden = True
 c = c + 1
Wend
End Sub

Wenn Du die Zelle C14 („Name 12“) markierst und das Makro startest, werden alle Spalten ausgeblendet ausser Spalte O. Du kannst auch irgendeine Zelle in Zeile 14 markieren und das Makro starten, es erscheint nur Spalte O.

Um wieder alle Spalten einzublenden markiere irgendeine Zelle in den Zeilen 1 oder 2 (mit den Spalten-Ueberschriften) und starte das Makro.

Ich habe eine Datei mit dem Makro hochgeladen:
http://www.file-upload.net/download-3365658/74425_te…
Um das Makro zu starten kannst Du da auch die Tastenkombination CTRL-j drücken.

Wichtig ist noch folgendes: Gemäss Deiner Datei gehe ich von den Spalten A:R aus. Wenn Du mehr Spalten hast, müsstest Du das im Makro anpassen: In der 6. Zeile des Makros.

Und: Spalte R ist die 18. Spalte. Wenn Du mehr Spalten hast, müsstest Du auch folgendes anpassen, der Anzahl Deiner Spalten entsprechend:
While c

Hallo Niclaus,

das schaut auf jeden Fall schonmal gut aus. Eine Frage hätte ich

Ist es nicht möglich innerhalb des Macros mit einer For Schleife zu arbeiten die automatisch alle Spalten bis zum Ende durchgeht? In meiner Originaldatei sind alle Spalten bis „IVB“ belegt. Ganz unabhängig davon ist dies nur eine Datei und es werden wohl auch noch andere Dateien folgen die teils größer teils kleienr sind.

Grüße
Stefan

Ist es nicht möglich innerhalb des Macros mit einer For
Schleife zu arbeiten die automatisch alle Spalten bis zum Ende
durchgeht? In meiner Originaldatei sind alle Spalten bis „IVB“
belegt. Ganz unabhängig davon ist dies nur eine Datei und es
werden wohl auch noch andere Dateien folgen die teils größer
teils kleienr sind.

Hallo Stefan
Das wird ja ewig dauern, das Makro für 6658 Spalten laufen zu lassen.
Man müsste für jede Zeile die zuletzt besetzte Zelle eruieren können, das wäre dann wahrscheinlich weniger zeitintensiv.
Dafür muss ich weitergeben an Reinhard :wink:)
Viele Grüsse
Niclaus

Ist es nicht möglich innerhalb des Macros mit einer For
Schleife zu arbeiten die automatisch alle Spalten bis zum Ende
durchgeht? In meiner Originaldatei sind alle Spalten bis „IVB“
belegt.

Hallo Stefan

Versuchs mal mit diesem Makro

Sub ausblenden()
Dim r, c, p, c1, clast
Application.ScreenUpdating = False
clast = Range("A1").SpecialCells(xlCellTypeLastCell).Column
'Die Spaltennummer der zuletzt benutzen Zelle
r = Selection.Row
c = Selection.Column
If r "x" Then Columns(c).EntireColumn.Hidden = True
c = c + 1
Wend
Application.ScreenUpdating = True
End Sub

Bei mir klappts auch mit 6658 Spalten - und dauert gar nicht so lange!
Grüsse Niclaus

Hallo Sportsman,

ich hab dein Modul mal ion meine Exceltabelle kopiert aber
leider klappt es nicht so wirklich
ich erhalte dauernd ein fenster mit folgender Meldung
„9 Index außerhalb des gültigen Bereichs“

anbei war ja auch eine bei mir funktionierende Mappe, funktioniert die bei dir auch?

Die Fehlermeldung deutet darauf hin daß im Code noch namen angepasst werden müssen.
Wenn du in deiner Mappe kein Blatt hast was „tabelle4“ heißt kommt dieser Fehler wenn Excel im Code auf worksheets(„tabelle4“) stößt.

Lade mal die mappe hoch.

Desweiteren gibt es eine Möglichkeit in der Pivottabelle nur
die Produkte anzuzeigen die „betroffen“ sind und die anderen
nicht?

Sorry, ich habe von Pivottabellen nicht die geringste Ahnung :smile:
Ich habe nur das umgesetzt in Vba was Renè sagte.
D.h. René müßte mir „dolmetschen“ was du da willst, vielleicht auch du wenn du einfach ein makro aufzeichnest während du komplett eine PT erstellst nach deinen Wünschen und hier zeigst.

Und da fügst du nur 2-3 Produkte ein. Ich seh dann den Code und versuche ihn für alle produklte die in zeile 2 stehen anzupassen usw.

Gruß
Reinhard

Hier eine verbesserte Version

Sub ausblenden()
Dim r, c, p, c1, clast, cadr
Application.ScreenUpdating = False
cadr = Selection.Address
clast = Range("A1").SpecialCells(xlCellTypeLastCell).Column
'Die Spaltennummer der zuletzt benutzen Zelle
r = Selection.Row
c = Selection.Column

Cells.Select
Selection.EntireColumn.Hidden = False
Range(cadr).Select

If r "x" Then Columns(c).EntireColumn.Hidden = True
c = c + 1
Wend
Application.ScreenUpdating = True
End Sub

In der Version vorher musst Du immer wieder alle einblenden, damit Du die neue Auswahl richtig hinkriegst. In dieser Version hier ist das nicht mehr nötig.

Grüsse Niclaus

Grüezie Niclaus,

Das wird ja ewig dauern, das Makro für 6658 Spalten laufen zu
lassen.

je nach Code aber grundsätzlich zustimm, Vba ist langsam.

Man müsste für jede Zeile die zuletzt besetzte Zelle eruieren
können,

„zuletzt besetzte Zelle“? Ich hab das sowieso nicht kapiert warum man da mit Activecell arbeiten müßte.

Deshalb Nachfrage an den Sportsman, du willst in Spalte C, genauer in C2 mit Autofilter etwas auswählen, daraufhin soll nur die Spalte mitangezeigt werden wo auch diese Auswahl in D:R einen Wert hat?

Okay, Autofilter löst leider kein direktes Vba-Ereignis aus.
Deshalb muß man tricksen.
Vergib über Einfügen—Namen (in XL 2007 mußte suchen wo der Namensmanager ist) den Namen „Hoehe“ für
=ZELLE.ZUORDNEN(17;Tabelle1!S1)
und schreibe in S1
=Hoehe
und kopiere es nach unten.

Hoehe ist die Zeilenhoehe der Zelle in der es steht. Wenn also nun der Autofilter Zeilen ausblendet macht er dies indem er die Zeilenhöhe auf 0 setzt.
Daraufhin wird =Hoehe automatisch neu berechnet. Und schon haben wir mit Vba ein auswertbares Ereignis, das _Calculate-Ereignis.

Nun der Code, der gehört in das Modul des Blattes Tabelle1.

Option Explicit

Private Sub Worksheet\_Calculate()
Dim ZeiSicht As Range
ActiveSheet.Columns.Hidden = False
Set ZeiSicht = ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible)
If Not ZeiSicht.Rows.Count = ActiveSheet.Cells(Rows.Count, 3).End(xlUp).Row Then
 Range(Split(ZeiSicht.Address, ",")(1)).SpecialCells(xlCellTypeBlanks).EntireColumn.Hidden = True
End If
End Sub

PS: wie ersichtlich überprüfe ich die Anzahl der sichtbaren Zeilen um zu wissen ob gefiltert wurde. Ich meine aber zu wissen daß man auch da irgendwie mit
Msgbox Activesheet.Autofilter.Mode *geraten* o.ä. das Gleiche feststellen kann, weiß jmd. die Syntax dafür? danke

Gruß
Reinhard

Hallo Sportsman,

ich hab dein Modul mal ion meine Exceltabelle kopiert aber
leider klappt es nicht so wirklich
ich erhalte dauernd ein fenster mit folgender Meldung
„9 Index außerhalb des gültigen Bereichs“

anbei war ja auch eine bei mir funktionierende Mappe,
funktioniert die bei dir auch?

ja due funktionierte bei mir auch
ich hab dann das Modul in meine Excel File geladen und da gings dann nicht

Die Fehlermeldung deutet darauf hin daß im Code noch namen
angepasst werden müssen.
Wenn du in deiner Mappe kein Blatt hast was „tabelle4“ heißt
kommt dieser Fehler wenn Excel im Code auf
worksheets(„tabelle4“) stößt.

Lade mal die mappe hoch.

hab ich gemacht :smile:

Desweiteren gibt es eine Möglichkeit in der Pivottabelle nur
die Produkte anzuzeigen die „betroffen“ sind und die anderen
nicht?

Sorry, ich habe von Pivottabellen nicht die geringste Ahnung

-)

Ich habe nur das umgesetzt in Vba was Renè sagte.
D.h. René müßte mir „dolmetschen“ was du da willst, vielleicht
auch du wenn du einfach ein makro aufzeichnest während du
komplett eine PT erstellst nach deinen Wünschen und hier
zeigst.

Und da fügst du nur 2-3 Produkte ein. Ich seh dann den Code
und versuche ihn für alle produklte die in zeile 2 stehen
anzupassen usw.

Gruß
Reinhard

also hab die Mappe mal hochgeladen

nicht wundern hab da auch schon selber bissel rumgespielt mit Makros, aber leider klappt diese Lösung auch nicht ganz :smile: (auf meinem Laptop auf der Arbeit braucht der Jahre um meine „zaehlensichtbar“ funktion für alle Spalten durchzuführen und das ausblenden klappt auch nicht für alle irgendwie :smile:

Hier das File --> http://www.file-upload.net/download-3366927/74422.xl…

Die Originaldatei hat allerdings noch mehr Spalten (Spalten gehen bis „IVB“)
was ich jetzt genau will:

Ich will ein Bestimmtes Material auswählen und Excel soll mir alle Produkte anzeigen (und zwar nur die), in denen dieses Material verwendet wird (gekennzeichnet durch das „x“ beim jeweiligen Produkt

Da es bei der Spaltenanzahl zu unübersichtlich wird brauche ich halt eine Lösung, in der ich nur die relevanten Produkte angezeigt bekomme (denn das werden teilweise immer noch genug sein)

Hoffe das es irgendwie eine Lösung für mein Problem gibt :smile:

Grüße
Stefan

Hi Reinhard:

ActiveSheet.AutoFilterMode

True, wenn die Dropdownpfeile für AutoFilter momentan im Blatt angezeigt werden. Diese Eigenschaft ist von der FilterMode-Eigenschaft unabhängig. Boolean-Wert mit Lese-/Schreibzugriff.

FilterMode-Eigenschaft

True, wenn sich das Arbeitsblatt im Filter-Modus befindet. Schreibgeschützter Boolean-Wert.

M.