Zwei anweisungen in Excel-Formel ausführen?

  • Excel

Es gibt 29 Antworten in diesem Thema. Der letzte Beitrag () ist von Kathleen.

    Zwei anweisungen in Excel-Formel ausführen?

    Hallo zusammen,

    ich würde gerne in einer stinknormalen Wenn Dann sonst formel eine zweite Anweisung für die dann Bedingung einfügen. Die Zelle in der die Formel steht soll mir den Wert einer Zelle übertragen wenn die Bedingung erfüllt ist. soweit so gut, klappt auch. aber nun kommt der haken: ich möchte, dass der gleichzeitig dem Feld rechts neben dem abgerufenen zellenwert soll den wert x erhalten.

    der sinn dieser Sache ist, ich habe bisher die regelung in der x zelle, dass =Wenn(länge(A3)=5;"x";"")
    allerdings überschneidet sich das mit meinem Code. dieser berechnet meine Zellen nach einem funktionierenden Schema und trägt in eben die zellen x ein, wo diese formel drin steht. damit löscht der die formel und ich müsste immer wieder die formel runter kopieren.

    Nun war die Idee, die formel entweder aus dem code heraus zu steuern oder in der zuerst beschriebenen zelle eine zweite Anweisung einzufügen. Das Problem wird sein, dass eine zelle in Excel ja keine andere zelle steuern kann durch ihre formel.

    Wisst ihr das was mir helfen könnte?

    Viele Grüße
    Sonja

    PS:
    Folgendes habe ich mir überlegt:

    Visual Basic-Quellcode

    1. If Len(Application.Cells(i, 3)) = 5 Then
    2. Application.Cells(i, 27).Value = "x"
    3. End If


    im ersten durchlauf hat der die x'e eingefügt und den benutzer nicht nach seiner eingabe für die fehlenden felder gefragt, beim zweiten durchlauf fragte der nach den werten und gab mir einen WERT! fehler in der Zelle mit den werten die der benutzer einträgt aus und im drittendurchlauf kam der auf die Idee, dass zeile 1 des codes oben "Typen unverträglich!" ist. ich bin langsam ratlos. nach dem dritten durchlauf bleibt die Fehlermeldung des dritten durchlaufs. das Problem ist wohl, dass len auf einen string zugreift und die übergeordnete Funktion alles als variablen und value betrachtet.
    "Der Visual Basic ist nur so schlau wie der, der davor sitzt" - Na schön! Dann steh ich eben auf!

    "Wenn du denkst es geht nicht mehr kommt irgendwo ein Lichtlein her"
    If Tunnel.Licht = JemandImTunnelDerVerzweifeltIst Then Licht.Aus = True

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Kathleen“ ()

    Hey,

    kleine Frage:
    Kannst du uns ein Beispiel zukommen lassen?

    Kathleen schrieb:

    immer wieder die formel runter kopieren


    Wenn ich es richtig verstanden habe, möchtest du immer auf eine Zelle zugreifen und die Information dieser Zelle nutzen, da diese ja den Wert beinhaltet den du brauchst?
    Vielleicht kannst du das generell anders lösen. Ein $ in einer Funktion (Zellen-Buchstabe und oder Zellen-Zahl) kann dir sicherlich bei dem Problem helfen. Habe mal ein Beispiel angehangen.
    (Ansonsten versuche mal eine abgespeckte Version deines ExcelSheets anzuhängen)

    Grüße,
    Drahuverar
    Dateien
    Option Strict On!
    Hallo,

    also ich denke nicht, dass ich das machen kann wie du grade vorgeschlagen hast im letzten Absatz. im anhang findest du ein bild wie die Excel grade aussieht. in spalte aa sollten hinter den Uhrzeiten x oder eben nichts stehen. da kann ich keine formel drin brauchen und was darin steht entscheidet nicht ob darüber ein x steht, sondern ob im vorderen teil der Tabelle (kein Foto vorhanden) eben die Ankunftszeit da ist. was du auf dem bild für zahlen siehst sind die Ankunftszeiten, die über eine Inputbox vom Benutzer ergänzt werden sollen.

    außerdem sollte der benutzer durch die x'e auch seine antworten revidieren können und neu eintragen können, solange das zeiterfassungsgerät in einer der vorigen Tabellen diesen wert nicht schon eingetragen hat.
    Bilder
    • Tabellenansicht.PNG

      13,22 kB, 337×437, 120 mal angesehen
    "Der Visual Basic ist nur so schlau wie der, der davor sitzt" - Na schön! Dann steh ich eben auf!

    "Wenn du denkst es geht nicht mehr kommt irgendwo ein Lichtlein her"
    If Tunnel.Licht = JemandImTunnelDerVerzweifeltIst Then Licht.Aus = True
    Okay. Also wenn vorne bei der Uhrzeit was steht soll dort ein X sein?
    Ansonsten nichts?

    =WENN(ISTLEER(DEINEZELLE);"";"x")
    Wenn die Zelle leer ist, weil Zeiterfassungsgerät nichts gefüllt hat (oder Nutzer) dann mach: nix "" rein ansonsten "x" ?
    Sowas?

    Kathleen schrieb:

    entscheidet nicht ob darüber ein x steht, sondern ob im vorderen teil der Tabelle


    Oder überhaupt gar keine Formel? (Im Grunde sieht man diese ja nicht~)
    Option Strict On!
    fast. also in der spalte, wo evtl x drin steht darf aufgrund meines codes (der alles andere regelt) keine formel drin stehen. ich habe dem schon beigebracht, dass er die zelle für die Uhrzeit abfragt, sobald da kein x steht also durch den code drin steht soll er das abfragen.

    Visual Basic-Quellcode

    1. Sub Aktualisieren_Klicken()
    2. Dim objRange As Range
    3. Dim i As Integer
    4. Dim j As Integer
    5. For i = 3 To 31 Step 1
    6. If Len(Application.Cells(i, 3)) = 5 Then
    7. Application.Cells(i, 27) = "x"
    8. Else
    9. Application.Cells(i, 27) = ""
    10. End If
    11. If Application.Cells(i, 27).Value <> "x" Then 'Inhalt der Zelle rechts neben dem Wert auf "x" prüfen > wenn ungleich "x"
    12. Application.Cells(i, 26).Dirty 'erzwingt die Berechnung neu auszuführen (dirty)
    13. If Eingabe = True Then 'Wenn die Variable "Eingabe" Wahr entspricht
    14. Application.Cells(i, 27).Value = "x" 'setzte die Zelle rechts neben dem Wert auf "x" und verhindert somit die Löschung und Neuberechnung
    15. End If
    16. ElseIf Application.Cells(i, 27).Value <> "x" Then
    17. End If
    18. Next i
    19. For j = 3 To 31 Step 1
    20. If Application.Cells(j, 30).Value <> "x" Then 'Inhalt der Zelle rechts neben dem Wert auf "x" prüfen > wenn ungleich "x"
    21. Application.Cells(j, 29).Dirty 'erzwingt die Berechnung neu auszuführen (dirty)
    22. If Eingabe = True Then 'Wenn die Variable "Eingabe" Wahr entspricht
    23. Application.Cells(j, 30).Value = "x" 'setzte die Zelle rechts neben dem Wert auf "x" und verhindert somit die Löschung und Neuberechnung
    24. End If
    25. ElseIf Application.Cells(j, 30).Value <> "x" Then
    26. End If
    27. Next j
    28. Eingabe = True '"Eingabe" wird auf Wahr gesetzt
    29. End Sub


    nur was der ohne die formel in der x zelle nicht auf die reihe bekommt ist das nachschauen, ob das zeiterfassungsgerät da schon einen wert hat und dieses Feld eben nicht mehr einzutragen ist. das ganze ausrechenen wird von einem button ausgelöst und ich glaube, wenn ich das in den selben code schreibe, wird der die benutzereingaben ignorieren. Der benutzer soll widersprechen könnnen, also sagen könnnen, wenn er ein Feld anders vom wert haben möchte
    "Der Visual Basic ist nur so schlau wie der, der davor sitzt" - Na schön! Dann steh ich eben auf!

    "Wenn du denkst es geht nicht mehr kommt irgendwo ein Lichtlein her"
    If Tunnel.Licht = JemandImTunnelDerVerzweifeltIst Then Licht.Aus = True

    Kathleen schrieb:

    ist das nachschauen, ob das zeiterfassungsgerät da schon einen wert hat


    ...hört sich nach einer IF Abfrage an, die du vorne dran packen solltest.
    Bloß weiß ich nicht wirklich wie du die Bedingung abfragen willst, bzw. was die Bedingung ist. (Hört sich fast schon Paradox an :D )
    Entweder ist was vorhanden oder nichts.

    Wenn du eine weitere Bedingung hast bräuchtest du ja eigentlich eine weitere Spalte, oder?
    Diese könntest du letzten Endes auch abfragen.
    Zur Not anders an die Sache ran gehen. Könnte man das vielleicht mit Excel-Verschachtelung erreichen, braucht man den Button unbedingt?
    Option Strict On!
    hm, ich schau mal, ob das mit zwei spalten geht.

    also ich habe mir das mal angeschaut. ich brauche den button, allein schon um meine abfrage und Inputbox aufzurufen. nur die Idee wäre, mit der ersten spalte hinter der Uhrzeitdem erstmal zu sagen, hier musst du nichts tun. Mit der spalte rechts daneben könnte man die abfrage wie eine mutter Kind Beziehung übergehen und der benutzer kann sagen: hey, ich will den wert da vorne aber wohl überschreiben!
    das würde auch den fall vorbeugen, dass beim einlesen der Daten vom zeiterfassungsgerät ein fehler unterlaufen ist, weil der unterwiesene Benutzer dies dann überschreiben kann.
    "Der Visual Basic ist nur so schlau wie der, der davor sitzt" - Na schön! Dann steh ich eben auf!

    "Wenn du denkst es geht nicht mehr kommt irgendwo ein Lichtlein her"
    If Tunnel.Licht = JemandImTunnelDerVerzweifeltIst Then Licht.Aus = True

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Kathleen“ ()

    Hey,

    sollte auf jeden Fall gehen. Ich habe immer lieber eine weitere Spalte angelegt, so kannst du und oder jemand anderes später ziemlich schnell nachvollziehen was passiert. (Durch das Highlighten der jeweiligen Zellen in EXCEL)

    Was ich immer gerne mache; Ein weiteres Sheet anlegen auf dem ich die Informationen hinterlege ^^
    Die kann man sich super abgreifen und keiner sieht sie~ Beim Druck stört es auch nicht.. :thumbsup:

    Excel gibt dir viele Bearbeitungsmöglichkeiten.Habe schon einmal eine Komplette Personalplanung abgebildet.. war aber auch ziemlich aufwendig..
    Option Strict On!
    weißt du wie man eine If bedinung unterbricht? oder macht man das dann mit case oder wie? Ich könnte mir vorstellen, dass man den entscheiden lässt:

    1 Möglichkeit: Spalte AA hat "X" und Spalte AB "" dann ruf deine nächste schleife auf (also die nächst untere zelle)
    2 Möglichkeit: Spalte AA hat "X" und Spalte AB "X" dann ruf die Bearbeitung auf
    3 Möglichkeit: Spalte AA hat "" und Spalte AB "X" dann ruf Bearbeitung auf
    4 Möglichkeit: Beide leer, dann bearbeitung

    die schleife zum weiterlaufen klappt soweit, weil das innere if ja bestimmt was weiter geschieht. Ich rufe durch einen boolean wert eine Function auf wo die Input box drin ist
    "Der Visual Basic ist nur so schlau wie der, der davor sitzt" - Na schön! Dann steh ich eben auf!

    "Wenn du denkst es geht nicht mehr kommt irgendwo ein Lichtlein her"
    If Tunnel.Licht = JemandImTunnelDerVerzweifeltIst Then Licht.Aus = True

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Kathleen“ ()

    Kathleen schrieb:

    1 Möglichkeit: Spalte AA hat "X" und Spalte AB "" dann ruf deine nächste schleife auf (also die nächst untere zelle)
    2 Möglichkeit: Spalte AA hat "X" und Spalte AB "X" dann ruf die Bearbeitung auf
    3 Möglichkeit: Spalte AA hat "" und Spalte AB "X" dann ruf Bearbeitung auf
    4 Möglichkeit: Beide leer, dann bearbeitung

    entspricht etwa

    Quellcode

    1. ​WENN AA="" DANN
    2. BEARBEITEN()
    3. SONST
    4. WENN AB="X" DANN
    5. BEARBEITEN()
    6. END
    7. END
    @xtts 02 : aber wenn beides leer ist soll der auch bearbeiten. und du beachtest den fall nicht, wenn nur bei AA "x" steht

    @Drahuverar: ich wollte das nach Möglichkeit in VBA machen, weil ich eben keine formel in der bearbeitbaren AB haben möchte
    "Der Visual Basic ist nur so schlau wie der, der davor sitzt" - Na schön! Dann steh ich eben auf!

    "Wenn du denkst es geht nicht mehr kommt irgendwo ein Lichtlein her"
    If Tunnel.Licht = JemandImTunnelDerVerzweifeltIst Then Licht.Aus = True
    Also so wie du es gesagt hast, so habe ich es mal abgebildet;
    Müsste ja dann so aussehen, wenn alle Möglichkeiten abgefragt werden..
    Ist jetzt einfach mal abgetippt, hab es nicht getestet- Sollte aber so sein

    VB.NET-Quellcode

    1. If Cell.Range("AA") = "X" And Cell.Range("AB") = "" Then 'Nur AA 'X'
    2. '(Mach nix und geh einfach auf die Nächste Abfrage
    3. ElseIf Cell.Range("AA") = "X" And Cell.Range("AB") = "X" Then 'Beide 'X'
    4. 'Bearbeitung()
    5. ElseIf Cell.Range("AA") = "" And Cell.Range("AB") = "X" Then 'Nur AB 'X'
    6. 'Bearbeitung()
    7. ElseIf Cell.Range("AA") = "" And Cell.Range("AB") = "" Then 'Beide leer
    8. 'Bearbeitung()
    9. End If
    Option Strict On!
    jep, ich hab grad rumprobiert. bis auf die Schönheit funktioniert es soweit:

    Visual Basic-Quellcode

    1. For i = 3 To 31 Step 1
    2. If Application.Cells(i, 27).Value = "x" Then
    3. End If
    4. If Application.Cells(i, 27).Value = "" And Application.Cells(i, 28).Value = "x" Then
    5. Application.Cells(i, 26).Dirty 'erzwingt die Berechnung neu auszuführen (dirty)
    6. If Eingabe = True Then 'Wenn die Variable "Eingabe" Wahr entspricht
    7. Application.Cells(i, 27).Value = "x" 'setzte die Zelle rechts neben dem Wert auf "x" und verhindert somit die Löschung und Neuberechnung
    8. End If
    9. End If
    10. If Application.Cells(i, 27).Value = "" And Application.Cells(i, 28).Value = "" Then
    11. Application.Cells(i, 26).Dirty 'erzwingt die Berechnung neu auszuführen (dirty)
    12. If Eingabe = True Then 'Wenn die Variable "Eingabe" Wahr entspricht
    13. Application.Cells(i, 27).Value = "x" 'setzte die Zelle rechts neben dem Wert auf "x" und verhindert somit die Löschung und Neuberechnung
    14. End If
    15. End If
    16. If Application.Cells(i, 27).Value = "x" And Application.Cells(i, 28).Value = "x" Then
    17. Application.Cells(i, 26).Dirty 'erzwingt die Berechnung neu auszuführen (dirty)
    18. If Eingabe = True Then 'Wenn die Variable "Eingabe" Wahr entspricht
    19. Application.Cells(i, 27).Value = "x" 'setzte die Zelle rechts neben dem Wert auf "x" und verhindert somit die Löschung und Neuberechnung
    20. End If
    21. End If
    22. If Application.Cells(i, 27).Value = "" And Application.Cells(i, 28).Value = "" Then
    23. Application.Cells(i, 26).Dirty 'erzwingt die Berechnung neu auszuführen (dirty)
    24. If Eingabe = True Then 'Wenn die Variable "Eingabe" Wahr entspricht
    25. Application.Cells(i, 27).Value = "x" 'setzte die Zelle rechts neben dem Wert auf "x" und verhindert somit die Löschung und Neuberechnung
    26. End If
    27. End If
    28. Next i


    fällt euch so spontan ein, wie man die spalte i,27 wieder auf "" setzt oder auf das was die Excel formel dem zuweist?
    ich glaube nämlich, wenn ich die einmal durchlaufen habe und das als vorlage nutze, hat der bei der zweiten Nutzung die formel aus AA gelöscht. das wäre doof.

    oder in der vorlage müsste der ursprungszustand erhalten bleiben... das probier ich mal aus...
    "Der Visual Basic ist nur so schlau wie der, der davor sitzt" - Na schön! Dann steh ich eben auf!

    "Wenn du denkst es geht nicht mehr kommt irgendwo ein Lichtlein her"
    If Tunnel.Licht = JemandImTunnelDerVerzweifeltIst Then Licht.Aus = True
    Mit ElseIf wird es ein wenig schöner ;) ( Siehe mein Post oben)

    Kathleen schrieb:

    formel aus AA gelöscht


    Und ja, du müsstest dir die Information irgendwo zwischenspeichern, oder halt deine Formel in die Zelle schreiben. Sollte eigentlich auch gehen. (Wie die Funktion lautet weiß ich leider gerade nicht...Die Formel sieht ja der Nutzer letzten Endes nicht)
    Option Strict On!
    geht das vielleicht mit formula also im vba hab ich da mal was von gelesen, aber ich hatte da was anderes gesucht und nicht weiter beachtet.
    "Der Visual Basic ist nur so schlau wie der, der davor sitzt" - Na schön! Dann steh ich eben auf!

    "Wenn du denkst es geht nicht mehr kommt irgendwo ein Lichtlein her"
    If Tunnel.Licht = JemandImTunnelDerVerzweifeltIst Then Licht.Aus = True
    jep so ungefähr hab ich das auch grade beim bereichs-Member gefunden. aber ich habe das ja über eine For Next schleife gesteuert. Kann man da auch irgendwie sowas brauchen? Ich meine schön und gut, dass ich den Range ebenso weiß, aber nur so überlegt, kann ich dem auch sagen, gib die formel da oben ein und zieh sie runter? müsste doch über ein makro gehen, oder?

    Visual Basic-Quellcode

    1. Sub Formel_ÜberschreibenAA()
    2. '
    3. ' Formel_ÜberschreibenAA Makro
    4. '
    5. '
    6. Range("AA3").Select
    7. ActiveCell.FormulaR1C1 = "=IF(LEN(RC[-24])=5,""x"","""")"
    8. Range("AA3").AutoFill Destination:=Range("AA3:AA33"), Type:=xlFillDefault
    9. End Sub

    "Der Visual Basic ist nur so schlau wie der, der davor sitzt" - Na schön! Dann steh ich eben auf!

    "Wenn du denkst es geht nicht mehr kommt irgendwo ein Lichtlein her"
    If Tunnel.Licht = JemandImTunnelDerVerzweifeltIst Then Licht.Aus = True

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Kathleen“ ()