Function nur auf einem Tabellenblatt ausführen

  • Excel

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von peterfido.

    Function nur auf einem Tabellenblatt ausführen

    Hallo

    ich habe mir eine Funktion geschrieben, diese möchte ich auf mehreren Tabellenblättern verwenden

    So sieht die Function aus

    Brainfuck-Quellcode

    1. Function Schicht(ByVal MyRange As Range)
    2. Application.Volatile
    3. Schicht= MyRange.Text
    4. ....................
    5. End Function


    im Excel rufe ich diese so auf

    Quellcode

    1. =Schicht(E10)


    nun ist das Problem wenn ich das auf mehreren Tabellenblättern mache dann schreibt er mir in alle Tabellenblätter das gleiche rein je mach dem welches ich aktiv habe,
    d.h zum Beispiel:
    in Tabelle 1 E10 steht eine 5 und Tabelle 1 D10 soll diese 5 übernehmen
    in Tabelle 2 E10 steht eine 10 und Tabelle 2 D10 soll diese 10 übernehmen

    nur leider macht er dann folgendes, wenn ich Tabelle 1 aktiv habe schreibt er in Tabelle 2 D10 den Wert aus Tabelle 1 E10,

    wie mache ich das das er das nicht Tabellenblatt übergreifend macht sonder nur auf seinem eigenen Blatt bleibt??

    @ Edit: aso und bitte nicht sagen E10 = D10, die Daten werden nocht vergleichen in der Funktion ;)

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

    Excel macht da soweit alles richtig. Du übergibst ja nicht den Range, sondern den Wert. Ich würde folgendes nutzen:

    Spoiler anzeigen

    Visual Basic-Quellcode

    1. Function Schicht(ByVal Von As String, ByVal Bis As String) As String
    2. Dim Spalte_VonAr As String
    3. Dim Spalte_BisAr As String
    4. Spalte_VonAr = Format(Von, "h")
    5. Spalte_BisAr = Format(Bis, "h")
    6. If Spalte_VonAr >= "6" And Spalte_BisAr <= "14" Then
    7. Schicht = "Frühschicht"
    8. ElseIf Spalte_VonAr >= "14" And Spalte_BisAr <= "22" Then
    9. Schicht = "Spätschicht"
    10. ElseIf Spalte_VonAr >= "22" And Spalte_BisAr <= "6" Then
    11. Schicht = "Nachtschicht"
    12. Else
    13. Schicht = ""
    14. End If
    15. End Function


    Aufgerufen wird mit

    Quellcode

    1. =schicht(E3;F3)
    Bzw.

    Quellcode

    1. =schicht(Von;Bis)


    Eine Schicht z.B. von 14:00 bis 12:00 wird aber nicht abgefangen.
    Gruß
    Peterfido

    Keine Unterstützung per PN!

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

    okay dank dir das geht

    also muss ich das so zu sagen für alle Werte machen, da ich eigentlich noch auf mehr Spalten der Zeile zugreife deshalb wollte ich eigentlich nur die Zeile wissen in der sich die Function befindet um sie zu übergeben,

    da ich nämlich noch 3 andere fälle von schichten habe

    Samstags ist immer Wartungsschicht
    Sonntags immer Anfahrschicht

    und einen Absetzer gibt es auch noch => hierfür wird zb einfach in Spalte C3 einfach eine (in meine beispiemappe) einfach ein x eingetragen
    Du kannst auch eine Zeile direkt übergeben. Dann aber als Text.

    Visual Basic-Quellcode

    1. Public Function werteanzeigen(ByVal wert As Variant) As String
    2. werteanzeigen = wert
    3. End Function


    Wenn jetzt in Zelle c3

    Quellcode

    1. Hallo
    steht, dann ergibt:

    =werteanzeigen(C3)

    Quellcode

    1. Hallo


    und

    =werteanzeigen("C3")

    Quellcode

    1. C3


    Du könntest aber auch mit SVerweis oder ähnlichem Dein Glück versuchen.
    Gruß
    Peterfido

    Keine Unterstützung per PN!