Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1772to1776
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Nicht angrenzende Zellen kopieren

VBA Nicht angrenzende Zellen kopieren
04.08.2020 23:00:52
Peter
Hallo,
ich bin auf der Suche nach einer eleganteren Lösung um nicht angrenzende Zellen paaralel in _
Zwei Listen zu schreiben. Zwei Lösungen habe ich gefunden, die zwar funktionieren aber eher behelfsmässig wirken.
Sub We_Save()
With Tabelle1
If .Range("E6").Value = Empty Then
MsgBox "Bitte Rechnungsnummer Vergeben"
Exit Sub
End If
BilRow = .Range("D99999").End(xlUp).Row + 1 'erste verfügbare Zeile
buchrow = Tabelle3.Range("F999999").End(xlUp).Row + 1 ' erste verfügbare Zeile
Tabelle3.Range("C" & buchrow).Value = conBil  'Konstante eintragen
'Mapping in Zeile 12, Daten in letzte Zeile Tabelle1 schreiben
For BilCol = 4 To 9
Cells(BilRow, BilCol).Value = .Range(.Cells(12, BilCol).Value).Value
Next BilCol
' Ab hier meine Lösungsvariante A), oder alternativ B) liese sich die for Schleife für tabelle3  _
neu durchlaufen erledigt zwar die Aufgabe fühlt sich aber falsch an.
.Range("D" & BilRow & ":I" & BilRow).Copy
Tabelle3.Range("F" & buchrow).PasteSpecial xlPasteValues
End With
End Sub
Als Lösung Stelle ich mir vor, dass man zunächst anhand vom Mapping die Zellen in eine Variable schreibt und dann diese Variable in die zwei Listen. Habt ihr einen Vorschlag wie man den Code sauberer bekommt?

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Nicht angrenzende Zellen kopieren
05.08.2020 21:35:44
fcs
Hallo Peter,
es ist ja nichts falsch daran, den Zellbereich zu kopieren und 2 mal an verschiedenen Positionen einzufügen.
Ich hab dir auch mal eine Variante erstellt. In dieser werden die zu mappenden Werte in ein Array übernommen und in eine For-Next-Schleife an den Positionen eingefügt.
LG
Franz
Sub We_Save()
With Tabelle1
If .Range("E6").Value = Empty Then
MsgBox "Bitte Rechnungsnummer Vergeben"
Exit Sub
End If
'nächste freie Zeile in Spalte D
BilRow = .Cells(.Rows.Count, 4).End(xlUp).Row + 1 'erste verfügbare Zeile
'nächste freie Zeile in Spalte F
buchrow = Tabelle3.Cells(.Rows.Count, 6).End(xlUp).Row + 1 ' erste verfügbare Zeile
'Spalte D bis I der Zeile 12 kopieren
.Range(.Cells(12, 4), .Cells(12, 9)).Copy
'Werte ab Spalte D einügen
.Cells(BilRow, 4).PasteSpecial xlPasteValues
'Werte ab Spalte F einfügen
Tabelle3.Cells(buchrow, 6).PasteSpecial xlPasteValues
Application.CutCopyMode = False
Tabelle3.Cells(buchrow, 3).Value = conBil  'Konstante eintragen in Spalte C
End With
End Sub
Sub We_Save_Variante()
Dim arrData, spa As Long
With Tabelle1
If .Range("E6").Value = Empty Then
MsgBox "Bitte Rechnungsnummer Vergeben"
Exit Sub
End If
'Daten aus Zellbereich D12:I12 in Daten-Array einlesen
arrData = .Range("D12:I12")
'nächste freie Zeile in Spalte D von Rechnung
BilRow = .Cells(.Rows.Count, 4).End(xlUp).Row + 1 'erste verfügbare Zeile
'nächste freie Zeile in Spalte F von Buchung
buchrow = Tabelle3.Cells(.Rows.Count, 6).End(xlUp).Row + 1 ' erste verfügbare Zeile
'Mapping von Zeile 12
For spa = LBound(arrData, 2) To UBound(arrData, 2)
.Cells(BilRow, spa + 3) = arrData(1, spa)
Tabelle3.Cells(buchrow, spa + 5) = arrData(1, spa)
Next
Tabelle3.Cells(buchrow, 3).Value = conBil  'Konstante eintragen in Spalte C
End With
End Sub

Anzeige

308 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige