Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Formelzuordnung an eine Variable als allgemeines VBA Lösungstool
#11
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?
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#12
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
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#13
Hallo Edgar,

ist die Tabelle wirklich das Ergebnis Deines Makros?

Gruß Uwe
Antworten Top
#14
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
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#15
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
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#16
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]
Antworten Top
#17
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
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#18
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.
Antworten Top
#19
(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.
Antworten Top
#20
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.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste