Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
VBA copy und paste
#1
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
Zitieren
#2
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.
_________
VG Sabina
Zitieren
#3
(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
Zitieren
#4
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.
_________
VG Sabina
Zitieren
#5
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
Zitieren
#6
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.
_________
VG Sabina
Zitieren
#7
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
Zitieren
#8
Hallo nochmal,

in 2021 geht das mit einer einzigen Formel ... =INDEX(A1:F4;SEQUENZ(ZEILEN(A1:F4));{1.3.4.6.5})
_________
VG Sabina
Zitieren
#9
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
Zitieren
#10
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.
_________
VG Sabina
Zitieren


Gehe zu:


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




Hinweis auf Angebot Excel-Inside - lang    Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden um dein Anliegen zu besprechen.
   Gerne erstellen wir auf dieser Basis ein Angebot.
   Sende deine Anfrage einfach
per E-Mail an anfrage@excel-inside.de


Powerd and supported by Excel-InsideSolutions