Clever-Excel-Forum

Normale Version: Neulingsfrage
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hi

Hier mein Problem (Formel soll in Zelle M4 stehen):

Wenn in Zelle D4 „Feiertag“ oder „Urlaub“ oder „Zeitausgleich“ steht sollen in den Zellen B4 die Uhrzeit „7:30“ und in C4 die Uhrzeit „15:42“ stehen!
Das ist jetzt nur eine Zeile, das ganze soll sich dann bis Zeile 35 fortsetzen.

Hoffentlich kann mir jemand weiterhelfen
Danke
Hallo,


Zitat:Hier mein Problem (Formel soll in Zelle M4 stehen):


das geht so nicht, Formeln können nur auf die Zelle wirken, in der sie stehen.

So würde das gehen:

Tabelle1

ABCD
3
47:3015:42Urlaub
57:3015:42Feiertag
67:3015:42Zeitausgleich
Formeln der Tabelle
ZelleFormel
B4=WENN(ODER(D4="Urlaub";D4="Feiertag";D4="Zeitausgleich");0,3125;0)
C4=WENN(ODER(D4="Urlaub";D4="Feiertag";D4="Zeitausgleich");0,65416667;0)
B5=WENN(ODER(D5="Urlaub";D5="Feiertag";D5="Zeitausgleich");0,3125;0)
C5=WENN(ODER(D5="Urlaub";D5="Feiertag";D5="Zeitausgleich");0,65416667;0)
B6=WENN(ODER(D6="Urlaub";D6="Feiertag";D6="Zeitausgleich");0,3125;0)
C6=WENN(ODER(D6="Urlaub";D6="Feiertag";D6="Zeitausgleich");0,65416667;0)

Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8
Hallo,

falls du in den Zellen der Spalte D auch andere Begriffe verwenden willst und in Spalte B bzw. C manuell andere Zeiten eintragen willst, werden dann die Formeln überschrieben.
Man kann die Formeln mit VBA wiederherstellen oder manuell neu eintragen. 
Aber man kann es auch gleich so machen (Ins Modul des Tabellenblattes):

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i%, varTage$
    varTage = "feiertag~~urlaub~~zeitausgleich"                 'ggf. Anpassen/Erweitern
    If Not Intersect(Target, Range("D4:D35")) Is Nothing Then
        i = ActiveCell.Row
        If Target.Cells <> "" Then
            If InStr(1, varTage, LCase(Cells(i, 4))) > 0 Then
                Cells(i, 2) = "07:30"
                Cells(i, 2).NumberFormat = "h:mm"
                Cells(i, 3) = "15:42"
                Cells(i, 3).NumberFormat = "h:mm"
            End If
        Else
            Cells(i, 2) = ""
            Cells(i, 3) = ""
        End If
    End If
End Sub
Gruß Uwe
Hi Uwe,

ist das wirklich Dein Rat an einen "Neuling"?
Abgesehen davon fliegt Deine Code bei Mehrfacheingabe ab - aber viel entscheidender: Die Einträge verrutschen 1 Zeile nach unten, da Du mit ActiveCell arbeitest (es sei denn, man hat in den Optionen eingestellt, dass Enter keine Selektionsänderung bewirkt).
Hallo Boris,

Sorry, das mit dem Neuling, hatte ich überlesen.
Du hast recht - war unüberlegt von mir. Das letztere kann man auffangen. Runterziehen und im Block geht nur mit On Error.
Gruß Uwe
Hallo ChewChew,

dass das so nicht geht, hat Klaus-Dieter ja schon erläutert. Dein Ansatz muss ein anderer sein. Es gibt ja mit Sicherheit eine Zelle (angenommen es ist N4), in der du die Differenz zwischen Anfang und Ende errechnest. Und genau in dieser Zelle (N4) musst du Urlaub, ZA usw. vorher abfragen. Also WENN in D4 einer der besagten Werte drinsteht, DANN muss in N4 die Differenz zwischen 15:42 und 7:30 errechnet werden. WENN das nicht der Fall ist, dann rechne die Differenz zwischen C4 und B4.
Code:
=WENN(ODER(D4="Urlaub";D4="Zeitausgleich";D4="Feiertag");ZEITWERT("15:42")-ZEITWERT("7:30");C4-B4)
Noch etwas feiner, ohne Zeitwert:
Code:
=WENN(ODER(D4="Urlaub";D4="Zeitausgleich";D4="Feiertag");492/(24*60);C4-B4)