Clever-Excel-Forum

Normale Version: Formelzuordnung an eine Variable als allgemeines VBA Lösungstool
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3 4
Hallo,

Code:
Sub Zuordnung()
Dim vx As Range

'Formelzuweisung:
Set vx = Range("B1")
vx.FormulaLocal = "=LÄNGE(VERWEIS(9^9;--LINKS(9&A1;SPALTE(1:1))))-1"
'Ergebnis: (Weiterverarbeitung möglich)
Debug.Print vx.Value
End Sub

Könntest Du diesen Satz

Zitat:der Bezug zu einer konreten Zelle und Spalte muss selbstverständlich gegeben sein.

so beschreiben, dass ich ihn auch verstehe?
Hallo,

und warum nicht einfach so:

Code:
Sub test()
Dim i As Long
For i = 1 To 10
Cells(i, 2) = Len(Cells(i, 1).Value) - 1
Next
End Sub

Ergebnis:

Arbeitsblatt mit dem Namen 'Tabelle1'
 AB
1012zr3
212ztz2
3456zde3
4123zas3
5-123zvfr4
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg
Hallo Edgar,

ist die Tabelle wirklich das Ergebnis Deines Makros?

Gruß Uwe
Hallo Uwe,

gestern abend war es das, heute morgen nicht. Kann ich jetzt nicht nachvollziehen.

aber so gehts:

Code:
Sub test()
Dim i As Long
For i = 1 To 10
Cells(i, 2) = Replace(Cells(i, 1), "0", "1")
Cells(i, 2) = Len(Str(Val(Cells(i, 2).Value))) - 1
Next
End Sub
Hallo sotaros,

eine Excel-Formel kannst Du auf zwei wegen direkt in den VBA-Code einbinden.

a) mit WorksheetFunction oder Application...
b) mit Application.Evaluate

Hier mal ein kleines Beispiel

Code:
Sub test()
MsgBox WorksheetFunction.Sum(Range("A1:A3"))
MsgBox Application.Sum(Range("A1:A3"))
MsgBox Application.Evaluate("=Sum(A1:A3)")
End Sub
Hallo Andre,
dein Lösungsvorschlag gefällt mir ausgezeichnet. Deshalb möchte ich ihn natürlich auch ausprobieren
nur leider funktionierts nicht weil:
Code:
Range("B1").Select
'In Deutsch Formel funktioniert:
ActiveCell.FormulaLocal = "=LÄNGE(VERWEIS(9^9;--LINKS(9&A1;SPALTE(1:1 ) ) ) )-1"
'In Englisch übersetzt funktioniert nicht:
ActiveCell.FormulaR1C1 = "=LENGTH(LOOKUP(9^9;--LEFT(9&A1;COLUMN(1:1 ) ) ) )-1"
Was mache ich denn da falsch? Für dein Application.Evaluate Vorschlag brauche ich natürlich die
englische Version der Formel.[/u]
Hallo sotaros,

wenn ich es einfach haben will, geb' ich die Formel der Excel-Zelle im Direktbereich vom VBA-Editor aus und übernehme sie dann in den Code. Dann funktioniert es meistens, hier bei Deiner Formel auch.

Code:
Sub test()
'Formel in Direktbereich ausgeben
Debug.Print ActiveCell.Formula
'Formel aus Direktbereich kopieren und hier einsetzen
MsgBox Application.Evaluate("LEN(LOOKUP(9^9,--LEFT(9&A1,COLUMN(1:1 ) ) ) )-1")
End Sub
Hallo Andre,
vielen Dank für Deinen funktionierenden Lösungsvorschlag. Damit ist die eigentliche Aufgabe erledigt.
Mir kam es darauf an, einen Schnittstellencode zu haben der Formellösungen gut in VBA einbindet.
Das kann man immer gebrauchen und ist deshalb auch sehr wichtig.

Trotzdem eine Frage ,wie auch schon gepostet:

Code:
'Deutsche Formellösung funktioniert:
Dim a As Variant
Range("B1").Select
ActiveCell.FormulaLocal = "=LÄNGE(VERWEIS(9^9;--LINKS(9&A1;SPALTE(1:1 ) ) ) )-1"
a = Range("B1").Value

'Setze ich die englische Übersetzung ein geht nichts:
ActiveCell.FormulaR1C1 = "=LENGTH(LOOKUP(9^9;--LEFT(9&A1;COLUMN(1:1 ) ) ) )-1"
ActiveCell.Formula = "LENGTH(LOOKUP(9^9;--LEFT(9&A1;COLUMN(1:1 ) ) ) )-1"
ActiveCell.Formula = "=LENGTH(LOOKUP(9^9;--LEFT(9&A1;COLUMN(1:1 ) ) ) )-1"
'Die Varationen zeigen exemplarisch, dass ich hier einfach alles blind ausprobiere.
Die Formel selbst funktioniert aber in Deiner Evalution Lösung. Was läuft da falsch?!
Verstehe das einfach nicht.
(29.10.2014, 13:10)sotaros schrieb: [ -> ]Trotzdem eine Frage ,wie auch schon gepostet:

Du kannst das auch über "Makro aufzeichnen" und einkopieren der deutschen Formel in die Zelle ausprobieren, dann kommst Du zu folgendem Code:

ActiveCell.FormulaR1C1 = "=LEN(LOOKUP(9^9,--LEFT(9&R[-6]C[-4],COLUMN(R[-6] ) ) ) )-1"

Und der trägt die Formel dann auch ein. Wie Du siehst, ist das englische VBA-Wort für die Länge LEN und nicht LENGTH.
Hallo Rabe,
danke für den Hinweis, aber auch das habe ich schon versucht. Die Alternativen waren ja nur beispielhaft.

Hier nochmal:
Code:
ActiveCell.FormulaLocal = "=LÄNGE(VERWEIS(9^9;--LINKS(9&A1;SPALTE(1:1 ) ) ) )-1"
ActiveCell.FormulaR1C1 = "=LEN(LOOKUP(9^9;--LEFT(9&A1;COLUMN(1:1 ) ) ) )-1"
Ich möchte keine Makrorekoder Lösung haben. Schau dir doch oben bitte mal beide Formeln an.
Oben die Deutsche, deshalb ja FormulaLocal - funktioniert.
Unten :
Die englische Lösung. Funktioniert nicht! Es geht mir dabei um viel mehr als nur die Formel da oben.
Die Frage für mich ist wie übersetze ich in Deutsch angegebne Formeln ins Englische. Und dies ist für mich ziemlich wichtig.
Seiten: 1 2 3 4