Registriert seit: 11.04.2014
Version(en): Office 2007
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
Registriert seit: 13.04.2014
Version(en): 365
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' |
| A | B |
1 | 012zr | 3 |
2 | 12ztz | 2 |
3 | 456zde | 3 |
4 | 123zas | 3 |
5 | -123zvfr | 4 |
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.
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo Edgar,
ist die Tabelle wirklich das Ergebnis Deines Makros?
Gruß Uwe
Registriert seit: 13.04.2014
Version(en): 365
29.10.2014, 07:24
(Dieser Beitrag wurde zuletzt bearbeitet: 29.10.2014, 07:34 von BoskoBiati.)
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.
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
29.10.2014, 09:21
(Dieser Beitrag wurde zuletzt bearbeitet: 29.10.2014, 09:22 von schauan.)
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)
Registriert seit: 11.08.2014
Version(en): 2013
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]
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
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)
Registriert seit: 11.08.2014
Version(en): 2013
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.
Registriert seit: 10.04.2014
Version(en): 2016 + 365
29.10.2014, 14:37
(Dieser Beitrag wurde zuletzt bearbeitet: 29.10.2014, 14:41 von Rabe.)
(29.10.2014, 14: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.
Registriert seit: 11.08.2014
Version(en): 2013
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.