Microsoft Excel

Herbers Excel/VBA-Archiv

UDF, Rückgabewert Text anstelle Zahl

Betrifft: UDF, Rückgabewert Text anstelle Zahl von: Peter
Geschrieben am: 30.03.2007 07:54:01

Guten Tag
Untenstehende Funktion liefert mir gibt mir als Ergebnis das 1. Argument zurück, das nicht einen Fehler ergibt (Danke Josef Ehrensberger). Nun wollte ich nach dem endif etwas Weiteres einbauen, und zwar soll, wenn der Rückgabewert eine Zahl ist und diese kleiner als 10 ist ein Leerzeichen vorgeschoben werden.
Bei Debug.Print sehe ich, dass es funktioniert, denn wenn das Ergebnis 7.375 ist, wird dieses bei der Auswertung mit DEBUG.PRINT auch eingeschoben.

7.375
Wahr
7.375
Wahr

Was muss ich noch zusätzlich machen, dass der Rückgabewert ein Text wird? Im Moment trägt es mir lediglich die Zahl ein und die Leerzeichen verschwindet.

Danke für Feedback.

Peter

          Public Function NOERROR(Arg1 As Variant, Arg2 As Variant, Optional Arg3 As Variant) As Variant
          If IsError(Arg1) Then
              If IsMissing(Arg3) Then
                  NOERROR = Arg2
              Else
                  If IsError(Arg2) Then NOERROR = Arg3 Else NOERROR = Arg2
              End If
          Else
              NOERROR = Arg1
          End If
          
          
          Debug.Print NOERROR
          Debug.Print IsNumeric(NOERROR)
          Debug.Print NOERROR * 1
          Debug.Print NOERROR * 1 < 10
          If IsNumeric(NOERROR) = WAHR And NOERROR < 10 Then NOERROR = " " & NOERROR
          
          End Function
          

  


Betrifft: AW: UDF, Rückgabewert Text anstelle Zahl von: Bertram
Geschrieben am: 30.03.2007 08:22:23

Hallo Peter,

versuch's mal mit CStr(NOERROR)

Gruß
Bertram


  


Betrifft: AW: UDF, Rückgabewert Text anstelle Zahl von: Peter
Geschrieben am: 30.03.2007 08:51:52

Hallo Betram
Meintest du so (letzte Zeile vor End Function?


If IsNumeric(NOERROR) = WAHR And NOERROR < 10 Then NOERROR = CStr(" " & NOERROR)
~f~

Hat mir leider noch nicht geholfen - übrigens meine Formel im Sheet ist:
~f~
=""&NOERROR(LINKS(Zinstabelle!B12;SUCHEN("%";Zinstabelle!B12)-2)*1;"var.")


Gruss, Peter


  


Betrifft: AW: UDF, Rückgabewert Text anstelle Zahl von: Bertram
Geschrieben am: 30.03.2007 09:00:11

Hallo Peter,

man sollte doch genauer lesen (damit meine ich mich):-) Eigentlich meinte ich

If IsNumeric(NOERROR) = WAHR And NOERROR < 10 Then NOERROR = " " & CStr(NOERROR)

Aber das dürfte glaube ich nicht funktionieren.

In deiner Formel schreibst du zu Beginn "" anstatt " ". Vielleicht ist das schon der Fehler oder versuche

=" " & TEXT(NOERROR.....)

Gruß
Bertram


  


Betrifft: AW: UDF, Rückgabewert Text anstelle Zahl von: Peter
Geschrieben am: 30.03.2007 09:16:08

Hallo Bertram
Danke für die Rückmeldung.
So funktioniert es tatsächlich noch nicht.
Zur Funktion: Ich nehme an, dass mal beim Zusammensetzen von " " und NOERROR bewirken muss, dass NOERROR ab diesem Zeitpunkt ein String ist.

Zur Formel:
Die Anführungszeichen habe ich absichtlich zusammengeschrieben mit der Absicht, dass es sich dann um Text handelt, der linksbündig angezeigt wird.
Der Abstand kann ich nicht mit " " machen, denn wenn der Rückgabewert 10 ist würde dann die Zahl nicht mehr unter die einstelligen Rückgabewerte passen (das heisst, wie im Word mit dem Dezimaltab).

Gruss, Peter


  


Betrifft: AW: UDF, Rückgabewert Text anstelle Zahl von: Horst
Geschrieben am: 30.03.2007 16:25:34

Hi,

verwende statt "" dies: "'"

mfg Horst


  


Betrifft: AW: UDF, Rückgabewert Text anstelle Zahl von: Peter
Geschrieben am: 30.03.2007 22:54:27

Hallo Horst
Das hat mich leider auch nicht weiter gebracht, denn in der Zelle steht dann sichtbar vor der Zahl das Zeichen '

Nochmals die Problemstellung:
Von Sepp habe ich ein Code, den ich mit in dem Sinne erweitern wollte, dass der Rückgabewert, falls dieser eine Zahl ist und kleiner als 10, als erstes Zeichen ein Leerzeichen enthält, das auch "dargestellt" wird - das heisst nicht in der Zelle klammheimlich verschwindet.

Der Code lautet folgendermassen:
    Public Function NOERROR(Arg1 As Variant, Arg2 As Variant, Optional Arg3 As Variant) As Variant
    If IsError(Arg1) Then
        If IsMissing(Arg3) Then
            NOERROR = Arg2
        Else
            If IsError(Arg2) Then NOERROR = Arg3 Else NOERROR = Arg2
        End If
    Else
        NOERROR = Arg1
    End If
    If IsNumeric(NOERROR) = WAHR And NOERROR < 10 Then NOERROR = " " & CStr(NOERROR)
    End Function
    

In der Tabelle (z.B. Zeile 12) habe ich die Funktion wie folgt verwendet:
=""&noerror(LINKS(Zinstabelle!B12;SUCHEN("%";Zinstabelle!B12)-2)*1;"var.")

Damit wollte ich erreichen, dass die Zahlen linksbündig erscheinen und diejenigen Zahlen (Zinssätze), die weniger als 10 betragen, um eine Stelle eingerückt sind. Bei mir sind jedoch alle Zahlen ganz links ausgerichtet, ohne Leerzelle. Wie kriege ich das hin?

Danke für Feedback.

Peter


  


Betrifft: AW: UDF, Rückgabewert Text anstelle Zahl von: Josef Ehrensberger
Geschrieben am: 30.03.2007 23:11:19

Hallo Peter,

du solltest grundsätzlich zwei Dinge unterscheiden.


  • Welches Ergebnis steht in einer Zelle

  • Wie wird dieses ergebnis dargestellt



  • Das was du Erreichen willst, steuert man über das Zahlenformat.

    In deinem Fall z.b. mit
    [<10]" "0;Standard
    Allerdings geht das nur bei Zahlen!


    Gruß Sepp


      


    Betrifft: AW: UDF, Rückgabewert Text anstelle Zahl von: Peter
    Geschrieben am: 30.03.2007 23:36:22

    Hallo Sepp
    Wirklich clever, vielen Dank.
    Trotzdem möchte ich nochmals nachfragen: Kann ich einer Zahl nicht ein oder mehrere Leerstellen voranschieben, womit dann das ganze zu einem String wird?

    Gruss, Peter


      


    Betrifft: AW: UDF, Rückgabewert Text anstelle Zahl von: Josef Ehrensberger
    Geschrieben am: 30.03.2007 23:58:23

    Hallo Peter,

    klar geht das, auch wenn ich den Sinn dahinter nicht verstehe.

    Dein Fehler liegt bei
     IsNumeric(NOERROR) = WAHR
     

    wenn schon, dann so
     IsNumeric(NOERROR) = True
     
    aber eigentlich genügt das.

    Public Function NOERROR(Arg1 As Variant, Arg2 As Variant, Optional Arg3 As Variant) As Variant
    If IsError(Arg1) Then
        If IsMissing(Arg3) Then
            NOERROR = Arg2
        Else
            If IsError(Arg2) Then NOERROR = Arg3 Else NOERROR = Arg2
        End If
    Else
        NOERROR = Arg1
    End If


    If IsNumeric(NOERROR) And NOERROR < 10 Then NOERROR = " " & CStr(NOERROR)

    End Function



    Gruß Sepp


      


    Betrifft: AW: UDF, Rückgabewert Text anstelle Zahl von: Peter
    Geschrieben am: 31.03.2007 12:42:07

    Hallo Sepp
    Vielen Dank - jetzt ist alles klar.

    Der Sinn ist folgender: Wenn die Daten, die ich so produziere, dann in einem anderen Programm weiterbearbeitet werden, kann dies ein Unterschied sein, wenn ich einen Prozentwert als Zahl darstelle und mit dem Format das gleiche bewirke, wie wenn ich eben einen String mit einem Leerzeichen zu Beginn habe.

    Nochmals besten Dank!

    Peter