[VBA] Makro verkürzen
#11
Oder:


Code:
Sub M_snb()
  With Sheet1.UsedRange
    For j = 1 To 10
      Sheet2.Cells(1).Resize(.Rows.Count, .Columns.Count).Columns(Choose(j, 1, 4, 22, 5, 6, 7, 10, 11, 15, 18)) = .Columns(Choose(j, 9, 4, 11, 24, 10, 8, 21, 18, 5, 28)).Value
    Next
  End With
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • Rabe
Top
#12
Hallo snb,

danke, das teste ich auch.

Nun noch eine Frage: wenn ich den Quellbereich gefilert habe, wie kann ich in dem Makro dann nur die angezeigten Werte übertragen?
Top
#13
(08.06.2018, 13:13)Rabe schrieb: wenn ich den Quellbereich gefilert habe, wie kann ich in dem Makro dann nur die angezeigten Werte übertragen?

Entschuldige, aber das verstehe ich nicht ganz   :(
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Top
#14
Hi snb,

im Original-Code werden vor dem Kopieren die Quellspalten gefiltert (325 aus 7600 Zeilen) und nur die sichtbaren Zellen kopiert und im Ziel eingefügt.
Code:
...
  If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
  ActiveSheet.ListObjects("Tabelle1").Range.autofilter Field:=18, Criteria1:="Lager"
...

Wenn ich das folgende Makro verwende:
Code:
Sub M_snb()
 For j = 1 To 10
   Workbooks("EVG.xlsb").Sheets("2001").UsedRange.Columns(Choose(j, 9, 4, 11, 24, 10, 8, 21, 18, 5, 28)).Copy
   Workbooks("Aktuell.xlsm").Sheets("Rohdaten").Cells(1, Choose(j, 1, 4, 22, 5, 6, 7, 10, 11, 15, 18)).PasteSpecial Paste:=xlValues
 Next
End Sub
dann werden alle Daten der Quell-Spalten in den Zielbereich eingefügt, inklusive der ausgefilterten. Ich benötige aber nur die Daten, die in den Quellspalten nicht ausgefiltert sind, also nur die sichtbaren.
Top
#15
So geht das:


Code:
Sub M_snb()
   With ThisWorkbook.Sheets(1).ListObjects(1).Range
      .AutoFilter 18, "Lager"
      For j = 1 To 10
         .Columns(Choose(j, 9, 4, 11, 24, 10, 8, 21, 18, 5, 28)).Copy
         Sheet2.Cells(1, Choose(j, 1, 4, 22, 5, 6, 7, 10, 11, 15, 18)).PasteSpecial -4163
      Next
   End With
End Sub

NB. man filtert nicht aus, doch man filtert. Die gefilterte Daten sind sichtbar.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • Rabe
Top
#16
Hi,

das hat funktioniert, danke!

Was bewirkt warum das "-4163"?
Wo ist das dokumentiert?
Top
#17
Hallo Ralf,

meine Googlesuche hat mich hier hin geführt:
https://analysistabs.com/vba-code/range/m/pastespecial/
Top
#18
Hi,

das heißt also:
-4163 ist xlPasteValues
When XlPasteType = xlPasteValues, Only values in the copied range are pasted.

Hier steht:
xlPasteValues | -4163 | Werte werden eingefügt.


Das definiert doch nirgends, daß nur die gefilterten Werte kopiert werden, trotzdem klappt es mit snbs Makro.



Komischerweise habe ich doch schon früher probiert, die Daten zu kopieren mit:
Workbooks("aktuell.xlsm").Sheets("Rohdaten").cells(1,choose(j,1,4,22,5,6,7,10,11,15,18)).PasteSpecial Paste:=xlPasteValues

Da kam ja eine Fehlermeldung.
siehe  #5
Top
#19
VBEditor Alt F11
ObjectBrowser F2

   
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste