Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1160to1164
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

Bestimmte Zellen in andere Reihe veschieben

Bestimmte Zellen in andere Reihe veschieben
Das
Hallo Excelfreunde,
irgendwie komme ich nicht ganz klar. Ich möchte den Inhalt von bestimmten Zellen in einer Reihe in eine andere Reihe verschieben. Die Reihen werden duech zwei Variablen definiert (Quellreihe = "NRFind", Zielreihe = "LoK").
Die zu verschiebenden Zellen sind in Spalte "1 bis 17", "22" und "27 bis 29".
Jetzt scheitert es schon einmal daran, dass ich den Befehl fürs verschieben nicht kenne. Ich _ hatte es mit

Cells(LoK, 1).move Cells((NRFind.Row), 1)
versucht, aber das klappt nicht. Außerdem möchte ich nicht alle Zellen einzeln verschieben, sondern das mit einen Schwupps abarbeiten. Aber ich weiß nicht wie das geht.
Eine Idee von mir war, es in eine Array-Anweisung einzupacken. In meiner Unwissenheit habe ich folgenden code gebastelt ;-)
Dim vntCOL As Variant
Dim intIndex as Integer
vntCOL = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 22, 27, 28, 29)
For intIndex = 0 to UBound(vntCOL)
Cells(LoK, vntCOL(intIndex)).move Cells((NRFind.Row), vntCOL(IntIndex))
Next

Gruß Holger

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Bestimmte Zellen in andere Reihe veschieben
21.06.2010 15:12:59
Oberschlumpf
Hi Holger
Ich glaube, du hast es ja nun schon oft selbst gelesen. ;-)
Wie wäre es denn mit ner Bsp-Datei?
Ciao
Thorsten
oder versuch mal...
21.06.2010 15:15:57
Oberschlumpf
Hi Holger
...ungetestet...weil..keine Datei da
Cells(LoK, 1).Copy Cells((NRFind.Row), 1)
Cells(LoK, 1)..Value = ""
ach nee...das wäre ja nur für eine Zelle
Ok, dann halt nur den Bereich innerhalb von Cells() vergrößern.
Hilfts?
Ciao
Thorsten
AW: oder versuch mal...
21.06.2010 15:27:00
Das
Hallo Thorsten,
mit Copy und dann die Zellen leeren hatte ich schon eingebaut. Aber gibt es kein "Inhalt-Verschieben" mit VBA?
Gruß Holger
mein Vorschlag
21.06.2010 16:26:12
Erich
Hi Thorsten,
probier mal

Sub abc()
Dim intIndex As Integer
Dim LoK As Long, NRFind As Range
'   Set NRFind = Cells(3, 3)  ' Testwert
'   LoK = 5                   ' Testwert
With NRFind.EntireRow            ' Übertragen der Quellwerte
.Cells(1).Resize(, 17) = Cells(LoK, 1).Resize(, 17).Value
.Cells(22) = Cells(LoK, 22).Value
.Cells(27).Resize(, 3) = Cells(LoK, 27).Resize(, 3).Value
End With
With Rows(LoK)                   ' Löschen der Quellwerte
Union(.Cells(1).Resize(, 17), .Cells(22), _
.Cells(27).Resize(, 3)).ClearContents
End With
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: mein Vorschlag
22.06.2010 09:52:20
Das
Hallo Erich,
ich bin zwar nicht der Thorsten, aber ich antworte dier trotzdem ;-)
Leider hat dein Code nicht funktioniert. Er hat nur die Inhalte gelöscht. Ich nehme an, dass Quelle (=NRFind) und Ziel (=LoK) vertauscht sind. Aber das Umschreiben hat irgendwie nicht geklappt.
Ich habe jetzt folgende Lösung gebastelt
    Dim Loletzte As Long
Dim LoI As Long
Dim LoK As Long
Loletzte = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows. _
Count)
For LoI = 2 To Loletzte
If Cells(LoI, 1) = ComboBox1 Then
For LoK = LoI To Loletzte
If Cells(LoK, 1)  ComboBox1 Then
If Cells(LoK, 1)  "" Then
Rows(LoK).Insert Shift:=xlDown
End If
Cells((NRFind.Row), 1) = ComboBox1
Cells((NRFind.Row), 1).Resize(, 17).Copy Cells(LoK, 1).Resize(, 17)
Cells((NRFind.Row), 1).Resize(, 17).ClearContents
Cells((NRFind.Row), 22).Copy Cells(LoK, 22)
Cells((NRFind.Row), 22).ClearContents
Cells((NRFind.Row), 27).Resize(, 29).Copy Cells(LoK, 27).Resize(, 29)
Cells((NRFind.Row), 27).Resize(, 29).ClearContents
Exit For
End If
Next LoK
Exit For
End If
Next LoI

Gruß Holger
Anzeige
mein Vorschlag korrigiert, und Fragen
22.06.2010 16:34:35
Erich
Hi Holger,
sorry für die3 Velwechsrung! ;-)
Stimmt, ich hatte Quelle und Ziel vertauscht. Jetzt würde ich das so schreiben:

Option Explicit
Sub abc()
Dim LoK As Long, NRFind As Range
Set NRFind = Cells(3, 3)  ' Testwert
LoK = 5                   ' Testwert
With NRFind.EntireRow            ' Übertragen der Quellwerte
Cells(LoK, 1).Resize(, 17) = .Cells(1).Resize(, 17).Value
Cells(LoK, 22) = .Cells(22).Value
Cells(LoK, 27).Resize(, 3) = .Cells(27).Resize(, 3).Value
' Löschen der Quellwerte
Union(.Cells(1).Resize(, 17), .Cells(22), _
.Cells(27).Resize(, 3)).ClearContents
End With
End Sub
In deinem Code solltest du die 29 in eine 3 ändern, also z. B. aus
Cells((NRFind.Row), 27).Resize(, 29).Copy Cells(LoK, 27).Resize(, 29)
das hier machen:
Cells(NRFind.Row, 27).Resize(, 3).Copy Cells(LoK, 27).Resize(, 3)
Schau dir mal an, wie Resize tickt. Oder teste mal

Sub tst()
MsgBox "mit 29: " & Cells(1, 27).Resize(, 29).Address
MsgBox "mit   3: " & Cells(1, 27).Resize(, 3).Address
End Sub
Zu den For-Schleifen kann ich nur vermuten, dass das so evtl. etwas umständlich ist.
Aber ich kenne Zweck und Zusammenhang der Routine nicht.
Noch eins: Was möchtest du eigentlich kopieren? Du sprachst vom "Inhalt" der Zellen. "Inhalt" ist nicht definiert.
Meinst du damit Werte, Formeln, Formate, andere Eigenschaften?
Mit Copy kopierst du auch Formeln und Formate.
Mit meinem Code werden nur Werte übertragen.
Was soll sein?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: mein Vorschlag korrigiert, und Fragen
23.06.2010 07:11:54
Das
Hallo Erich,
vielen Dank, dass du dich nochmal mit dem Thema befasst hast!
Ich kannte "Resize" nicht, deswegen hatte ich anfänglich die Endspalte statt der Anzahl der Spalten angegeben. Aber das ist mir recht schnell aufgefallen und habe es dann korigiert.
Mit Inhalt der Zellen meinte ich alles, Formate, Werte u.s.w. Aber es reicht auch, nur die Werte zu übertragen, da die Zielzellen schon formatiert sind und keine Formeln übertragen werden müssen.
Zu der For-Schleife (LoK) ist zu sagen, dass in der Spalte unterschiedliche Werte sind, die sich in einem Bereich immer wiederholen können. Bsp.: In den Zellen A15:A18 steht jeweils "Wasser", dann kommen 5 Leerzellen, danach steht 4mal "Feuer". Anschließend kommen wieder ein paar Leerzellen u.s.w.
Je nach ausgewählten Begriff in der Combobox wird immer die erste freie Zeile unter dem passenden Begriff in der Tabelle gesucht und dann die Werte in diese Zeile kopiert.
Die Quelldaten werden vorher über eine Nummer gesucht (NRFind).
Sinn der ganzen Sache ist, Stammdaten in der Tabelle zu ändern (über NRFind) und sie ggf. neu zuzuordnen (über LoK).
Deinen ersten Code hatte ich versucht umzustellen (ZielQuelle), aber das war mir misslungen ;-)Nachher werde ich den korrigierten Code testen und dann Rückmeldung geben.
Gruß Holger
Anzeige
getestet
23.06.2010 08:48:53
Das
Habe eben deinen Code ausgiebig getestet. Er funktioniert tadelos. Vielen Dank!
Gruß Holger

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige