Office-Fragen.de

Normale Version: VBA copy und paste
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
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("D1Big Grin100")

    ' 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.
Seiten: 1 2