| |  | Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
|
Autor
|
Thema: Zugriff auf gefilterte Daten mit vb (5341 mal gelesen)
|
Axel.Strasser Ehrenmitglied V.I.P. h.c. Selbstständig im Bereich PLM/CAx

 Beiträge: 4107 Registriert: 12.03.2001 Früher war vieles gut, und das wäre es heute immer noch, wenn man die Finger davon gelassen hätte!
|
erstellt am: 30. Nov. 2007 17:04 <-- editieren / zitieren --> Unities abgeben:         
In einer Tabelle setze ich den Autofilter via vb. Wie kann ich jetzt am besten mit vb auf diese gefilterte Liste zugreifen. Ich will aus den gefilterten Spalten auf gewisse Zellen zugreifen. Axel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
       

 Beiträge: 8086 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 30. Nov. 2007 22:20 <-- editieren / zitieren --> Unities abgeben:          Nur für Axel.Strasser
Hallo Axel, was genau meinst Du mit auf gewisse Zellen? per vba kannst Du weiterhin auf alle Zellen zugreifen. Die weggefilterten unterscheiden sich dabei von den angezeigten z.B. in den Range-Eigenschaften: RowHeight oder ColumnWidthSheets(1).Rows(1).RowHeight [rredit] und wo Du den Filter eh schon via vba erzeugst, kannst Du auch Dein dort definiertes Kriterium hier weiter nutzen. [/rredit] ------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße...Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Axel.Strasser Ehrenmitglied V.I.P. h.c. Selbstständig im Bereich PLM/CAx

 Beiträge: 4107 Registriert: 12.03.2001 Früher war vieles gut, und das wäre es heute immer noch, wenn man die Finger davon gelassen hätte!
|
erstellt am: 30. Nov. 2007 22:44 <-- editieren / zitieren --> Unities abgeben:         
Also ich habe eine Tabelle mit 1000 Zeilen. über den Autofilter (ausgeführt mit vb) bleiben nur noch 3 Zeilen angezeigt (Zeile 3, 345, 786). Jetzt brauche ich genau von diesen drei Zeilen die Werte aus der Spalte A, C, D und T und zwar in einem vb Skript umd diese dann in einer anderen Tabelle einzutragen. Jetzt klarer ? Axel PS: Was ich gefunden habe wäre alles zu selektieren und in einer neuen Tabelle einzufügen [Diese Nachricht wurde von Axel.Strasser am 30. Nov. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas Harmening Moderator Arbeiter ツ
      

 Beiträge: 2897 Registriert: 06.07.2001 Das Innerste geäussert und aufs Äusserste verinnerlicht
|
erstellt am: 01. Dez. 2007 14:33 <-- editieren / zitieren --> Unities abgeben:          Nur für Axel.Strasser
2 Schnippsel, gefilterte Daten im Bereich A:E nach tabelle2 Code: Sub Filterschleife() Dim iCounter As Integer, iRow As Integer For iCounter = 2 To WorksheetFunction.CountA(Columns(1)) If Rows(iCounter).Hidden = False Then iRow = iRow + 1 targetrow = "A" & iRow & ":E" & iRow 'ziel copyrow = "A" & iCounter & ":E" & iCounter 'copy Worksheets("Tabelle2").Range(targetrow).Value = _ Range(copyrow).Value End If Next iCounter End Sub
Code: Sub Filtercopy() Dim rng As Range Set rng = Range("A1").CurrentRegion _ .SpecialCells(xlCellTypeVisible) rng.Copy Worksheets("Tabelle2").Range("A1") Worksheets("Tabelle2").Rows(1).Delete Worksheets("Tabelle2").Columns("U:IV").Delete Worksheets("Tabelle2").Columns("E:S").Delete Worksheets("Tabelle2").Columns("B").Delete End Sub
HTH [edit]habe gerade nochmal gelesen, du brauchst nur die Werte aus die Werte aus der Spalte A, C, D und T?, dann Code: Sub Filterschleife() Dim iCounter As Integer, iRow As Integer For iCounter = 2 To WorksheetFunction.CountA(Columns(1)) If Rows(iCounter).Hidden = False Then iRow = iRow + 1 Worksheets("Tabelle2").Cells(iRow, 1).Value = _ Cells(iCounter, 1).Value Worksheets("Tabelle2").Cells(iRow, 2).Value = _ Cells(iCounter, 3).Value Worksheets("Tabelle2").Cells(iRow, 3).Value = _ Cells(iCounter, 4).Value Worksheets("Tabelle2").Cells(iRow, 4).Value = _ Cells(iCounter, 20).Value End If Next iCounter End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Axel.Strasser Ehrenmitglied V.I.P. h.c. Selbstständig im Bereich PLM/CAx

 Beiträge: 4107 Registriert: 12.03.2001 Früher war vieles gut, und das wäre es heute immer noch, wenn man die Finger davon gelassen hätte!
|
erstellt am: 01. Dez. 2007 16:46 <-- editieren / zitieren --> Unities abgeben:         
Danke für Deine Schnippsel, Ich hatte mich heute Morgen im Halbschlaf entschlossen es über eine temporäre Tabelle zu machen. Ich denke mal die Performance wird besser, wenn ich bis zu 50'000 Zeilen habe und durch die Filter die auf 10 zusammen gestaucht werden, geht das wahrscheinlich schneller als 50'000 mal abzufragen, bist du hidden oder nicht, aber ich werde mal Deinen Filtercopy versuchen. Code: With Workbooks(XlsFileName) .Sheets.Add Before:=Worksheets(1) .ActiveSheet.Name = "tmp" LastRow = .Sheets("InputData").Cells(Rows.Count, 2).End(xlUp).Row .Sheets("InputData").Range("A2:T" & LastRow).Copy .Sheets("tmp").Range("A1").PasteSpecial Paste:=xlPasteValues LastRow = .Sheets("tmp").Cells(Rows.Count, 2).End(xlUp).Row For i = 1 To LastRow .Sheets("Tool").Cells(i + 19, 1).Value = .Sheets("tmp").Cells(i, 3).Value .Sheets("Tool").Cells(i + 19, 2).Value = .Sheets("tmp").Cells(i, 2).Value .Sheets("Tool").Cells(i + 19, 3).Value = .Sheets("tmp").Cells(i, 5).Value .Sheets("Tool").Cells(i + 19, 4).Value = .Sheets("tmp").Cells(i, 6).Value .Sheets("Tool").Cells(i + 19, 8).Value = .Sheets("tmp").Cells(i, 7).Value * .Sheets("tmp").Cells(i, 13).Value .Sheets("Tool").Cells(i + 19, 11).Value = .Sheets("tmp").Cells(i, 18).Value Next Application.DisplayAlerts = False .Sheets("tmp").Delete Application.DisplayAlerts = True
Axel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |