Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1716to1720
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

In VBA Matrixformel verwenden

In VBA Matrixformel verwenden
24.10.2019 14:22:03
Frank
Hallo,
vielleicht kann mir jemand helfen und sagen, wo der Fehler liegt.
Ich versuche in VBA eine Matrixformel zu berechnen und das Ergebnis in einer Variable abzulegen.
Die Formel soll in einem Bereich die Anzahl der Zellen ausgeben, in denen der Teilstring "Frank" enthalten ist.
In Excel sieht die Formel so aus und funktioniert:
{=SUMME(ISTZAHL(FINDEN(C1;A1:A10))*1)}
In VBA habe ich es mit diesen beiden Konstrukten versucht:
  • 
    Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim ChRange As Range, isect As Range, ws As Worksheet, sName As String, AnzsName As Integer, _
    rng As Range, s As Integer, thisws As Worksheet
    Set ChRange = Range("B2")
    Set isect = Application.Intersect(Target, ChRange)
    If Not (isect Is Nothing) Then
    Set thisws = ActiveSheet
    sName = Target.Value
    AnzsName = 0
    s = 0
    For Each ws In Sheets
    If ws.Name  thisws.Name Then
    Set rng = ws.Range("A1:A10")
    '          =SUMME(ISTZAHL(FINDEN(C1;A1:A10))*1)
    '          s.FormulaArray = "Sum(IsNumeric(rng.Find(What:=sName.Value)) * 1)"
    s = FormulaArray = "Sum(IsNumeric(rng.Find(What:=sName.Value)) * 1)"
    AnzsName = AnzsName + s
    s = 0
    End If
    Next ws
    thisws.Cells(2, 5) = s
    End If
    End Sub
    

  • s.FormulaArray = "Sum(IsNumeric(rng.Find(What:=sName.Value)) * 1)"
  • gibt eine Fehlermeldung aus,
  • s = FormulaArray = "Sum(IsNumeric(rng.Find(What:=sName.Value)) * 1)"
  • hat das Ergebnis 0, wobei in meiner Beispieldatei 3 hätte herauskommen müssen.
    Gruß Frank
    https://www.herber.de/bbs/user/132724.xlsm

    6
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: In VBA Matrixformel verwenden
    24.10.2019 14:27:28
    Daniel
    HI
    was hast du genau vor?
    willst du:
    a) die ArrayFormel in eine Zelle schreiben
    b) das Ergebnis der Array-Formel in die Variable s schreiben?
    in deinem Code vermischst du beides (und noch ein paar andere Dinge wirfst du durcheinander)
    Gruß Daniel
    AW: In VBA Matrixformel verwenden
    24.10.2019 14:45:45
    Frank
    Hi Daniel,
    b) ist was ich vorhabe.
    Der Anhang ist nur ein vereinfachtes Beispiel.
    Tatsächlich gibt es 52 Blätter mit den Kalenderwochen eines Jahres und ein Blatt zur Auswertung verschiedener Dinge.
    Eines davon ist, für alle 52 KW die Anzahl der Zellen zu ermitteln, in denen als Beispiel der Teilstring "Frank" vorkommt. Es müssen also alle 52 KW-Blätter dananch durchsucht werden und die einzelnen ermittelten Werte der einzelnen KW zum Gesamtergebnis aufsummiert werden.
    Frank
    Anzeige
    AW: In VBA Matrixformel verwenden
    24.10.2019 14:58:33
    Daniel
    Hi
    Arrayformeln kannst du so direkt nicht in VBA verwenden.
    Wenn dann nur über den Umweg mit Evaluate("xxx") oder [xxx], wobei xxx der Formelext sein muss, so wie er in einem amerikanischen Excel in die Zelle geschrieben werden muss.
    also im Prinzip so:
    s = Evaluate("SUM(ISNUMBER(FIND(Gesamt!B2,'KW01'!A1:A10))*1)")
    
    Gruß Daniel
    AW: In VBA Matrixformel verwenden
    24.10.2019 18:07:09
    Frank
    Hi Daniel,
    danke,dann brauche ich nicht weiter rumprobieren. Matrixformeln in einer Schleife in VBA ist also nicht möglich.
    Gruß Frank
    AW: In VBA Matrixformel verwenden
    24.10.2019 18:40:48
    Daniel
    kommt darauf an, was du vor hast.
    bei Evaluate ist der Formeltext ein einfacher String, welchen du nach den normalen Regeln aus Einzelbausteinen wie fester Text und Variablen zusammensetzen darfst.
    Damit kannst du das Evaluate auch in einer Schleife einsetzen, wenn du bspw eine Schleife über alle Tabellenblätter machen willst.
    wichtig ist, dass der Ergebnistext einer Formel in englischer A1-Schreibweise entspricht.
    Gruß Daniel
    Anzeige
    AW: In VBA Matrixformel verwenden
    24.10.2019 21:13:01
    Frank
    Danke Daniel,
    das hat mir geholfen, die elegante Methode mit Matrixformel in der Schleife doch noch umzusetzen.
    Der funktionierende Code sieht dann so aus
    Sub Worksheet_Change(ByVal Target As Range)
    Dim ChRange As Range, isect As Range, ws As Worksheet, AnzsName As Integer, s As Integer,  _
    thisws As Worksheet
    Dim selName As String, kwWert As String, gesWert As String, rngRange As String, mStr As  _
    String
    selName = "B2"         ' Zelle definieren für gesuchten Namen
    kwWert = "D1"           ' Zelle definieren für Einzel Ergebnis auf KW Blatt
    gesWert = "E2"          ' Zelle definieren Eintrag des Gesamt Ergebnisses auf Blatt 'Gesamt' _
    rngRange = "A1:A10" ' Suchbereich in den KW Blättern, der muß in allen Blättern derselbe  _
    sein
    Set ChRange = Range("B2")
    Set isect = Application.Intersect(Target, ChRange)
    If Not (isect Is Nothing) Then
    Set thisws = ActiveSheet
    AnzsName = 0
    s = 0
    For Each ws In Sheets
    If ws.Name  thisws.Name Then
    Set rng = ws.Range("A1:A10")
    mStr = "SUM(ISNUMBER(FIND(" & thisws.Name & "!" & selName & ",'" & ws.Name & "'!"  _
    & rngRange & "))*1)"
    s = Evaluate(mStr)
    AnzsName = AnzsName + s
    s = 0
    End If
    Next ws
    thisws.Cells(2, 5) = AnzsName
    End If
    End Sub
    

    Anzeige

    312 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige