Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1320to1324
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 Zeilen verschieben wenn Bedingungen erfüllt

VBA Zeilen verschieben wenn Bedingungen erfüllt
04.07.2013 15:44:56
Jochen
Hallo zusammen,
ich habe hier ein Problem bei dem ich absolut nicht weiterkomme.
Ich habe eine Projektübersicht (Tabelle1) in Excel. Nun würde ich gerne wenn ein Projekt abgeschlossen ist, dieses komplett in ein Archivtabellenblatt (Tabelle2)verschieben.
In Spalte B habe ich die Prohektnummern, in Spalte C die Anzahl an Zeilen für dieses Projekt und in Spalte D den Projektstatus.
Wenn nun bei einem Projekt alle Zeilen z.B. Projekt 1 Zeilen 1-4 den Status 6 erreicht haben, so soll dieses Projket von Tabelle 1 nach Tabelle 2 verschoben werden.
Kann mir hier einer einen Tipp geben wie ich dies am Besten realisiere?
Mein bisheriger Versuch scheitert immer daran die Werte für ein gesamtes Projekt zu vergleichen, einzelne Zeilen in welchen die Bedingung Status 6 erfüllt sind zu verschieben funktioniert.
Dank im voraus,
Gruß
Jochen

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Zeilen verschieben wenn Bedingungen erfüllt
04.07.2013 16:37:15
Oberschlumpf
Hi Jochen
Hast du ne Bsp-Datei?
Ciao
Thorsten

AW: VBA Zeilen verschieben wenn Bedingungen erfüllt
05.07.2013 15:13:51
fcs
Hallo Jochen,
mit folgendem Makro werden die abgeschlossenen Projekte ins Archiv kopiert und anschließend gelöscht.
Gruß
Franz Sub Copy_Projekte_Status6() Dim wksQ As Worksheet, wksZ As Worksheet Dim ZeileQ As Long, ZeileAnz As Long, ZeileZ As Long Const Zeile1 = 2 '1. Zeile mit einem Projektnamen - ggf. anpassen !! Set wksQ = Worksheets("Tabelle1") 'Projektübersicht - Tabellename ggf. anpassen Set wksZ = Worksheets("Tabelle2") 'Archivblatt - Tabellename ggf. anpassen With wksZ 'nächste freie Zeile im Zielblatt ZeileZ = .Cells(.Rows.Count, 4).End(xlUp).Row + 1 End With With wksQ If Zeile1 > .Cells(.Rows.Count, 3).End(xlUp).Row Then MsgBox "Keine Projekte in Projektübersicht eingetragen" Else ZeileQ = Zeile1 ' Do ZeileAnz = .Cells(ZeileQ, 3).Value 'Prüfen, ob in Spalte D alle Zeilen des Projekts den Wert 6 haben If Application.WorksheetFunction.CountIf(.Range(.Cells(ZeileQ, 4), _ .Cells(ZeileQ + ZeileAnz - 1, 4)), 6) = ZeileAnz Then With .Range(.Rows(ZeileQ), .Rows(ZeileQ + ZeileAnz - 1)) .Copy Destination:=wksZ.Cells(ZeileZ, 1) .ClearContents End With ZeileZ = ZeileZ + ZeileAnz End If ZeileQ = ZeileQ + ZeileAnz Loop Until IsEmpty(.Cells(ZeileQ, 4)) 'Leerzeilen löschen With .Range(.Cells(Zeile1, 4), .Cells(ZeileQ, 4)) If Application.WorksheetFunction.CountBlank(.Cells) = 1 Then MsgBox "Keine abgeschlossenen Projekte vorhanden" Else .SpecialCells(xlCellTypeBlanks).EntireRow.Delete shift:=xlShiftUp MsgBox "Abgeschlossene Projekte ins Archivblatt verschoben" End If End With End If End With End Sub

Anzeige
AW: VBA Zeilen verschieben wenn Bedingungen erfüllt
05.07.2013 15:29:10
Jochen
Hallo Franz,
erstmal Danke für Deine Hilfe, ich werde den Code am Montag mal ausprobieren.
Gruß
Jochen

AW: VBA Zeilen verschieben wenn Bedingungen erfüllt
08.07.2013 11:39:22
Jochen
Servus,
ich habe den Code nun mal probiert, irgendwie scheint das nicht ganz zu funktionieren, kann aber auch daran liegen das ich keine Zeile mit nem Projektnamen habe welche ich anpassen könnte. Es gibt nur spalten mit Projektnummern oder auch Projektnamen. Der Code verschiebt mir momentan immer die Zeile welche ich oben als Const Zeile1 angebe. Eventuell mache ich auch etwas falsch?

ähhh?
08.07.2013 20:57:06
Oberschlumpf
Hi Jochen
Wenn du gemerkt hast, dass der Code von Franz noch nicht läuft, wieso zeigst du nicht spätestens jetzt ne Bsp-Datei?
Ciao
Thorsten

Anzeige
AW: VBA Zeilen verschieben wenn Bedingungen erfüllt
08.07.2013 23:09:36
fcs
Hallo Jochen,
gemäß deiner Beschreibung in der Frage
In Spalte B habe ich die Prohektnummern, in Spalte C die Anzahl an Zeilen für dieses Projekt und in Spalte D den Projektstatus.
müssten deine Daten etwa wie folgt aussehen.
Tabelle1

 ABCDEF
1 ProjektName/-Nr.ZeilenStatusFeld01Feld02
2 B46A001A001
3   5A002A002
4   6A003A003
5   4A004A004
6 A123436A005A005
7   6A006A006
8   6A007A007
9 D13A008A008
10 Projekt E26A009A009
11   4A010A010
12 345626A011A011
13   6A012A012


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Damit funktioniert mein Makro.
Woher sollen wir denn wissen was du evtl falsch machst, wenn wir deinen Tabellenaufbau nicht kennen?
Den 2-mal gemachten Tipp, eine Beispieldatei (mit ggf. anonymisierten Testdaten) hier hochzuladen, solltest du spätestens jetzt beachten.
Gruß
Franz

Anzeige
AW: VBA Zeilen verschieben wenn Bedingungen erfüllt
09.07.2013 08:51:03
Jochen
Hallo zusammen,
ich hatte eigentlich eine Testmappe hochgeladen, scheint aber irgenwie nicht funktioniert zu haben, also ein neuer Versuch anbei...
hier der Link:

Die Datei https://www.herber.de/bbs/user/86257.xlsm wurde aus Datenschutzgründen gelöscht


Gruß
Jochen

AW: VBA Zeilen verschieben wenn Bedingungen erfüllt
09.07.2013 10:41:02
fcs
Hallo Jochen,
bei dem Aufbau der Daten muss die Anzahl Zeilen je Projekt etwas anders ermittelt werden.
Ansonsten passt mein Makro schon.
Gruß
Franz
Sub Copy_Projekte_Status6()
Dim wksQ As Worksheet, wksZ As Worksheet
Dim ZeileQ As Long, ZeileAnz As Long, ZeileZ As Long, Zeilen As Long
Const Zeile1 = 2 '1. Zeile mit einem Projektnamen - ggf. anpassen !!
Set wksQ = Worksheets("Tabelle1") 'Projektübersicht - Tabellename ggf. anpassen
Set wksZ = Worksheets("Tabelle2") 'Archivblatt - Tabellename ggf. anpassen
With wksZ
'nächste freie Zeile im Zielblatt
ZeileZ = .Cells(.Rows.Count, 4).End(xlUp).Row + 1
End With
With wksQ
If Zeile1 > .Cells(.Rows.Count, 3).End(xlUp).Row Then
MsgBox "Keine Projekte in Projektübersicht eingetragen"
Else
Zeilen = .Cells(.Rows.Count, 2).End(xlUp).Row
ZeileQ = Zeile1 '
Do
'Anzahl Projektzeilen ermitteln
ZeileAnz = Application.WorksheetFunction.CountIf(.Range(.Cells(Zeile1, 2), _
Cells(Zeilen, 2)), .Cells(ZeileQ, 2).Value)
'Prüfen, ob in Spalte D alle Zeilen des Projekts den Wert 6 haben
If Application.WorksheetFunction.CountIf(.Range(.Cells(ZeileQ, 4), _
.Cells(ZeileQ + ZeileAnz - 1, 4)), 6) = ZeileAnz Then
With .Range(.Rows(ZeileQ), .Rows(ZeileQ + ZeileAnz - 1))
.Copy Destination:=wksZ.Cells(ZeileZ, 1)
.ClearContents
End With
ZeileZ = ZeileZ + ZeileAnz
End If
ZeileQ = ZeileQ + ZeileAnz
Loop Until IsEmpty(.Cells(ZeileQ, 4))
'Leerzeilen löschen
With .Range(.Cells(Zeile1, 4), .Cells(ZeileQ, 4))
If Application.WorksheetFunction.CountBlank(.Cells) = 1 Then
MsgBox "Keine abgeschlossenen Projekte vorhanden"
Else
.SpecialCells(xlCellTypeBlanks).EntireRow.Delete shift:=xlShiftUp
MsgBox "Abgeschlossene Projekte ins Archivblatt verschoben"
End If
End With
End If
End With
End Sub

Anzeige
AW: VBA Zeilen verschieben wenn Bedingungen erfüllt
09.07.2013 11:17:08
Jochen
Hallo Franz,
perfekt, habe es gerade getestet.
eine kleine Frage noch, in meinem Quellblatt sind Formeln hinterlegt, wie kann ich Ihm sagen das in der Zieltabelle nur die Werte geschrieben werden sollen, war das nicht irgendwas mit "paste special" oder so ähnlich? Wenn ja, wo muss ich das einfügen?
Danke erstmal für Deine Mühe, und sorry das der Upload der Testdatei nicht gleich funktioniert hat...
Gruß
Jochen

AW: VBA Zeilen verschieben wenn Bedingungen erfüllt
09.07.2013 21:14:19
fcs
Hallo Jochen,
dann muss du den Kopierabschnitt des Makros wie folgt anpassen:
            With .Range(.Rows(ZeileQ), .Rows(ZeileQ + ZeileAnz - 1))
.Copy
wksZ.Cells(ZeileZ, 1).PasteSpecial Paste:=xlPasteFormats
wksZ.Cells(ZeileZ, 1).PasteSpecial Paste:=xlPasteValues
.ClearContents
End With

Gruß
Franz

Anzeige
AW: VBA Zeilen verschieben wenn Bedingungen erfüllt
10.07.2013 08:49:42
Jochen
Hallo Franz,
jetzt funktioniert wirklich alles perfekt, vielen Dank für Deine tolle Unterstützung.
Gruß
Jochen

392 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige