Hallo und einen schönen guten Tag
ich habe eine Frage an Euch Spezialisten
habe volgenen VBA
Sub CopyAktuelleSeite()
Intersect(ActiveSheet.Range("A:A,C:F"), ActiveSheet.Range("C5:C35").SpecialCells(xlCellTypeConstants, 3).EntireRow).Copy
Sheets("meine").Range("A11").PasteSpecial xlPasteValues
End Sub
klappt wunderbar aber würde gern das beim einfügen in ("meine ") E und F getauscht werden.
ich versuchte A:A,C,E,D:F
also
A in A
C in B
E in C
D in D
F in E
ist das möglich ?
Gruß Thomas
Hallo,
mit .PasteSpecial xlPasteValues geht das nicht in einem Zug.
Entweder kopierst du einfach die Spalten hintereinander, die du haben willst, oder es wird wegen deiner uralt-Excelversion kompliziert.
Haben die Spalten Überschriften ? Dann hätte ich da etwas ... eventuell.
(23.12.2025, 23:04)Flotter Feger schrieb: [ -> ]Hallo,
mit .PasteSpecial xlPasteValues geht das nicht in einem Zug.
Entweder kopierst du einfach die Spalten hintereinander, die du haben willst, oder es wird wegen deiner uralt-Excelversion kompliziert.
Haben die Spalten Überschriften ? Dann hätte ich da etwas ... eventuell.
Hallo Frohe Weihnachten
ja erste Tabelle A=Datum B=leer C=Start D=Ende E0Pause F=Gesamt
in 2 Tabelle A=Datum B=Start C=Pause D=Ende E=Gesamt
wenn das nicht gehen solte ,drehe ich halt in der ersten Tabelle d und e
mfg Thomas
Hallo,
Den Code in die Tabelle, aus der kopiert werden soll.
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Address(0, 0) = "A1" Then
Call Spalten_Automatisiert_umstellen(Tabelle2, "Datum", "Start", "Pause", "Ende", "Gesamt")
Cancel = True
End If
End Sub
Public Sub Spalten_Automatisiert_umstellen(ByVal wsTab As Worksheet, ParamArray Data() As Variant)
Dim lngI As Long
Dim aletzte As Long
Dim zletzte As Long
Dim spalte As Variant
Dim wsA As Worksheet
Set wsA = ActiveSheet
aletzte = wsA.Cells(Rows.Count, 1).End(xlUp).Row + 1
With wsTab
zletzte = .Cells(Rows.Count, 1).End(xlUp).Row + 1: If zletzte = 2 Then zletzte = 1
For lngI = LBound(Data) To UBound(Data)
spalte = SpaltenName(Data(lngI))
wsA.Range(wsA.Cells(1, spalte), wsA.Cells(aletzte, spalte)).Copy Destination:=.Cells(zletzte, lngI + 1)
Next lngI
If zletzte > 1 Then .Rows(zletzte).Delete shift:=xlShiftUp
End With
End Sub
Public Function SpaltenName(ByVal spalte As Variant) As Variant
Dim rng As Range
If IsNumeric(spalte) Then
SpaltenName = spalte
Else
Set rng = Range(Cells(1, 1), Cells(1, Columns.Count)).Find(What:=spalte, LookIn:=xlValues, LookAt:=xlWhole)
If Not rng Is Nothing Then
SpaltenName = Split(rng.Address(, 0), "$")(0)
End If
End If
End Function
Sollte eigentlich auch in deinem 2007 klappen.
Beim Aufruf ... Tabelle2, "Datum", "Start", ... ist Tabelle2 nicht der Name des Sheets, sondern der CodeName ... der in Klammern im Projekt-Explorer steht.
Danke an Alle
und vorab ein guten Rutsch ins Neue Jahr
habe mein aniegen so gelöt
Sub SpaltenC_D_Tauschen()
Dim ws As Worksheet
Dim rngC As Range
Dim rngD As Range
Dim cell As Range
Dim temp As Variant ' Temporäre Variable für den Wert
Set ws = ThisWorkbook.Sheets("Tabelle1") ' Passen Sie den Namen "Tabelle1" an Ihre Tabelle an
' Definieren Sie den Bereich, der getauscht werden soll (z.B. von Zeile 1 bis Zeile 100)
Set rngC = ws.Range("C1:C100")
Set rngD = ws.Range("D1

100")
' Schleife durch jede Zeile
For Each cell In rngC.Cells
' Wert von Spalte C in temp speichern
temp = cell.Value
' Wert von Spalte D nach Spalte C kopieren
cell.Value = cell.Offset(0, 1).Value ' Offset(0, 1) geht eine Spalte nach rechts (zu D)
' Wert aus temp in Spalte D schreiben
cell.Offset(0, 1).Value = temp
Next cell
MsgBox "Inhalte von Spalte C und D wurden getauscht!", vbInformation
End Sub
Hallo,
wozu die Schleife durch alle Zeilen ?
Es reicht Spalte D auszuschneiden und vor C einzufügen. Wenn man es so machen will.
Das kann man auch mit dem Makro-Rekorder aufzeichnen.
hallo
hast recht
hab es geändert wollte es ginge in einem rutsch zb. von blatt1 in das andere blatt2
Sub SpaltenAustauschen()
Dim temp As Variant
temp = Range("c11:c35").Value
Range("C11:c35").Value = Range("D11:d35").Value
Range("D11:d35").Value = temp
End Sub
lg Thomas
guten Rutsch ins Neue Jahr
Hallo nochmal,
in 2021 geht das mit einer einzigen Formel ... =INDEX(A1:F4;SEQUENZ(ZEILEN(A1:F4));{1.3.4.6.5})
Hallo danke
Aber wie setze ich das in vba Code um?
Das exel von Blatt wo ich kopieren will dann in mein Blatt "meine" setzt?
LG Thomas
Hallo,
da ich definitiv nicht weiß, was du genau willst, wäre es vielleicht Zeit für eine Musterdatei.
Die Urdaten, wie sie in Tabelle1 stehen und die gewünschte Umstellung und was sonst noch wichtig wäre, in Tabelle2.
Seit die Formeln sehr viel können, arbeite ich fast nur noch mit Formeln. VBA verwende ich so gut wie gar nicht mehr.
Deshalb am Anfang auch immer die Frage nach der Excel-Version.