Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1188to1192
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

Formel zu VBA Worksheetfunction umwandeln

Formel zu VBA Worksheetfunction umwandeln
Peter.H
Hallo Excel Forum
ich bekomme die Formel
=VERWEIS(2;1/(A:A"");ZEILE(A:A))
nicht in die Form
a = Application.WorksheetFunktion.Lookup(...
umgeschrieben.
Würde mir da bitte jemand helfen...
Peter

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Formel zu VBA Worksheetfunction umwandeln
28.11.2010 17:44:41
Jürgen
Hallo Peter,
schreibe einfach die Formel in eine Zelle, sagen wir B10, und wechsle in den VBA-Editor. Lass Dir das Direktfenster anzeigen (STRG+G) und gib dort
?Range("B10").formula
ein und löse mit ENTER aus - und schon wird Dir die Formel so ausgegeben, dass Du Sie übertragen kannst.
Gruß, Jürgen
AW: Formel zu VBA Worksheetfunction umwandeln
28.11.2010 18:19:23
Peter.H
Hallo Jürgen
danke für deine Hilfe...
Die Macroaufzeichnung sieht wie folgt aus:
Sub Makro4()
ActiveCell.FormulaR1C1 = "=LOOKUP(2,1/(C[-1]""""),ROW(C[-1]))"
End Sub
Nun die Übertragung an WorksheetFunktion:
Sub Test()
Dim a%
With Application.WorksheetFunction
a = .LOOKUP(2,1/(C[-1]""""),ROW(C[-1]))
End With
End Sub
Das funktioniert leider nicht "Syntax Fehler beim kompilieren"
Hat jemand noch andere Vorschläge...
Gruß
Peter
Anzeige
So kann das auch nicht gehen,...
28.11.2010 19:44:42
Luc:-?
…Peter,
weil die Elemente des WorksheetFunction-Objekts grundsätzlich ihrer Matrix-Funktionalität verlustig gehen! Wenn du die behalten willst, musst du die Fml so wie angezeigt Evaluieren (Auswerten, a = Evaluate(…)), ansonsten musst du eine Schleife um die PgmZeile herum aufbauen, die die variablen FmlTeile flfd austauscht, denn du willst ja wohl offensichtl die ganze Spalte A (evtl auch noch andere Spalten?) abarbeiten. Was bewirkt die OriginalFml… Mit =VERWEIS(2;1/(A:A<>"");ZEILE(A:A)) erhältst du einen #DIV/0!-Fehlerwert, wenn die Zelle leer ist, das 3.Argument, dessen Wert schließlich zurückgegeben wird, wenn das 1.Argument im Feld des 2. gefunden wird, zählt jede Zeile hoch. Das sieht mir doch sehr nach einer tricky ZellFml ala excelformeln.de aus, mit der du feststellen willst, in welcher Zeile eine 2 auftaucht. Dafür gibt's in VBA geeignetere Methoden als .LookUp(…) in einer For- oder Do-Schleife. Denn das wird in der Schleife nicht fktionieren, wenn Fehler (und ggf vorhandene Texte!) nicht abgefangen wdn!
Gruß Luc :-?
Anzeige
AW: So kann das auch nicht gehen,...
29.11.2010 08:51:54
Peter.H
Hallo Luc
danke für Deine ausführlichen Informationen.
Ja die Formel stammt aus dem Excel Zauberbuch und gibt die letzte benutzte Zelle wieder (auch wenn Leerzellen im Range vorhanden sind).
Der Versuch mit Evaluate ist mit meinen Kenntnissen gescheitert:
Sub Makro1()
Dim a
a = Application.Evaluate("=LOOKUP(2,1/(C[1]""""),ROW(C[1]))")
End Sub

'Ergebnis: a = Fehler 2015
Auch der Aufbau der Matrixfunktionalität war bis jetzt noch nicht mit Erfolg gekrönt:
Sub Test()
Dim a
Dim myRng As Range: Set myRng = Worksheets(1).Range("A:A")
With Application.WorksheetFunction
a = ".LOOKUP(2,1/" & myRng & """""),ROW(" & myRng & "))"
End With
End Sub

'Ergebnis: Laufzeitfehler 13 Typen unverträglich
Hast du lust mir da noch weiter auf die Sprünge zu helfen...
Gruß
Peter
Anzeige
Demnächst in diesem Theater... Gruß owT
30.11.2010 02:54:35
Luc:-?
:-?
So, mal sehen,...
01.12.2010 19:15:38
Luc:-?
…Peter…
1. Evaluate:
a = Evaluate("lookup(2,1/(A:A<>""""),row(A:A))") mag die Methode evtl lieber. Wenn nicht, kannst du diesen Weg ausschließen.
2. Pgm-Schleife → anders lässt sich eine „Matrix­fktionalität“ kaum nachgestalten. Aber das ist hier bei Zweck der Fml und deinen Bedingungen kaum nötig…
Versuch's doch mal mit Set myRng = Worksheets(1).UsedRange.Columns(1): a = myRng.Cells.Count
Das sollte die letzte benutzte Zelle=Zeile in Spalte A liefern, wenn nicht in einer anderen Spalte darüber hinaus Werte vorhanden sind oder waren (XL merkt sich das! → Abhilfe: ausreichend anschließende und vermeintl leere Zeilen physisch löschen).
Wenn andere Spalten mehr Zeilen haben, kannst du das auch mit myRng.Rows(myRng.Rows.Count + 1).End(xlUp).Row lösen. Bspp dafür finden sich im Herber-Archiv zuhauf…
Gruß Luc :-?
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige