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

Zellen auf anderes Arbeitsblatt übertragen, wenn Bedingung erfüllt

Zellen auf anderes Arbeitsblatt übertragen, wenn Bedingung erfüllt
24.10.2019 21:08:43
Rupprecht
Hallo zusammen,
ich habe mal wieder ein Problem, ich habe eine kurze Beispieldatei erstellt, damit ihr mein Problem besser nachvollziehen könnt. In dieser Datei habe ich alle Daten von Hand eingeben, in der echten Datei werden alle Daten automatisch erzeugt, sobald ich die Schicht eintrage.
Jetzt mein Problem, ich bekomme eine Zulage in der Zeit von 20Uhr bis 24 Uhr und eine Zulage von 00Uhr bis 6Uhr, diese schreibt mir auch das Tabellenblatt "Schichtplan" in die Zeilen 13 und 15. Um diese Zulage zu beantragen, müssen die daten in das Formblatt auf dem Tabellenblatt "Zulagenblatt" übernommen werden.
In meinem Beispiel jetzt, von 1. bis zum 6. nichts, dann vom 7. bis 11. und dann vom 28. bis 31. wieder, immer eine Zeile nach der anderen, ohne Leerzeile.
Also ungefähr so, überprüfe, ob in B13 etwas steht, wenn da etwas steht, kopiere die Daten ins Zulagenblatt, wenn nicht gehe zu B15 und überprüfe diese Zelle, danach zu C13, dann zu C15, usw.
Ich bin für jede Lösung dankbar, egal ob Formel, Makro, oder VBA.
Falls noch etwas unklar ist, bitte fragen.
Vielen Dank im voraus, schönen Abend noch,
Mike
https://www.herber.de/bbs/user/132729.xlsx

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

Betreff
Datum
Anwender
Anzeige
AW: Zellen auf anderes Arbeitsblatt übertragen, wenn Bedingung erfüllt
24.10.2019 21:53:51
Regina
Hi, teste mal diesen Code:
Public Sub Uebertrag()
Dim obj_wks_ziel As Worksheet
Dim obj_wks_quelle As Worksheet
Dim lng_letzte_zeile As Long
Dim lng_spalte As Long
Set obj_wks_ziel = Worksheets("Zulagenblatt")  ' Hier Zieltabellenblatt benennen
Set obj_wks_quelle = Worksheets("Schichtplan")  ' Hier Quelltabellenblatt benennen
lng_letzte_zeile = obj_wks_ziel.Cells(Rows.Count, 1).End(xlUp).Row + 1 ' Letzte zeile im  _
Zielblatt ermitteln
lng_spalte = 2       ' Startzeile im Quellblatt
With obj_wks_quelle
For lng_spalte = 2 To 32
If .Cells(13, lng_spalte)  "" Then
obj_wks_ziel.Cells(lng_letzte_zeile, 1) = .Cells(3, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 2) = .Cells(4, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 3) = .Cells(13, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 4) = .Cells(14, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 5) = .Cells(9, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 6) = .Cells(10, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 7) = .Cells(11, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 8) = .Cells(12, lng_spalte).Value
lng_letzte_zeile = lng_letzte_zeile + 1
End If
If .Cells(15, lng_spalte)  "" Then
obj_wks_ziel.Cells(lng_letzte_zeile, 1) = .Cells(3, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 2) = .Cells(4, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 3) = .Cells(15, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 4) = .Cells(16, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 5) = .Cells(9, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 6) = .Cells(10, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 7) = .Cells(11, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 8) = .Cells(12, lng_spalte).Value
lng_letzte_zeile = lng_letzte_zeile + 1
End If
Next
End With
End Sub
Gruß
Regina
Anzeige
AW: Zellen auf anderes Arbeitsblatt übertragen
25.10.2019 07:38:39
Rupprecht
Hallo Regina,
vielen lieben Dank für deine sehr schnelle und sehr gute Antwort.
Leider ist mir bei erstellen der Beispieldatei ein kleiner Fehler unterlaufen. Mit deinem Makro sucht er ja die letzte freie Zeile und schreibt dann die Daten in diese Zeile. In der Beispieldatei klappt das auch super, nur in der Originaldatei, ist es leider ein Formblatt, in der in den unteren Zeilen und dahinter auch noch etwas steht.
Wäre es möglich, dass das Makro nur in den Zellen I57 bis U117 sucht, welche Zeile leer sind, weil das in diesem Formblatt die Zellen sind, die ich befüllen muss.
Wäre es außerdem möglich, das dieser Bereich immer gelöscht wird, bevor das Makro dieses Bereich beschreibt? Denn wenn ich im ersten Blatt eine Änderung vornehme und dann auf dem zweiten Blatt das Makro ausführe, dann schreibt der es darunter, oder ich muss es von Hand löschen.
Außerdem ist mir noch aufgefallen, das die Pausenzeiten auch da eintragen werden, wo eigentlich keine Pause stattgefunden hat. Zum Beispiel schreibt das Makro in die zweite Zeile, den 8. Dienstag von 0:00 Uhr bis 0:30 Uhr und dann Pause von 21:00 Uhr bis 21:30 Uhr. Ist das möglich, dass das Makro zuvor prüft, ob diese Pausenzeit in dieser Arbeitszeit liegt?
Entschuldige bitte, das ich immer noch mehr möchte, aber es wäre super, wenn das so klappen würde.
Vielen lieben Dank nochmal, und einen schönen Tag,
Mike
Anzeige
Dann lad doch mal bitte....
25.10.2019 08:58:03
{Boris}
Hi,
...eine Mappe mit exakt den Originalkoordinaten hoch.
VG, Boris
AW: Zellen auf anderes Arbeitsblatt übertragen
25.10.2019 09:22:51
Regina
Hi, die ersten beiden Punkte sollten hier behoben sein:
Public Sub Uebertrag()
Dim obj_wks_ziel As Worksheet
Dim obj_wks_quelle As Worksheet
Dim lng_letzte_zeile As Long
Dim lng_spalte As Long
Set obj_wks_ziel = Worksheets("Zulagenblatt")  ' Hier Zieltabellenblatt benennen
Set obj_wks_quelle = Worksheets("Schichtplan")  ' Hier Quelltabellenblatt benennen
Zielblatt ermitteln
lng_spalte = 2       ' Startzeile im Quellblatt
obj_wks_ziel.Range("I57:U117").ClearContents
lng_letzte_zeile = 57
With obj_wks_quelle
For lng_spalte = 2 To 32
If .Cells(13, lng_spalte)  "" Then
obj_wks_ziel.Cells(lng_letzte_zeile, 1) = .Cells(3, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 2) = .Cells(4, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 3) = .Cells(13, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 4) = .Cells(14, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 5) = .Cells(9, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 6) = .Cells(10, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 7) = .Cells(11, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 8) = .Cells(12, lng_spalte).Value
lng_letzte_zeile = lng_letzte_zeile + 1
End If
If .Cells(15, lng_spalte)  "" Then
obj_wks_ziel.Cells(lng_letzte_zeile, 1) = .Cells(3, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 2) = .Cells(4, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 3) = .Cells(15, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 4) = .Cells(16, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 5) = .Cells(9, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 6) = .Cells(10, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 7) = .Cells(11, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 8) = .Cells(12, lng_spalte).Value
lng_letzte_zeile = lng_letzte_zeile + 1
End If
Next
End With
End Sub
Die Prüfung, ob die Pausenzeiten in den Arbeitszeiten liegen, ist nicht ganz trivial (Mitternachtsproblem), dass müsste ich mir heute abend in Ruhe ansehen. Falls vorher niemand anderes anspringt.
Gruß
Regina
Anzeige
AW: Zellen auf anderes Arbeitsblatt übertragen
25.10.2019 15:02:37
Regina
Hi,
zu Deinen Daten hab eich noch eine Rückfrage:
Soll die Pause 1 nur übertragen werden, wenn sie in der Zulagenzeit 1 liegt und die Pause 2 nur wenn sie in Zulagenzeit 2 liegt?
Oder:
Soll Pause 1 bzw. Pause 2 übertragen werden, wenn sie in einer der Zulagenzeiten liegt?
Da sehe ich noch nicht klar.
Gruß
Regina
AW: Zellen auf anderes Arbeitsblatt übertragen
26.10.2019 08:06:16
Rupprecht
Hallo Regina,
am besten wäre es, wenn es die Pausen nur anzeigen würde, wenn sie auch in dieser Zulagenzeit liegen. Wenn das aber nicht möglich ist, dann ist es auch so in Ordnung, denn dann lasse ich einfach den Übertrag von Pausenzeiten bei Zulagen von 00 Uhr bis 6 Uhr weg, denn es kommt sehr selten vor, das jemand noch Pausen nach 00 Uhr macht und dann müsste er es von Hand eintragen.
Eine andere Frage hätte ich allerdings noch, bei deinem zweiten Makro steht die Zeile "Zielblatt ermitteln". Hat diese Zeile eine Bedeutung, oder müsste davor noch ein "´" stehen?
Vielen Dank für deine Hilfe und entschuldige bitte, das ich Dir so viel Arbeit mache. Schönes Wochenende noch,
Gruß,
Mike
Anzeige
AW: Zellen auf anderes Arbeitsblatt übertragen
26.10.2019 11:34:34
Regina
Hi, hier der überarbeitete Code, die Pausen werden jetzt nur übertragen, wenn sie in der Zulagenzeit liegen. Einzige Ausnahme: Wenn die Zulagenzeit um 0 Uhr beginnt werden keine Pausen übertragen. Guck mal, ob das so passt.
Die eine Zeile im Code war in der Tat "über", war ein Rest, den ich nicht ganz gelöscht hatte.
Public Sub Uebertrag()
Dim obj_wks_ziel As Worksheet
Dim obj_wks_quelle As Worksheet
Dim lng_letzte_zeile As Long
Dim lng_spalte As Long
Set obj_wks_ziel = Worksheets("Zulagenblatt")  ' Hier Zieltabellenblatt benennen
Set obj_wks_quelle = Worksheets("Schichtplan")  ' Hier Quelltabellenblatt benennen
lng_spalte = 2       ' Startzeile im Quellblatt
obj_wks_ziel.Range("I57:U117").ClearContents
lng_letzte_zeile = 57
With obj_wks_quelle
For lng_spalte = 2 To 32
If .Cells(13, lng_spalte)  "" Then
obj_wks_ziel.Cells(lng_letzte_zeile, 1) = .Cells(3, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 2) = .Cells(4, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 3) = .Cells(13, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 4) = .Cells(14, lng_spalte).Value
If .Cells(9, lng_spalte).Value >= .Cells(13, lng_spalte).Value _
And CLng(.Cells(13, lng_spalte).Value * 24)  0 Then
obj_wks_ziel.Cells(lng_letzte_zeile, 5) = .Cells(9, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 6) = .Cells(10, lng_spalte).Value
End If
If .Cells(11, lng_spalte).Value >= .Cells(13, lng_spalte).Value _
And CLng(.Cells(13, lng_spalte).Value * 24)  0 Then
obj_wks_ziel.Cells(lng_letzte_zeile, 7) = .Cells(11, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 8) = .Cells(12, lng_spalte).Value
End If
lng_letzte_zeile = lng_letzte_zeile + 1
End If
If .Cells(15, lng_spalte)  "" Then
obj_wks_ziel.Cells(lng_letzte_zeile, 1) = .Cells(3, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 2) = .Cells(4, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 3) = .Cells(15, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 4) = .Cells(16, lng_spalte).Value
If .Cells(9, lng_spalte).Value >= .Cells(15, lng_spalte).Value _
And CLng(.Cells(15, lng_spalte).Value * 24)  0 Then
obj_wks_ziel.Cells(lng_letzte_zeile, 5) = .Cells(9, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 6) = .Cells(10, lng_spalte).Value
End If
If .Cells(11, lng_spalte).Value >= .Cells(15, lng_spalte).Value _
And CLng(.Cells(15, lng_spalte).Value * 24)  0 Then
obj_wks_ziel.Cells(lng_letzte_zeile, 7) = .Cells(11, lng_spalte).Value
obj_wks_ziel.Cells(lng_letzte_zeile, 8) = .Cells(12, lng_spalte).Value
End If
lng_letzte_zeile = lng_letzte_zeile + 1
End If
Next
End With
End Sub

Anzeige
AW: Zellen auf anderes Arbeitsblatt übertragen
26.10.2019 11:56:04
Regina
... Spalten im Übertrag musst Du Dir dann noch wieder anpassen. Ich befülle A bis H. Du willst ja ab I bis ... befüllen.
Gruß
Regina
AW: Zellen auf anderes Arbeitsblatt übertragen
26.10.2019 17:47:19
Rupprecht
Hallo Regina,
vielen lieben Dank für deine super Hilfe, leider konnte ich es noch nicht testen, aber sobald ich dazu komme, melde ich mich nochmal.
alleine hätte ich das nicht hin bekommen, also nochmals tausend Dank.
Ich wünsche Dir noch ein schönes Wochenende.
Gruß,
Mike
AW: Zellen auf anderes Arbeitsblatt übertragen
30.10.2019 14:10:52
Rupprecht
Hallo Regina,
entschuldige bitte, das ich mich erst heute melde, aber ich habe diese Woche Urlaub und war ein bisschen unterwegs.
Ich habe jetzt versucht, dein Makro auf unsere Originaldatei zu übertragen, komme aber leider nicht ganz zurecht. Bei mir kommt immer die Fehlermeldung "Index außerhalb des gültigen Bereiches", ich weiß aber nicht warum.
Könnte ich dir eventuell mal die Originaldatei zu schicken? Möchte sie aber ungern hier ins Forum stellen.
Schönen Tag noch,
Gruß
Mike
Anzeige
AW: Zellen auf anderes Arbeitsblatt übertragen
30.10.2019 14:20:42
Regina
ok, dann schick mir die Datei:
kontakt@r-resch.de
Gruß
Regina

337 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige