Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1148to1152
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Autofilter via VBA
Horst
Hallo Excel-Freaks!
Aus einer Tabelle, in der in Spalte A und B Einsen und Nullen stehen (in Spalte C bis Z stehen Gleitkommazahlen) soll mittels VBA-Code ein neues Sheet erstellt werden, in dem sämtliche Zeilen von Spalte A mit Wert "1", und auf einen neuen Sheet sämtliche Zeilen von Spalte B mit Wert "1" zusammengefasst werden. Bei Erstellung der neuen sheets sollen ältere sheets überschrieben, d.h. gelöscht werden.
Wer kann diese automatisierte Autofilter-Funktion elegant lösen?
Besten Dank vorab!
Daten - Pivotabelle - Assisten folgen. Fertig
26.03.2010 22:30:39
Ramses
Hallo
Dazu ist kein VBA-Code nötig.
Nachdem erstellen der Pivot-Tabelle Rechte Maustaste auf die Pivot-Tabelle und "Aktualisieren" Fertig.
Gruss Rainer
AW: Daten - Pivotabelle - Assisten folgen. Fertig
26.03.2010 22:39:26
Horst
und wie würde ich es machen, wenn das Aktualisieren aus einem anderen .xls heraus automatisch erfolgen soll? Kann der Autofilter grundsätzlich in eine VBA-Funktion gepackt werden? Wenn ja, bitte ien kleines Bsp. reinstellen.
AW: Daten - Pivotabelle - Assisten folgen. Fertig
27.03.2010 07:05:00
fcs
Hallo Horst,
grundsätzlich kann man per VBA-Funktionen sehr viel lösen auch die Autofilterfunktion läßt sich einbinden.
Es ist aber oft/meistens sinnvoller die in Excel oder seinen AddInns vorhandenen Bordmittel auszuschöpfen bevor man sich an VBA-Lösungen macht.
In deinem Fall ist es sinnvoll die Daten via MS-Query-Abfrage aus der Quelle in die Zieltabellenblätter zu importieren. Der Startpunkt ist im Menü Daten. Der entsprechende Assisstent führt durch die erforderlichen Schritte. Nach Auswahl der Quelle und der zu importierenden Spalten kannst du in den weiteren Schritten die Filter und Sortierung festlegen. Vorraussetzung ist natürlich, dass die entsprechende Funktionalität mit Excel/Office installiert wurde.
Gruß
Franz
Anzeige
AW: Daten - Pivotabelle - Assisten folgen. Fertig
27.03.2010 14:49:39
Horst
Hallo Franz,
da ich mit Pivottabellen bis dato noch nichts gemacht habe, bin ich etwas skeptisch ;-)) Kann das Ergebnis so einer Tabelle einfach kopiert und zur Weiterverarbeitung als .txt gespeichert werden? Gibt es eine Muster.xls, die du mal reinstellen könntest?
Was den Autofilter betrifft:
Die Spalte, nach der per Autofilter selektiert wird ist immer diesselbe, zB.: Spalte A. Es soll ein neues Tabellenblatt erstellt werden (mit dem Namen: "result"), wo das kopierte Ergebnis des Filtervorgangs als Kopie (Inhalte einfügen/Werte) drin steht und das bei jedem neuen Ausführen der VBA-Prozedur überschrieben wird. Abschließend soll das Ergebnis als .txt gespeichert werden. Eventuell kannst du nachfolgenden Code noch vervollständigen/korrigieren.
Selection.AutoFilter Field:=3, Criteria1:="1"
Range("AQ1:CD5459").Select
Selection.Copy
Sheet("result).Select
Selection.ClearContents
ActiveSheet.Paste
Besten Dank vorab!
Anzeige
AW: Daten - Pivotabelle - Assisten folgen. Fertig
27.03.2010 17:56:03
fcs
Hallo Horst,
Hier mal eine angepasste Fassung inkl. Speichern des Tabellenblatts im Textformat. Gewünschtes Format muss du durch Anpassung der als Kommentar schon eingefügten Zeilen noch festlegen.
Beim Start des Makros muss das tabellenblatt mit den zu filternden Daten aktiv sein.
Gruß
Franz
Sub ExportSpalteFilter()
Dim wks As Worksheet, wksResult As Worksheet, LastRow As Long
Dim vAuswahl As Variant, wbResult As Workbook, sDatei As String
On Error GoTo Fehler
Set wks = ActiveSheet
Set wksResult = Sheets("result")
With wksResult
.UsedRange.ClearContents
End With
With wks
If .FilterMode = True Then
If .Rows.Count  _
Cells.SpecialCells(xlCellTypeVisible).EntireRow.Rows.Count Then
.ShowAllData
End If
End If
LastRow = .Cells.SpecialCells(xlCellTypeLastCell).Row
End With
Cells(1, 1).Select
Selection.AutoFilter Field:=3, Criteria1:="1"
wks.Range("AQ1:CD" & LastRow).Copy Destination:=wksResult.Cells(1, 1)
ActiveWorkbook.Save
wksResult.Activate
'Dateinamen für Exportdatei wählen
vAuswahl = Application.GetSaveAsFilename(InitialFileName:="TextExport.Txt", _
FileFilter:="Text(*.txt),*.txt", _
Title:="Bitte Dateinamen für Text-Export-Datei auswählen/eingeben")
If vAuswahl  False Then
'Dateinamen merken
sDatei = ActiveWorkbook.FullName
Set wbResult = ActiveWorkbook
'Aktives Tabellenblatt als Textdatei speichern
'xlUnicodeText
wbResult.SaveAs Filename:=vAuswahl, FileFormat:=42
'xlUnicodeText mit lokalen Einstellungen für Dezimalzeichen und Trennzeichen
'    wbResult.SaveAs Filename:=vAuswahl, FileFormat:=42, Local:=True
'xlTextMSDOS MSDOS-Text
'    wbResult.SaveAs Filename:=vAuswahl, FileFormat:=21
'xlTextPrinter Druckertext (Zwischen Spalten werden Leerzeichen eingefügt, _
Zeichenzahl pro Zeile ist begrenzt
'    wbResult.SaveAs Filename:=vAuswahl, FileFormat:=36
'xlTextWindows Windows Text
'    wbResult.SaveAs Filename:=vAuswahl, FileFormat:=20
'xlCSV CSV-Format - mit US-Einstellungen für Dezimal- und Trennzeichen
'    wbResult.SaveAs Filename:=vAuswahl, FileFormat:=6, Local:=False
'xlCSV CSV-Format mit lokalen Einstellungen für Dezimalzeichen und Trennzeichen
'    wbResult.SaveAs Filename:=vAuswahl, FileFormat:=6, Local:=True
'xlCSVWindows CSV(Windows)
'    wbResult.SaveAs Filename:=vAuswahl, FileFormat:=23
'xlCSVWindows CSV(Windows) mit lokalen Einstellungen für Dezimalzeichen _
und Trennzeichen
'    wbResult.SaveAs Filename:=vAuswahl, FileFormat:=23, Local:=True
Workbooks.Open Filename:=sDatei
wbResult.Close savechanges:=False
End If
Err.Clear
Fehler:
With Err
Select Case .Number
Case 0 'Alles OK
Case Else
MsgBox "Fehler-Nr. " & .Number & vbLf & .Description
End Select
End With
End Sub

Anzeige
AW: Daten - Pivotabelle - Assisten folgen. Fertig
27.03.2010 20:26:34
Horst
Hallo Franz,
besten Dank!
Irgendwie filtert der Code nur die Fälle, in denen keine 1 drinsteht. Die mit Wert 1 werden gelöscht?
Wie würde der Code aussehen, wenn ich ihn aus einem anderen externen .xls heraus steuern möchte, d.h.: Code steht in der "A.xls" und soll eine Liste in der "B.xls" filtern.
Sub ExportSpalteFilter()
Dim wks As Worksheet, wksResult As Worksheet, LastRow As Long
Dim vAuswahl As Variant, wbResult As Workbook, sDatei As String
On Error GoTo Fehler
Set wks = ActiveSheet
Set wksResult = Sheets("result")
With wksResult
'.UsedRange.ClearContents
End With
With wks
If .FilterMode = True Then
If .Rows.Count  _
Cells.SpecialCells(xlCellTypeVisible).EntireRow.Rows.Count Then
.ShowAllData
End If
End If
LastRow = .Cells.SpecialCells(xlCellTypeLastCell).Row
End With
Cells(1, 1).Select
Selection.AutoFilter Field:=1, Criteria1:="1"
wks.Range("AQ1:CD" & LastRow).Copy Destination:=wksResult.Cells(1, 1)
ActiveWorkbook.Save
wksResult.Activate
'Dateinamen für Exportdatei fixieren
vAuswahl = "C:\Dokumente und Einstellungen\User\Desktop\TextExport.Txt"
If vAuswahl  False Then
'Dateinamen merken
sDatei = ActiveWorkbook.FullName
Set wbResult = ActiveWorkbook
'Aktives Tabellenblatt als Textdatei speichern
'xlUnicodeText
wbResult.SaveAs Filename:=vAuswahl, FileFormat:=42
'xlUnicodeText mit lokalen Einstellungen für Dezimalzeichen und Trennzeichen
'    wbResult.SaveAs Filename:=vAuswahl, FileFormat:=42, Local:=True
'xlTextMSDOS MSDOS-Text
'    wbResult.SaveAs Filename:=vAuswahl, FileFormat:=21
'xlTextPrinter Druckertext (Zwischen Spalten werden Leerzeichen eingefügt, _
Zeichenzahl pro Zeile ist begrenzt
'    wbResult.SaveAs Filename:=vAuswahl, FileFormat:=36
'xlTextWindows Windows Text
'    wbResult.SaveAs Filename:=vAuswahl, FileFormat:=20
'xlCSV CSV-Format - mit US-Einstellungen für Dezimal- und Trennzeichen
'    wbResult.SaveAs Filename:=vAuswahl, FileFormat:=6, Local:=False
'xlCSV CSV-Format mit lokalen Einstellungen für Dezimalzeichen und Trennzeichen
'    wbResult.SaveAs Filename:=vAuswahl, FileFormat:=6, Local:=True
'xlCSVWindows CSV(Windows)
'    wbResult.SaveAs Filename:=vAuswahl, FileFormat:=23
'xlCSVWindows CSV(Windows) mit lokalen Einstellungen für Dezimalzeichen _
und Trennzeichen
'    wbResult.SaveAs Filename:=vAuswahl, FileFormat:=23, Local:=True
Workbooks.Open Filename:=sDatei
wbResult.Close savechanges:=False
End If
Err.Clear
Fehler:
With Err
Select Case .Number
Case 0 'Alles OK
Case Else
MsgBox "Fehler-Nr. " & .Number & vbLf & .Description
End Select
End With
End Sub

Anzeige
AW: Daten - Pivotabelle - Assisten folgen. Fertig
27.03.2010 20:42:02
Horst
und gleich noch eine Frage zur Pivot-Tabelle:
Wenn in Spalte A der Wert 1 steht, sollen die Werte sämtlicher Zeilen der rechts neben A stehenden Spalten ausgegeben werden. Jetzt ist es so, dass sich das Arbeitsblatt laufend ändert, d.h. die Anzahl der Zeilen sich im Zeitverlauf ständig erhöht.
Kann eine Pivot-Tabelle damit umgehen, dass der gesamte Arbeitsblattbereich bis Spalte 65536 eingefügt wird?
Kann aus den Ergebnis einer Pivottabelle dann via VBA (wie oben) eine .txt gemacht werden?
AW: Daten - Pivotabelle - Assisten folgen. Fertig
28.03.2010 00:20:14
fcs
Hallo Horst,
zur Autofilter-Frage:
Wird den der Filter vom Makro in der richtigen Spalte gesetzt?
Makro in Datei A.xls, Daten in B.xls
Dann muss das Makro etwa wie folgt aussehen.
Sub ExportSpalteFilter()
Dim wks As Worksheet, wksResult As Worksheet, LastRow As Long, wbDaten As Workbook
Dim vAuswahl As Variant, wbResult As Workbook, sDatei As String
On Error GoTo Fehler
Set wbDaten = Workbooks("TextExport02.xls") '                            Dateiname anpaasen!!! _
Set wks = wbDaten.Worksheets(1) ' oder  auch wbDaten.worksheets("TabelleABC")
Set wksResult = ThisWorkbook.Sheets("result") 'sollte dann in der Datei mit dem Makro sein
With wksResult
'.UsedRange.ClearContents  'Warum sollen ggf. vorhandene Altdaten nicht gelöscht werden?
End With
wbDaten.Activate
wks.Activate
With wks
If .FilterMode = True Then
If .Rows.Count  _
.Cells.SpecialCells(xlCellTypeVisible).EntireRow.Rows.Count Then
.ShowAllData
End If
End If
LastRow = .Cells.SpecialCells(xlCellTypeLastCell).Row
End With
wks.Cells(1, 1).Select
Selection.AutoFilter Field:=1, Criteria1:="1"
wks.Range("AQ1:CD" & LastRow).Copy Destination:=wksResult.Cells(1, 1)
wbDaten.Save
ThisWorkbook.Activate
wksResult.Activate
ThisWorkbook.Save
'Dateinamen für Exportdatei fixieren
vAuswahl = "C:\Dokumente und Einstellungen\User\Desktop\TextExport.Txt"
vAuswahl = "C:\Users\Public\Test\TextExport.Txt"
Set wbResult = ActiveWorkbook
sDatei = ThisWorkbook.FullName
'Aktives Tabellenblatt als Textdatei speichern
'xlUnicodeText
wbResult.SaveAs Filename:=vAuswahl, FileFormat:=42
Workbooks.Open Filename:=sDatei
wbResult.Close savechanges:=False
Err.Clear
Fehler:
With Err
Select Case .Number
Case 0 'Alles OK
Case Else
MsgBox "Fehler-Nr. " & .Number & vbLf & .Description
End Select
End With
End Sub
Pivot-Tabellen:
Du kannst, wenn die Spaltentitel in Zeile 1 stehen aiúch die kompletten Spalten als Datenquelle vorgeben.
Dann muss du ggf. im Pivotbericht für ein Feld den Filter so einstellen, dass (Leer) nicht angezeigt wird.
Außerdem solltest du unter den Tabellenoptionen der Pivot-Tabelle die Option "Quelldaten mit Datei speichern" deaktivieren, da sonst die Dateigröße nach oben schnellt.
Ein Tabellenblatt mit Pivottabellenbericht kannst du als Textdatei speichern, aber das Ergebnis entspricht dann evtl. nicht deinen Wünschen. Hier solltest du als Alternative ggf. wirklich meinen ursprünglichen Vorschlag aufgreifen und mit einem per MS-Query erstellten Datenimport arbeiten. Ganz speziell, wenn du die Daten aus einer externen Exceltabelle übernehmen möchtest.
Gruß
Franz
Anzeige
AW: Daten - Pivotabelle - Assisten folgen. Fertig
28.03.2010 14:55:05
Horst
Hallo Franz,
Danke für deine Hilfe. Abschließend noch ein Frage: wenn ich das ganze nun mit Pivot-Tabellen löse, wie müsste der VBA Code aussehen, dass sich :
Die Pivottabelle automatisch aktualisiert,
Sich eine neues Arbeitsblatt über (PivotTab.) "Detail anzeigen" erstellt (das Äquivalent zum Autofilter),
Dieses dann nach Systemdatum getrennt in eine train.txt und test.txt gespeichert wird
Info: das Systemdatum steht in Spalte Z, alle Zeilen bis zum gestrigen Tag sollen in die train.txt, die vom heutigen Tag in die test.txt geschrieben werden.
AW: Daten - Pivotabelle - Assisten folgen. Fertig
28.03.2010 18:14:49
fcs
Hallo Horst,
bevor du hier immer neue Fragen und Varianten nachschiebst, hättest du dir doch wohl erst mal einen kompletten Plan machen sollen: Welche Daten hab ich, was möchte ich mit den Daten machen, wie möchte ich die Daten speichern/ausgeben.
Wie müsste der VBA Code aussehen, dass sich :
Die Pivottabelle automatisch aktualisiert,

Dazu muss du entweder ein Ereignis auswerten und in die entsprechende Prozedur die Aktualisierungsanweisung schreiben oder in ein "normales" Makro die Anweisung aufnehmen.
Code-Beispiel (Aktualisiert die 1. Pivot-Tabelle im Tabellenblatt "TabelleABC")
  Worksheets("TabelleABC").PivotTables(1).RefreshTable
Sich eine neues Arbeitsblatt über (PivotTab.) "Detail anzeigen" erstellt (das Äquivalent zum Autofilter),
Das kann ich so nicht beurteilen. Die Auswertung von Pivottabellen per VBA kann sehr komplex werden. Du änderst hier ja dann irgend eine Einstellung(Filter) in der Pivottabelle. Woher soll Excel denn wissen, dass du ausgerechnet jetzt bestimmte Daten exportieren willst? Den Export wirst du schon manuell starten müssen.
Dieses dann nach Systemdatum getrennt in eine train.txt und test.txt gespeichert wird
Info: das Systemdatum steht in Spalte Z, alle Zeilen bis zum gestrigen Tag sollen in die train.txt, die vom heutigen Tag in die test.txt geschrieben werden.

Das heißt dann, dass du 2 Tabellenblätter erstellen muss, dann am besten in jeweils einer neuen Datei, in die die Daten übertragen werden, um dann anschliessend die Text-Dateien zu erstellen.
Ich versteh auch nicht, warum du jetzt unbedingt über eine Pivot-Tabelle statt den Autofilter gehen willst, um die zu exportierenden Daten zusammenzustellen.
Die hier notwendige Unterstützung sprengt jetzt den zeitlichen Rahmen für Hilfen.
Gruß
Franz
Anzeige
AW: Daten - Pivotabelle - Assisten folgen. Fertig
28.03.2010 18:35:26
Horst
Hallo Franz!
Da Rainer/Ramses die Pivot-Tabellen ins Spiel gebracht hat, hab' ich mir die Sache mal näher angesehen.
Zusammenfassend scheint mir dann doch die ursprünglich angedachte Variante mit den VBA-Autofilter die einfacherer Lösung zu sein. Ich werd' den Code ausgiebig testen und mich diesbezüglich nochmal melden, falls ich Hilfe brauche.
Besten Dank vorab!
Gruß, Horst

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige