Anzeige
Archiv - Navigation
1328to1332
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

in UDF INDIREKT verwenden

in UDF INDIREKT verwenden
18.09.2013 15:38:59
Peter
Guten Tag
In meiner Tabelle stehen verschiedene Formeln, so auch in Zelle E6.
Nun möchte ich in Zelle B17 mit =showformula(6;INDIREKT(intspanr(A17))) die Formel abfragen - in A17 ist der Buchstabe E eingetragen
Da Formel liefert mir jedoch den Fehlerwert #WERT!
Mit =showformula(6;ZEILE()-12) klappt es dann.
Weshalb kann ich in meiner Formel INDIREKT nicht verwenden?
Gruss, Peter

Function showFormula(Row As Long, Col As Long, Optional Lcl As Boolean = True) As String
Application.Volatile
If Lcl Then
showFormula = Sheets(Application.Caller.Parent.Name).Cells(Row, Col).FormulaLocal
Else
showFormula = Sheets(Application.Caller.Parent.Name).Cells(Row, Col).Formula
End If
End Function
Public Function intSpaNr(strCol As String) As Integer
intSpaNr = Columns(strCol).Column
End Function

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: in UDF INDIREKT verwenden
18.09.2013 16:09:47
Rudi
Hallo,
Anscheinend verstehst du deine eigenen Funktionen nicht.
wozu INDIREKT()?
intspanr macht doch aus einem String eine Spaltennummer.
=showformula(6;intspanr(A17))
Außerdem würde ich der Funktion einfach den Bereich übergeben.
Function showFormula(rngF As Range, Optional Lcl As Boolean = True) As String
Application.Volatile
If Lcl Then
showFormula = rngF.FormulaLocal
Else
showFormula = rngF.Formula
End If
End Function

=showformula(E6) reicht dann. Außerdem kannst du dich auch auf ein anderes Blatt beziehen.
=showformula(Tabelle2!E6)
Gruß
Rudi

Anzeige
AW: in UDF INDIREKT verwenden
18.09.2013 16:19:28
Peter
Hallo Rudi
Danke für die Antwort.
Ich habe schon den Eindruck, dass ich das verstanden hatte.
Indirekt brauche ich, weil ich in meinem Spaltenrange nur E, F, G, H ... eintetragen habe und dann die Zelladresse mit einer bestimmten Zeilennummer "zusammenbauen" muss.
Daher verbleibt die Frage, ob in einer UDF INDIREKT verwendet werden kann oder nicht.
Gruss, Peter

AW: in UDF INDIREKT verwenden
18.09.2013 16:42:43
Rudi
Hallo,
=showformula(6;INDIREKT(intspanr(A17))) die Formel abfragen - in A17 ist der Buchstabe E eingetragen
intspanr("e") ergibt 5. Was soll INDIREKT(5) ergeben? INDIREKT() wandelt einen Text in einen Bezug um.
INDIREKT(5)=#BEZUG!
Gruß
Rudi

Anzeige
Du verwendest INDIREKT ja gar nicht in der UDF,...
18.09.2013 16:57:48
Luc:-?
…Peter,
sondern übergibst ihr als 2.Argument einen Ausdruck, der dann eigentl eine Zahl liefern sollte (Col As Long). Mit INDIREKT(intspanr(A17)) willst du das ja wohl erreichen, aber was du wirklich machst ist Folgendes:
Zitat: in A17 ist der Buchstabe E eingetragen
Also erzeugt intspanr(A17) eine 5, wenn du Glück hast, denn du hast hier somit auch das Argument von Columns als Buchstabe angegeben, obwohl ja wohl eindeutig in der VBE-Hilfe zu Columns steht, dass ein numerischer Index erforderlich ist (nur Range ist auch für Textangabe vorgesehen, bei Cells, Columns und Rows muss VBA das erst konvertieren!). Also ist die ganze Fkt schon hirnrissig!
Weiter! Hat intspanr(A17) jetzt 5 zurückgegeben, steht da nun INDIREKT(5). Nun verrate mir mal, was dabei rauskommen soll! (Nebenbei, das hättest du mit [F9] schon in der Eingabezeile herausfinden können!)
Also, wer ist schließl an #WERT! schuld?! Wie meist der vor dem Bildschirm, denn warum soll eine UDF nicht ein reguläres Argument akzeptieren, egal wie es erzeugt wurde?! Aber das ist ja bei dir der Haken! Jede StandardFkt würde genauso reagieren, wenn man ihr Argumente übergibt (hier ein Fehlerwert), die nicht ihrer Deklaration entsprechen!
Folglich hat Rudi völlig recht mit seiner Meinung, dass du deine eigenen UDFs nicht verstehst (oder sind es gar nicht deine?)! ;->
Empfehlung: Nimm was Fertiges, auch im Archiv zu finden unter Namen wie bspw CForm… o.ä.
Gruß Luc :-?

Anzeige
AW: Du verwendest INDIREKT ja gar nicht in der UDF,...
18.09.2013 20:24:40
Peter
Hallo Luc
Danke für die Hinweise, sehr hilfreich und zielführend.
Allerdings habe ich zwei Dinge nicht verstanden:
1. Was hätte ich mit F9 in der Eingabezeile herausfinden können?
2. ich habe nach CForm gesucht, jedoch nichts brauchbares gefunden - was meintest du - und wie muss ich das suchen?
Danke und Gruss, Peter

F9
18.09.2013 20:37:24
Rudi
Hallo,
F9=Formelauswertung
In der Eingabezeile Formelteil markieren (muss eine gültige Formel ergeben), F9 drücken. Dann siehst du das Ergebnis. Mit ESC verlassen!
Excel gut?
Gruß
Rudi

AW: danke Rudi - gut ist halt relativ - owT
19.09.2013 09:57:15
Peter

2.Frage: Lass mal, ich glaube, das hatte ich ...
18.09.2013 20:58:11
Luc:-?
…damals einer Mappe beigefügt, Peter,
das wird die Recherche evtl nicht finden. Ich sehe mal selber nach oder poste dir eine andere UDF zum Thema. Davon habe ich im Laufe der Zeit bestimmt ein halbes Dtzd geschrieben. ;-)
Gruß Luc :-?

Anzeige
AW: 2.Frage: Lass mal, ich glaube, das hatte ich ...
19.09.2013 09:58:26
Peter
Hallo Luc
Danke.
Das müsste jetzt ok sein:
Public Function intSpaNr(strCol As String) As Integer
intSpaNr = Range(strCol & 1).Column
End Function
Gruss, Peter

Holzweg
19.09.2013 10:08:16
Rudi
Hallo,
damit wird INDIREKT(lngspanr(A17)) noch immer zu INDIREKT(5) und somit zu #BEZUG!.
Gruß
Rudi

AW: nein, INDIREKT ist aus dem Spiel
19.09.2013 10:23:38
Peter
Hallo Rudi
Nein INDIREKT ist aus dem Spiel - ich habe gegriffen, dass INDIREKT hier nicht gebraucht wird.
Zelle A17: "E"
Zelle B17: =showformula(6;intSpaNr(A17))
''' die Abfrage bezieht sich in dieser Tabelle immer auf Zeile 6
Damit erhalte ich als Ergebnis die Formel aus E6
Gruss, Peter

Function showFormula(Row As Long, Col As Long, Optional Lcl As Boolean = True) As String
Application.Volatile
If Lcl Then
showFormula = Sheets(Application.Caller.Parent.Name).Cells(Row, Col).FormulaLocal
Else
showFormula = Sheets(Application.Caller.Parent.Name).Cells(Row, Col).Formula
End If
End Function
Public Function intSpaNr(strCol As String) As Integer
intSpaNr = Range(strCol & 1).Column
End Function

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige