Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
748to752
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
748to752
748to752
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Matrixformel

Matrixformel
28.03.2006 11:30:49
Sylvio
Hallo @all,
ich hab mir mit vba nen String zusammengebastelt der ne Formel ist.
nun schreib ich den mit ...Cells(1,1).Value = meinString ins Workbook
Problem, wie sag ich vba, dass er doch dieses strg + shift + enter für matrixformel drumlegt damit ich das als matrixformel in der zelle stehen habe?
Danke Sylvio

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Matrixformel
28.03.2006 11:41:55
IngGi
Hallo Sylvio,
...Cells(1, 1).FormulaArray="Deine Matrixformel"
Gruß Ingolf
AW: Matrixformel
28.03.2006 12:10:53
Sylvio
Hallo Ingolf,
.FormulaArray = funzt net weil ich ja eine string-variable übergebe
Gruß Sylvio
AW: Matrixformel
28.03.2006 12:15:38
ingoG
Hallo Ingolf,
das sollte schon funzen, wenn Dein String "ordentlich" aussieht ;-):
sieh mal hier mit zusammengebautem String (vorsicht, schreibt ins aktive tabellenblatt, a1):
Option Explicit

Sub matrixformel_a1()
With ActiveSheet
Range("A1").FormulaArray = "=sum(if(" & .Range(.Cells(2, 1), .Cells(10, 1)).Address _
& "="""",0,1/countif(" & .Range(.Cells(2, 1), .Cells(10, 1)).Address & "," _
& .Range(.Cells(2, 1), .Cells(10, 1)).Address & ")))"
End With
End Sub

Gruß Ingo
PS eine Rückmeldung wäre nett...
Anzeige
AW: Matrixformel
28.03.2006 12:23:46
Sylvio
Hallo Ingolf,
das steht bei mir im String drin:
=INDEX('F:\70_Excel\herber help\31788 Gabi\Hauptordner\[menü.xls]makro'!F$1:F$3001;KKLEINSTE(WENN($A4&$B4&$C4='F:\70_Excel\herber help\31788 Gabi\Hauptordner\[menü.xls]makro'!$A$1:$A$3001&'F:\70_Excel\herber help\31788 Gabi\Hauptordner\[menü.xls]makro'!$B$1:$B$3001&'F:\70_Excel\herber help\31788 Gabi\Hauptordner\[menü.xls]makro'!$C$1:$C$3001;ZEILE($1:$2948));SUMME(($A$4:$A4&$B$4:$B4&$C$4:$C4=$A4&$B4&$C4)*1));1)
wenn ich .cells(1,1).Value = string
schreibe geht es ohne die {} Klammern
wenn ich .cells(1,1).FormulaArray = string
schreibe geht es nicht
ich brauche dieses Cells(1,1) weil ich die "1"'en später durch Laufvariablen i und j ersetzen möchte.
Gruß Sylvio
Anzeige
AW: Matrixformel
28.03.2006 12:52:09
ingoG
Hallo Sylvio,
wie Du vielleicht bemerkt hast, habe ich die Formel mit den Englischen Funktionen codiert...
dies ist meines wissens auch zwingend notwendig, damit die Formel von VBA erkannt wird.
was Du zB mit value zuweist ist ja auch keine Formel, die excel als solche erkennt, sondern nur ein String, den er dieser Zelle zuweist. wenn Du mit F2 in die Zelle gehst wandelt er sie erst um.
mE kommst Du also nicht darum herum, die Formel auf englisch zu definieren.
dann sollte es aber laufen
Gruß Ingo
PS eine Rückmeldung wäre nett...
Ich und english juhu
28.03.2006 13:01:45
Sylvio
Hallo Ingolf,
super muss ich jetzt das ganze auch noch übersetzen. Kann ich nicht einfach diesen stringausdruck in ne Formel zurückwandeln? Hab keine lust mir den String mit englichen Formeln zusammenzubasteln, da ich ja diesen Ausdruck nur aus einer Zelle einlese was ersetze (in dem fall den Pfad) und anschließend wieder in die Zelle reinschreibe.
er rechnet ja auch schon wenn ich cells(1,1).value eingebe er gibt ne null zurück weil {} fehlen
jetzt will ich doch nur im Nachhinein die {} Klammern drummhaben mit VBA geht das nicht irgendwie. Sonst muss ich ja meinen ganzen String umarbeiten.
Gruß Sylvio
Anzeige
AW: Ich und english juhu
28.03.2006 13:16:57
Uwe
Hi Sylvio,
da stand letztens ein toller Trick im Forum (weiß leider nicht mehr von wem?):
Die Formel in ein Feld einer Tabelle schreiben/ Feld auswählen / nach VBA wechseln und im Direkbereich eingeben:
?activecell.Formula
Dann schreibt "er" Dir die korrekte englisch Formel drunter.
Gruß
Uwe
(:o)
Trick funzt nicht
28.03.2006 13:29:13
Sylvio
Wenn ich das mit nochmal ausgeben lasse kommt genau der selbe text raus wie der den ich vom string an die Zelle übergebe.
Gibt es den Keine Möglichkeit den String, der ja schon als Formel richtig übergeben wird, da null als Ergebnis in der Zelle rauskommt, in eine Formel mit {} Klammern umzuwandeln. quasi strg + shift + enter von VBA machen lassen.
Gruß Sylvio
Anzeige
AW: Trick funzt nicht? Bei mir schon:
28.03.2006 13:44:11
Uwe
Hi Sylvio,
bei mir funzt es. Ergebnis:
=INDEX('F:\70_Excel\herber help\31788 Gabi\Hauptordner\[menü.xls]makro'!F$1:F$3001,SMALL(IF($A4&$B4&$C4='F:\70_Excel\herber help\31788 Gabi\Hauptordner\[menü.xls]makro'!$A$1:$A$3001&'F:\70_Excel\herber help\31788 Gabi\Hauptordner\[menü.xls]makro'!$B$1:$B$3001&'F:\70_Excel\herber help\31788 Gabi\Hauptordner\[menü.xls]makro'!$C$1:$C$3001,ROW($1:$2948)),SUM(($A$4:$A4&$B$4:$B4&$C$4:$C4=$A4&$B4&$C4)*1)),1)
Ist zwar nur das SMALL(IF...)und das ROW geändert, aber immerhin.
(Außerdem hat EXCEL mir bei der Eingabe einen Korrekturvorschlag gemacht, den ich angenommen habe ohne zu checke wo der Unterschied lag, schätze mal irgendeine Klammer)
Gruß
Uwe
(:o)
Anzeige
AW: Trick funzt nicht? Bei mir schon:
28.03.2006 14:08:50
Sylvio
Hallo Uwe,
die ganze Sache geht so als auch so nicht?
ich übergebe ...Cells(1,1).Value = string (in deutsch) ergebnis im workbook ist null
ich übergebe ..Cells(1,1).Value = string (in english) ergebnis im workbook ist null
ich übergebe ...Cells(1,1).Formula = string (in deutsch) ergebnis fehler in vba
ich übergebe ...Cells(1,1).Formula = string (in english) ergebnis im workbook ist null
ich übergebe ...Cells(1,1).ArrayFormula = string (in deutsch) ergebnis fehler in vba
ich übergebe ...Cells(1,1).ArrayFormula = string (in english) ergebnis fehler in vba
Und ich will doch nur noch um diese richtige formel egal ob deutsch oder english diese
doofen Matrix-Klammern {} damit statt null als ergebnis ne Zahl ausgegeben wird.
Ich verzweifle bald :-(
Gruß Sylvio
Anzeige
Frage vergessen auf offen zu setzen
Sylvio
Hallo Uwe,
die ganze Sache geht so als auch so nicht?
ich übergebe ...Cells(1,1).Value = string (in deutsch) ergebnis im workbook ist null
ich übergebe ..Cells(1,1).Value = string (in english) ergebnis im workbook ist null
ich übergebe ...Cells(1,1).Formula = string (in deutsch) ergebnis fehler in vba
ich übergebe ...Cells(1,1).Formula = string (in english) ergebnis im workbook ist null
ich übergebe ...Cells(1,1).ArrayFormula = string (in deutsch) ergebnis fehler in vba
ich übergebe ...Cells(1,1).ArrayFormula = string (in english) ergebnis fehler in vba
Und ich will doch nur noch um diese richtige formel egal ob deutsch oder english diese
doofen Matrix-Klammern {} damit statt null als ergebnis ne Zahl ausgegeben wird.
Ich verzweifle bald :-(
Gruß Sylvio
Anzeige
englische formel
28.03.2006 16:07:30
ingoG
Hallo sylvio,
Du sagst, Du liest die formel nur aus...
wenn Du sie mit
str_formel = Range("a1").formula
ausliest, erhälst Du schon die englische version...
dann kannst Du ja einfach hier die ersetzungen machen
Gruß Ingo
Hallo Ingo
29.03.2006 10:48:17
Sylvio
Ich hab gestern noch etwas rumprobiert und folgendes festgestellt:
ich hab jetzt meine Variable als Formula eingelesen
kann sie aber nicht als FormulaArray wieder ausgeben kommt Fehler 13 Typ unverträglich
Bedingung ist: Variable ist als string definiert
lese ich die Sache als FormulaArray ein steht in der Variable "Fehler2015" wenn ich die wieder in eine zelle ausgebe schreibt er #WERT! rein.
Bedingung ist: Variable ist als Variant deklariert
Kann mir da jemand helfen?
Gruß Sylvio
Anzeige
AW: Hallo Ingo
29.03.2006 11:11:30
Sylvio
ich glaub ich hab das Problem: es ist die Zeichenbeschränkung von 255 bei FormulaArray.
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q213181
Gibt es ne Möglichkeit, nachdem ich es mit Formula "rübergeschippert" habe, einfach über, ich stelle mir sendkey anweisung strg + shift + enter vor, an die Zelle zu übergeben?
Gruß Ingo
AW: Hallo Ingo (Selbstgespräch) :-)
29.03.2006 12:09:38
Sylvio
Ich habs jetzt glaub ich
also ich lass mir den string erst in die zelle schreiben und mach mit sendkey dann ne Matrixformel draus. So geht und ich bin nicht auf die 255 Zeichen angewiesen. :-)
Excel ist halt sehr beschränkt.
Gruß Sylvio
Anzeige
AW: Hallo Ingo
29.03.2006 11:47:48
ingoG
Hallo Sylvio,
mir ist noch nicht ganz klar, wie Dein Code wirklich aussieht...
vielleicht kannst Du mal eine Testdatei mit den relevanten Teilen hochstellen, dann ist die Beantwortung Deiner Frage wesentlich leichter
Gruß Ingo
Lösung
29.03.2006 12:19:57
Sylvio
Hallo Ingo,
ich hab ja jetzt die Lösung. Hier noch mal zum Verständnis.
wenn ich:
string = ....Cells(1,1).FormulaArray einlese darf der String nur 255 zeichen haben
string = ....Cells(1,1).Formula einlesen hab ich maximale Zeichen die in eine Zelle passen zum einlesen
will ich den string wieder in die Zelle schreiben:
...Cells(1,1).FormulaArray = string dann geht das nur wenn die Zeichenkette nicht länger als 255 ist
...Cells(1,1).Formula = string dann geht das für die maximale Zeichenlänge die in eine Zelle passt
mein String ist nun um die 500 Zeichen lang, deshalb ging immer FormulaArray nicht.
jetzt mach ich es anders. Ich nehme formula füge den String nach der umbearbeitung ein
und aktiviere anschließend die Zelle um mit Sendkey-Anweisung das strg+shift+enter zu schicken und schon hab ich meine Matrixformel
Das geht kommischerweise obwohl dann in der Zelle mehr als 255 zeichen sind.
Der Befehl FormulaArray kann aber nur 255 Zeichen verarbeiten. Verstehe einer Microsoft
Quasi ein bisschen über Umwege und schon gehts.
Danke trotzdem für all deine Hilfe.
Fazit: wieder was dazugelernt
Gruß Sylvio
Danke für die Rückmeldung mT
29.03.2006 12:56:35
ingoG
Hallo Sylvio,
freut mich, dass Du eine Lösung für dieses Problem gefunden hast, es scheint ja wirklich ein bug in vba zu sein, da excel diese Grenze ja garnicht kennt.
könntest Du vielleicht den code-schnipsel hier hereinstellen, in dem du die Formel in der Zelle aktivierst und dann mit sendkey in eine Matrixformel umsetzt, dann brauche ich mich nicht durch die Hilfe zu quälen ;-)
Gruß Ingo
Hier ist Sendkey für Matrixformel
29.03.2006 13:07:28
Sylvio
Hallo Ingo,
lass die Hilfe in Ruhe hier ist die simple Lösung:
Application.ThisWorkbook.Sheets(1).Cells(1, 1).Select
Application.SendKeys ("{F2}")
Application.SendKeys ("^+{Enter}")
und fertig
Gruß Sylvio
Danke für den Tip ...
29.03.2006 14:46:13
ingoG
... werde ich bestimmt mal brauchen können
gruß Ingo

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige