Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1140to1144
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
Inhaltsverzeichnis

Matrix-Formel in VBA

Matrix-Formel in VBA
Fred
Liebe Experten,
ich hoffe jmd kann mir bei folgendem Problem helfen:
Ich möchte folgende Matrixformel in VBA darstellen:
=+SUMME((BR2:BR18)*($BJ$2:$BJ$18="Exposure"))
Bei folgenden Code bekomme ich jedoch die Fehlermeldung, dass die Typen unverträglich sein?
sourcedata.Activate
lastrow = sourcedata.Cells(Rows.Count, 1).End(xlUp).Row
ReDim data(1 To endspalte - startspalte + 1)
Set datatyprng = sourcedata.Range(Cells(2, 62), Cells(lastrow, 62)) 'ExposureOrLimit-column
For i = 1 To endspalte - startspalte + 1
Set sumrng = sourcedata.Range(Cells(2, startspalte + i - 1), Cells(lastrow, startspalte + i - 1))
data(i) = Application.WorksheetFunction.Sum((sumrng) * (datatyprng = "Exposure"))
Next i
Wie kann ich denn eine Matrix-Formel in VBA nachbilden? Geht das nur über einen anderen weg?
Vielen Dank für Eure Hilfe!
Fred

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Matrix-Formel in VBA
02.03.2010 15:58:05
Renee
Hi Fred,
1. Dein Code ist leider unvollständig, z.B. fehler Definition (startspalte, sumrng, daratyprng....)
2. Wie kann ich denn eine Matrix-Formel in VBA nachbilden? Nicht mit einer Worksheetfunction!
Du musst schon selber durch den Array iterieren und die entsprechenden Summe bilden!
Ein anderer Ansatz wäre, die Formel in eine temporäre Zelle schreiben, das Resultat auszulesen und die Zelle wieder zu leeren.
GreetZ Renée
...Anderenfalls kannst du sie in VBA nur in...
02.03.2010 16:05:04
Luc:-?
…Originalform evaluieren, Fred,
also die vbFkt Evaluate benutzen. Dabei kannst du natürlich auch variable FmlTeile aus vbVariablen zu passendem FmlText umgestrickt in den FmlString einbauen.
Gruß Luc :-?
Anzeige
Matrix-Formel in VBA - Evaluate
02.03.2010 17:28:23
Erich
Hi Fred,
probier mal

Option Explicit
Sub aTest()
Dim wksSource As Worksheet
Dim lngLast As Long, lngStartSp As Long, lngEndSp As Long, ii As Long
Dim rngExp As Range, rngSum As Range, data() As Double
lngStartSp = 69               ' für Test
lngEndSp = 70                 ' für Test
Set wksSource = ActiveSheet   ' für Test
wksSource.Activate
lngLast = wksSource.Cells(Rows.Count, 1).End(xlUp).Row
ReDim data(1 To lngEndSp - lngStartSp + 1)
Set rngExp = Range(Cells(2, 62), Cells(lngLast, 62)) 'ExposureOrLimit-column
For ii = lngStartSp To lngEndSp
Set rngSum = wksSource.Range(Cells(2, ii), Cells(lngLast, ii))
data(ii - lngStartSp + 1) = Evaluate("=SUM(" & _
rngSum.Address & "*(" & rngExp.Address & "=""Exposure""))")
' oder
data(ii - lngStartSp + 1) = Evaluate("=SUMPRODUCT(" & _
rngSum.Address & "*(" & rngExp.Address & "=""Exposure""))")
Next ii
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Matrix-Formel in VBA - Evaluate
03.03.2010 10:41:39
Fred
Hallo Erich,
bin leider erst jetzt wieder vorm Computer. Vielen Dank für Deine Hilfe! "Evaluate" kannte ich nicht. Dein Beispiel klappt, wenn ich jeweils Klammern um die Terme setze. Viele Dank für den super Tipp!! Vielen Dank auch an die anderen für ihre Hinweise.
Viele Grüße
Fred
AW: Matrix-Formel in VBA - Evaluate
03.03.2010 11:37:18
Fred
Hallo Erich,
jetzt habe ich ein weiteres Problem. Ich habe die Summe um eine Klammer - d.h. eine Bedingung - erweitert. Ich bekomme auch keine Fehlermeldung und alles scheint zu klappen, jedoch ist das Ergebnis immer "Fehler 2029". Kannst Du mir weiterhelfen? Wenn ich die Funktion normal in Excel nutze, funktioniert diese (als Matrix-Formel) einwandfrei.
Über einen weiteren Tipp würde ich mich freuen.
Viele Grüße
Fred
Mein gesamter Code lautet:
Dim sourcedata As Worksheet
Dim monat As Integer, jahr As Integer, quartal As Integer, startspalte As Integer, endspalte As Integer, i As Integer, lastrow As Integer
Dim spaltenheading As String
Dim qrtdata()
Dim sumrng As Range, datatyprng As Range, sorttyprng As Range
Dim j As Integer, z As Integer, lastcol As Integer
Dim tmpdata
Dim tmp As String
'##### Initialisiere Daten
startdate = CDbl(startdate)
enddate = CDbl(enddate)
Set sourcedata = Worksheets("DataSummary_CreditReport")
'##### Bestimme benötigte Quartalsspalte #######
'(1) Anfangsspalte
monat = Month(startdate)
jahr = Year(startdate)
quartal = Application.WorksheetFunction.RoundUp(monat / 12 * 4, 0)
spaltenheading = jahr & "Q" & quartal
startspalte = 1
Do Until sourcedata.Cells(1, startspalte) = spaltenheading
startspalte = startspalte + 1
Loop
'(2) Endspalte
monat = Month(enddate)
jahr = Year(enddate)
quartal = Application.WorksheetFunction.RoundUp(monat / 12 * 4, 0)
spaltenheading = jahr & "Q" & quartal
endspalte = startspalte
Do Until sourcedata.Cells(1, endspalte) = spaltenheading
endspalte = endspalte + 1
If sourcedata.Cells(1, endspalte) = "" Then
endspalte = sourcedata.Cells(1, Columns.Count).End(xlToLeft).Column 'Letzte Spalte in DataSummary
Exit Do
End If
Loop
'#### Summiere - je nach Bedingungen - Exposures auf
sourcedata.Activate
lastrow = sourcedata.Cells(Rows.Count, 1).End(xlUp).Row
ReDim qrtdata(1 To UBound(sortierliste, 1), 1 To endspalte - startspalte + 1)
Set datatyprng = sourcedata.Range(Cells(2, 62), Cells(lastrow, 62)) 'ExposureOrLimit-column
Set sorttyprng = sourcedata.Range(Cells(2, sortierspalte), Cells(lastrow, sortierspalte)) 'Rating/Firma-Column etc.
For j = 1 To UBound(sortierliste, 1) 'Durchlaufe Firmen/Ratings etc.
tmp = sortierliste(j)
For i = 1 To endspalte - startspalte + 1
Set sumrng = sourcedata.Range(Cells(2, startspalte + i - 1), Cells(lastrow, startspalte + i - 1))
qrtdata(j, i) = Evaluate("=SUM((" & sumrng.Address & ") *(" & sorttyprng.Address & "=" & tmp & ")* (" & datatyprng.Address & " = ""Exposure""))")
Next i
Next j
calcexposure = qrtdata
Anzeige
Beispielmappe?
03.03.2010 12:15:13
Erich
Hi Fred,
nur mit dem Code verstehe ich das noch nicht.
(Das mit den Klammern hatte ich auch schon nicht verstanden.)
Das ist sicher nicht der vollständige Code. Was ist sortierliste(j) ?
Das Evaluate-Ergebnis hängt auch von den Daten ab.
Deshalb wäre eine lauffähige Beispielmappe, in der der Fehler auftritt, hilfreich.
Vielleicht kannst du diese hier als Ausgangspunkt nehmen:
https://www.herber.de/bbs/user/68338.xls
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Beispielmappe?
03.03.2010 12:41:01
Fred
Hallo Erich,
vielen Dank für Deine Hilfsbereitschaft. Während des Erstellens der Beispielmappe ist mir aufgefallen, woran es liegt.
Ich habe die Anführungszeichen beim tmp vergesse. Mit folgendem Befehl funktioniert es jetzt anscheinend:
qrtdata(j, i) = Evaluate("=SUM((" & sumrng.Address & ") *(" & sorttyprng.Address & "=""" & tmp & """)* (" & datatyprng.Address & " = ""Exposure""))")
Zur Deiner Frage mit den Klammern: wenn ich um die einzelnen Terme nicht in Klammern setze funktioniert das bei mir nicht.
Vielen Dank für Deine Unterstützung
Fred
Anzeige

319 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige