Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1856to1860
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
VBA Zeitwert größer als
23.11.2021 16:15:54
Peer
Hallo zusammen.
Ich brauche wieder einmal einen (hoffentlich) kleinen Gedankenanstoß zu folgendem Anliegen.
Ich habe in einer Zelle im Sheet "Gesamtstunden" C20 einen Zeitwert (SollArbZ) im Zellformat hh:mm. Aktuell steht hier "07:48"
Nun habe ich eine Schleife, die alle relevanten Zeilen ab Zeile 12 durchläuft und die Werte aus der(n) betreffenden Spalte(n) in die Spalte 14 schreiben, wenn der Wert 0 ist, wobei er weitere bestimmten String (Ruhe, Krank, Urlaub) nicht enthalten darf.
Soweit läuft alles auch zufriedenstellend.
Nun möchte ich noch die Bedingung stellen und prüfen lassen, ob die SollArbZ (Zellwert C20) größer ist, und nur dann den Wert aus der zugehörigen Spalte in Spalte 14 einzutragen.

Public Sub SonstAngaben_ArbZ()
Dim i As Long, datSollArbz As Integer
'datSollArbz = Sheets("Gesamtstunden").Cells(20, 3) * 24
If WorksheetFunction.CountA([T12:U42]) = 0 Then
MsgBox "keine Arbeitszeiten vorhanden"
Else:
With ActiveSheet
For i = 12 To .Cells(44, 20).End(xlUp).Row
datSollArbz = .Cells(i, 22) * 24
'wenn Zelle Spalte 14 leer und Zelle Spalte 20 nicht leer, dann übertrage 20 und 21 nach 14
If Cells(i, 14) = "" Then
If Len(Cells(i, 20)) And Len(Cells(i, 21)) Then
Select Case Cells(i, 4)
Case "Ruhe", "Krank", "Urlaub"
Cells(i, 14) = ""
Case Else
If Cells(i, 22) > 7.8 Then
Cells(i, 14) = Cells(i, 20).Text & " - " & Cells(i, 21).Text
Cells(8, 14).Value = "Arbeitszeit"
Cells(i, 14).HorizontalAlignment = xlCenter
End If
End Select
End If
End If
Next i
End With
End If
End Sub
Wie kann ich diese Bedingung noch einfügen?
Vielen Dank für jeden Anstoss.
LG
Peer

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Zeitwert größer als
23.11.2021 16:27:53
Hajo_Zi
Hallo Peer,
es steht eine Zeit in der Zelle.

If Cells(i, 22) > 7.8 /24Then
GrußformelHomepage
In diesem Forum bekomme nur selten eine Mailbenachrichtigung, weitere Antworten sind zufällig.
AW: VBA Zeitwert größer als
23.11.2021 16:55:21
Peer
Hallo Ha-Jo.
Richtig, die Zelle ist im Datumsformat.
Wie meinst du deine Hilfe?
Aktuell ist in der Zelle der Zeitwert 07:48.
Diesen würde ich in Dezimal doch mit *24 ausgeben? Dann kommt eigentlich 7,8 raus, oder?

Dim i As Long, datSollArbz As Integer, datMehrZ As Integer
datSollArbz = Sheets("Gesamtstunden").Cells(20, 3) * 24
If WorksheetFunction.CountA([T12:U42]) = 0 Then
MsgBox "keine Arbeitszeiten vorhanden"
Else:
With ActiveSheet
For i = 12 To .Cells(44, 20).End(xlUp).Row
datMehrZ = .Cells(i, 22) > datSollArbz
'wenn Zelle Spalte 14 leer und Zelle Spalte 20 nicht leer, dann übertrage 20 und 21 nach 14
If Cells(i, 14) = "" Then
If Len(Cells(i, 20)) And Len(Cells(i, 21)) Then
Select Case Cells(i, 4)
Case "Ruhe", "Krank", "Urlaub"
Cells(i, 14) = ""
Case Else
If Len(Cells(i, 22)) > 7.8 / 24 Then
Cells(i, 14) = Cells(i, 20).Text & " - " & Cells(i, 21).Text
Cells(8, 14).Value = "Arbeitszeit"
Cells(i, 14).HorizontalAlignment = xlCenter
End If
End Select
End If
End If
Next i
End With
End If
...bringt leider nichts.
Gruß Peer
Anzeige
AW: VBA Zeitwert größer als
23.11.2021 17:01:12
Hajo_Zi
Hallo Peer,
meine Antwort bezog sich auf den ersten Beitrag, da Stand nichts davon das die Zeit umgerechnet wurde in Deziaml.
Ich bin dann raus da
Zu Deiner Datei kann ich nichts schreiben, was wohl daran liegt das ich nicht auf fremde Rechner schaue.Ich baue keine Datei nach.
Sollte die Datei verlinkt werden?
Wenn du an Stelle einer Demomappe deine Originalmappe hochladen willst, diese aber sensible Daten enthält, kannst du diese Daten
http://www.ms-office-forum.de/forum/showthread.php?t=322895
ändern.
Bilder lade ich mir nicht runter, da Excel damit nichts anfangen kann.
http://www.excel-ist-sexy.de/bilder-statt-datei/
Hochgeladene Bilder können zwar als solche in Excel importiert werden, sind jedoch bei der Lösung von Problemen nicht sehr hilfreich, da man die eigentlichen Daten nicht ohne große und zeitraubende Umwege direkt in die Tabelle übertragen kann.
Das ist nur meine Meinung zu dem Thema.
http://www.excel-ist-sexy.de/bilder-statt-datei/
Hochgeladene Bilder können zwar als solche in Excel importiert werden, sind jedoch bei der Lösung von Problemen nicht sehr hilfreich, da man die eigentlichen Daten nicht ohne große und zeitraubende Umwege direkt in die Tabelle übertragen kann.
Das ist nur meine Meinung zu dem Thema.
Gruß Hajo
Anzeige
AW: VBA Zeitwert größer als
23.11.2021 17:21:12
Peer

meine Antwort bezog sich auf den ersten Beitrag, da Stand nichts davon das die Zeit umgerechnet wurde in Deziaml.
Stimmt, ich hatte auch angenommen, dass es ohne Umwandlung geht. Die Umwandlung war nur als Alternative gedacht.
Trotzdem Danke.
Gruß
Peer
AW: VBA Zeitwert größer als
23.11.2021 17:28:47
Peer
Ich habe versucht, weiterhin ein Lösung zu finden.
Wandel den Zeitwert in einen String um. ("7:48")
Dann frage ich nach, wenn der Wert nicht "7:48" ist, dann führe Code aus...Tut er aber nicht.
Dann war meine Überlegung, den Zeitwert in eine Dezimalzahl umzuwandeln, bei dem nun 7,8 rauskommen sollte.
Dann prüfe ich, wenn Wert größer 7.8 ist, führe Code aus... Macht er auch nicht.
Aktuell bin ich an diesem Punkt...

Dim i As Long, datSollArbz As String, datMehrZ As String
datSollArbz = Format(Sheets("Gesamtstunden").Cells(20, 3), "h:mm")
datMehrZ = datSollArbz  "7:48"
If WorksheetFunction.CountA([T12:U42]) = 0 Then
MsgBox "keine Arbeitszeiten vorhanden"
Else:
With ActiveSheet
For i = 12 To .Cells(44, 20).End(xlUp).Row
'datMehrZ = Format(.Cells(i, 22), "h:mm")
'wenn Zelle Spalte 14 leer und Zelle Spalte 20 nicht leer, dann übertrage 20 und 21 nach 14
If Cells(i, 14) = "" Then
If Len(Cells(i, 20)) And Len(Cells(i, 21)) Then
Select Case Cells(i, 4)
Case "Ruhe", "Krank", "Urlaub"
Cells(i, 14) = ""
Case Else
If Len(Cells(i, 22)) = datMehrZ Then
Cells(i, 14) = Cells(i, 20).Text & " - " & Cells(i, 21).Text
Cells(8, 14).Value = "Arbeitszeit"
Cells(i, 14).HorizontalAlignment = xlCenter
End If
End Select
End If
End If
Next i
End With
End If

Anzeige
AW: VBA Zeitwert größer als
23.11.2021 18:57:49
Yal
Hallo Peer,
wie Hajo es richtig gesagt, besteht eine Zeiteingabe nur auf Nachkommastellen, wenn man diese Menge als Dezimal betrachtet.
Was vor der Komma ist, ist das Datum.
Daher sind 7,8 Stunden in Zeitformat 7,8 / 24 = 0,325
Oder Du benutzst eine Zeit-Funktion, wie TimeSerial:
Dim MaxZeit As Time
MaxZeit = TimeSerial(7, 48, 0)
48 Min sind 8 Zehntel von 60 Minuten.
Im allgemein habe ich daran gewöhnt, die Zeiten mit dem Datentyp Zeit zu behandeln und die Dauer als Dezimal, aber dann Stunden komma Zehntel und Hunderstel von Stunden.
VG
Yal
AW: VBA Zeitwert größer als
23.11.2021 21:09:14
Peer
Hallo Yal.
Dim .. As Time wird vom Debugger bemängelt.
Ist nicht Date die richtige Deklaration?
Ich habe deinen Vorschlag zu Herzen genommen und habe folgendes versucht...

Dim i As Long, datSollArbz As String, datMehrZ As Date
datSollArbz = Format(Sheets("Gesamtstunden").Cells(20, 3), "h:mm")
datMehrZ = TimeSerial(7, 48, 0)
If WorksheetFunction.CountA([T12:U42]) = 0 Then
MsgBox "keine Arbeitszeiten vorhanden"
Else:
With ActiveSheet
For i = 12 To .Cells(44, 20).End(xlUp).Row
'datMehrZ = .Cells(i, 22).Value / 24
'wenn Zelle Spalte 14 leer und Zelle Spalte 20 nicht leer, dann übertrage 20 und 21 nach 14
If Cells(i, 14) = "" Then
If Len(Cells(i, 20)) And Len(Cells(i, 21)) Then
Select Case Cells(i, 4)
Case "Ruhe", "Krank", "Urlaub"
Cells(i, 14) = ""
Case Else
'wenn Wert in Spalte 22 größer 7:48 ist
If Len(Cells(i, 22)) > TimeSerial(7, 48, 0) Then    'oder > datMehrZ
Cells(i, 14) = Cells(i, 20).Text & " - " & Cells(i, 21).Text
Cells(8, 14).Value = "Arbeitszeit"
Cells(i, 14).HorizontalAlignment = xlCenter
End If
End Select
End If
End If
Next i
End With
End If
...ohne Erfolg
Peer
Anzeige
AW: VBA Zeitwert größer als
24.11.2021 11:24:18
Yal
Hallo Peer,
Was passiert in folgender Prüfung:

If Len(Cells(i, 22)) > TimeSerial(7, 48, 0) Then    'oder > datMehrZ
die Länge der Inhalt (Wenn als Text betrachtet), soll kleiner sein als 0,325?
es war vielleicht eher so gemeint

If Cells(i, 22).Value > TimeSerial(7, 48, 0) Then    'oder > datMehrZ
VG
Yal
AW: VBA Zeitwert größer als
24.11.2021 16:51:22
Peer
Hallo Yal.
Du hast natürlich recht.
Ich habe einfach Copy&Paste gemacht, ohne darüber nachzudenken.
Ich habe mal in einer sehr stark reduzierten Beispieldatei den Code mit deinem Vorschlag versehen.
Dabei ist mir aufgefallen, das im Blatt Februar scheinbar alles richtig funktioniert, aber im Blatt Januar nicht.
Im Register "Erfassungsbelege" ist im Ribbon "sonstige Angaben" die Dropbox zur Auswahl.
Vielleicht findet jemand den Fehler.
https://www.herber.de/bbs/user/149369.xlsm
Gruß
Peer
Anzeige
Ok, gut gemeint, aber...
24.11.2021 17:09:38
Yal
...ich furchte, da werden sich wenige Freiwilligen finden, die sich die Lösung des Problems der Nadel in dem Heuhaufen widmen werden.
Der Ribbon lässt sich nicht laden.
Viele Formeln haben einen Bezugsfehler.
Die urpsunglich erwähnte Blatt "Gesamtstunden" ist nicht vorhanden.
Sorry.
VG
Yal
Schade...
24.11.2021 17:48:55
Peer
... aber bis jetzt konnte jeder Helfer dieses Ribbon öffnen. Derzeit weiß ich nicht, woran es liegen könnte. Eventuell Verweise...
Die fehlenden Bezüge sind durch das Löschen der weiteren Blätter entstanden, die ich, wie auch das Blatt Gesamtstunden, entfernen musste, weil die Datei sonst zu groß wäre zum Hochladen. Sie wären meiner Meinung nach auch nicht relevant gewesen für die Demonstration.
Hmm....
Was kann ich noch machen, bei einem Problem, dass anfangs einfach zu lösen schien?
VG
Peer
Anzeige
AW: VBA Zeitwert größer als
28.11.2021 06:33:58
Oberschlumpf
Hi Peer,
und wenn du eine Bsp-Datei erstellst + per Upload zeigst, die auch funktioniert?
Du meinst zwar, Zitatauszug: "...Sie wären meiner Meinung nach auch nicht relevant gewesen für die Demonstration...."
Na ja, wie sollen wir etwas testen können, wenn anstelle eines (richtigen?) Wertes nur #Bezug angezeigt wird?!
Ciao
Thorsten
...ach ja...ich kann dein Ribbon schon sehen und auswählen...aber nich schön finde ich, dass bei Rechtsklick auf einen der Tabellenblattnamen der Eintrag "Code anzeigen" fehlt...
AW: VBA Zeitwert größer als
28.11.2021 17:48:38
Peer
Hallo Thorsten.
Ich stelle die Beispiel-Datei nochmal bereinigt ein. Alle Bezüge sind entfernt.
https://www.herber.de/bbs/user/149446.xlsm
Ich habe in meinem Projekt den Kontext-Befehl "Code anzeigen" deaktiviert, weil ich nicht möchte, das die Kollegen, die mit der Datei ebenfalls arbeiten, im VBA-Editor arbeiten, da sie noch weniger Ahnung davon haben, als ich. ;-) und daran herumprobieren. Ganz fehlerfrei ist mein Projekt (noch) nicht...
Ich gehe immer über "Entwicklungstools" in den Editor. Das kannst du doch auch. Und im Modul mod_SonstAngaben ist besagte Code.
Ich hoffe, ich konnte nun alle Vorgaben für die Hilfe erfüllen.
Gruß
Peer
Anzeige
ich kann leider nicht helfen
28.11.2021 22:11:40
Oberschlumpf
Hi Peer,
zuerst informierte ich dich, dass man mit ungültigen Formeln (= #Bezug) nicht testen kann.
Nun zeigst du uns ne Datei ganz ohne Formeln.
Ok, du meinst, diese Formeln sind unwichtig - aber da zumindest ich deine Datei ja ganz und gar nicht kenne, erkenne ich auch den Überblick nicht, wenn nun Formeln fehlen und kann weiterhin nicht testen (um zu verstehen und vllt um zu lösen).
Daher bin ich leider raus - aber ich bin sicher, es gibt "schlauere Köpfe" als meiner.
Ciao
Thorsten
AW: ich kann leider nicht helfen
29.11.2021 06:16:00
Peer
Guten Morgen Thorsten.
Ich stecke in einem Dilemma.
Wenn ich alle Bezüge zum Laufen bringe, müßte ich alle Sheets behalten und dann ist die Datei zu groß zum Hochladen. Lasse ich die Bezüge weg, kann nicht geholfen werden.
Vielleicht habe ich mein Problem nicht richtig erläutert?
Ich möchte die Zeitwerte aus Spalte 20 und 21 zusammengefaßt in Spalte 14 kopieren, wenn in Spalte 22 der Zeitwert größer 7:48 ist. Die Schleife durchläuft die Zeilen 12 bis 42 (bzw. 44 wie Peter und HaJo oben erwähnt haben). In Spalte 22 ist die Formel enthalten, die Zeitwerte aus Spalte 20 und 21 errechnet abzüglich des Zeitwertes aus Spalte 24 (Pause).
Ich hoffe, ich konnte jetzt noch einmal verdeutlichen, was ich meine und entschuldige mich dafür, daß ich mich so blöd anstelle.
Notfalls lass ich es.
https://www.herber.de/bbs/user/149446.xlsm
LG
Peer
Anzeige
AW: ich kann leider nicht helfen
29.11.2021 23:52:00
Tobias
Hallo Peer
Wie Yal bereits erwähnte ist 07:48 im Zeitformat von Excel(keine Ahnung wie das aussieht) 0,325! Folglich sollte folgende If-Bedingung funktionieren:

If Cells(i, 22) > 0.325 Then
wenn du deine 7.8 im Code austauscht!
Über

debug.print Range("C20")
kann man das auch überprüfen, wie diese Werte zustande kommen verstehe ich allerdings gerade selber nicht.
Es ist auch definitiv zu spät um noch drüber nachzugrübeln!
Schöne Grüße
Tobias
AW: ich kann leider nicht helfen
30.11.2021 18:00:32
Peer
Hallo Tobias.
Vielen Dank für deine Rückmeldung und das du dich mir zu später Stunde noch annimmst.
Ich habe es im Direktfenster eingegeben und bekam die 0.325 (0,325). Leider konnte ich auch hier nicht die Zeilen "filtern", die es betraf. Ich bin jedenfalls nicht weiter gekommen.
Hmmm....
Wie gesagt, ich verstehe nicht, warum es im "Februar" alles funktioniert und im "Januar" nicht?
Gruß
Peer
Anzeige

312 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige