Registriert seit: 11.08.2014
Version(en): 2013
28.10.2014, 12:40
(Dieser Beitrag wurde zuletzt bearbeitet: 28.10.2014, 13:04 von sotaros.)
Hallo Leute,
immer wieder tauchen interessante Formeln zur Lösung von in VBA gestellten Problemen in diesem Forum auf. Mich würde dabei die VBA Einbindung derartiger Formeln interessieren.
Nehmen wir die letzte Formel aus dem Thread "Mehrstellige Zahl vor dem Artikel" gepostet von Wilfried Höttl als Beispiel. Die VBA Einbindung für die Zelle B1 würde demnach lauten :
Code:
Range("B1").FormulaR1C1 = "LÄNGE(VERWEIS(9^9;--LINKS(9&A1;SPALTE(1:1))))-1"
Aber wie würde man die gesamte Formeln zwecks Weiterverarbeitung einer Variablen zuordnen?
Dies würde für sehr viele Leute die ergebnisorientierte Arbeit mit Excel sehr vereinfachen.
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo,
(28.10.2014, 12:40)sotaros schrieb: Nehmen wir die letzte Formel aus dem Thread "Mehrstellige Zahl vor dem Artikel" gepostet von Wilfried Höttl als Beispiel. Die VBA Einbindung für die Zelle B1 würde demnach lauten :
Code:
Range("B1").FormulaR1C1 = "LÄNGE(VERWEIS(9^9;--LINKS(9&A1;SPALTE(1:1))))-1"
Da gehört noch ein Local dazu. VBA spricht englisch und mit einer deutschen Formelbezeichnung dürfte es nicht gehen. Mit der Weiterverarbeitung einer Variablen: Meinst Du vielleicht so?
Code:
Sub prcFormel()
Dim lngC As Long
For lngC = 1 To 10
Range("B" & lngC).FormulaR1C1Local = "LÄNGE(VERWEIS(9^9;--LINKS(9&A" & lngC & ";SPALTE(1:1))))-1"
Next lngC
End Sub
Gruß Stefan
Win 10 / Office 2016
Registriert seit: 13.04.2014
Version(en): 365
Hallo,
das R1C1 kann entfallen und es fehlt ein Gleichheitzeichen in der Formel:
Code:
Range("B" & lngC).FormulaLocal = "=LÄNGE(VERWEIS(9^9;--LINKS(9&A" & lngC & ";SPALTE(1:1))))-1"
Gruß
Edgar
Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Registriert seit: 11.08.2014
Version(en): 2013
Hallo Leute,
danke für eure Antworten. Worauf ich hinaus will ist folgendes:
Code:
Sub Makro2()
Dim a As Variant
Range("B1").Select
ActiveCell.FormulaR1C1 = "=LEN(LOOKUP(9^9,--LEFT(9&RC[-1],COLUMN(R))))-1"
a = Range("B1").Value
Range("B1").Value = ""
Debug.Print a
End Sub
Wie ihr seht habe ich über den Umweg der Formelzuweisung (das mit dem "localFormula" könnt ihr mir bitte nochmal gesondert erklären) auf Zelle B1 für die Variable a das gewünschte Ergebnis bekommen und dann die Formel in Zelle B1 wieder gelöscht. Mein Anliegen ist wie mache ich ohne diesen Umweg eine solche Zuweisung. So etwas geht doch schöner, oder?!
Schön wäre es wenn es z.B . so gehen würde
a.FormulaR1C1 = "=LEN(LOOKUP(9^9,--LEFT(9&RC[-1],COLUMN(R))))-1"
und dann vielleicht
mit
a.value in VBA irgendwie weiter arbeiten könnte.
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo,
zu der Formula(R1C1)Local-Eigenschaft: Mal aus der OH
Zitat:Range.FormulaR1C1Local-Eigenschaft
Gibt die Formel für das Objekt in Z1S1-Schreibweise in der Sprache des Benutzers zurück oder legt diese fest.Variant-Wert mit Lese-/Schreibzugriff.
Das entscheidende habe ich fett markiert. In deinen Startbeitrag hast Du eine Formel in deutscher Schreibweise gepostet und da brauchst Du dann das Local.
Deinen Wunsch habe ich nicht ganz verstanden aber suche mal nach Evaluate.
@Edgar:
Danke für die Berichtigung :17:
Gruß Stefan
Win 10 / Office 2016
Registriert seit: 11.08.2014
Version(en): 2013
Eigentlich suche ich genau so etwas:
Code:
Sub Zuordnung()
Dim vx As Range
'Formelzuweisung:
vx.FormulaLocal = "=LEN(LOOKUP(9^9,--LEFT(9&RC[-1],COLUMN(R))))-1"
'Ergebnis: (Weiterverarbeitung möglich)
Debug.Print vx.Value
End Sub
(Funktioniert natürlich leider nicht)
Was ich nicht möchte ist das ich irgendwie über eine bestimmte Zelle in meinem Excel-Tabellenblatt
gehen muss.
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo,
das fehlt das Set vor dem vx.Formula..
Code:
Sub Zuordnung()
Dim vx As Range
'Formelzuweisung:
Set vx.Formula = "=LEN(LOOKUP(9^9,--LEFT(9&RC[-1],COLUMN(R))))-1" 'da du die englische Schreibweise verwendest, geht es ohne local
'Ergebnis: (Weiterverarbeitung möglich)
Debug.Print vx.Value
End Sub
Gruß Stefan
Win 10 / Office 2016
Registriert seit: 11.10.2014
Version(en): 12/2007&14/2010
Hallo, Stefan;
das ist nicht richtig! Nicht das Set fehlt, sondern die Zuweisung eines Objekts an die Objektvariable vx! Die Zuweisung des Formeltextes bzw einer diesen enthaltenden Variablen an die Formula-Eigenschaft des Range-Objekts kann ohne Set erfolgen. Außerdem muss die Zuweisung eines R1C1(/Z1S1)-Formeltextes an .FormulaR1C1(Local) erfolgen, damit nicht intern umgerechnet werden muss, was entweder nur zu Zeitverzögerungen oder schlimmstenfalls zu Fehlermeldungen führt.
Gruß, Castor
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo Castor,
Du hast Recht! Ich hatte die Formel von sotaros nicht angeschaut und nur kopiert. Erst jetzt habe ich mir die Formel angeschaut und eventuell ein weiteres Problem entdeckt und zwar bei COLUMN(R) Wenn der Variablen R keine Zahl zugewiesen ist (was man ja aus dem geposteten Code nicht ersehen kann) gibt es einen Fehler.
Gruß Stefan
Win 10 / Office 2016
Registriert seit: 11.08.2014
Version(en): 2013
Hallo Leute,
ja der Formelfehler hat sich irgendwie eingeschlichen. Nehmen wir wieder die Formel
vom Anfang dieses Threads:
LÄNGE(VERWEIS(9^9;--LINKS(9&A1;SPALTE(1:1))))-1
der Bezug zu einer konreten Zelle und Spalte muss selbstverständlich gegeben sein.
Bleibt noch der Code.