Herbers Excel-Forum - das Archiv

UDF, Rückgabewert Text anstelle Zahl

Bild

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

Bild

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
Bild

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
Bild

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
Bild

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
Bild

Betrifft: AW: UDF, Rückgabewert Text anstelle Zahl
von: Horst
Geschrieben am: 30.03.2007 16:25:34
Hi,
verwende statt "" dies: "'"
mfg Horst
Bild

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
Bild

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
    Bild

    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
    Bild

    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
    Bild

    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
     Bild