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

SUMIF + MID()

SUMIF + MID()
03.02.2016 17:53:56
Björn
Hallo,
ich möchte gerne in eine SUMIF-Funktion eine mid()-Funktion integrieren. Bei der Programmierung habe ich mich an die Microsoft Dokumentation gehalten. Leider wird mir ein Fehler angezeigt, wenn ich das Makro starte.
Fehler beim Kompilieren - Erwartet Listentrennzeichen oder )
Aus meiner Sicht sind alle Klammern richtig gesetzt...
In Spalte B soll eine bestimmte Zahlenkombination gesucht werden und die Summe aller Werte aus Spalte C ausgegeben werden.
Kann mir jemand weiterhelfen?
https://www.herber.de/bbs/user/103269.xlsm
Quellcode:
Option Explicit
Public Function summeA(varTabelle1 As Variant, lngKto As Long) As Double
With Worksheets(varTabelle1)
summeA = Application.WorksheetFunction.SumIf(.Range("B2:B22"), Mid(B2:B22, 2, 4) = lngKto, _
.Range("C2:C100"))
End With
End Function
Sub TestIt()
Debug.Print summeA(1, 1234)
End Sub

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

Betreff
Datum
Anwender
Anzeige
An die Doku gehalten? Nutzt nichts! AW s...
03.02.2016 18:53:24
Luc:-?
…hier: https://www.herber.de/forum/messages/1473087.html
Hier kommt der Teil der dortigen AW zum Tragen, der einen skalaren Wert, kein Datenfeld als Argument2 postuliert. Außerdem kann die vbFkt Mid keinen ganzen ZellBereich auf 1× verarbeiten, schon gar nicht in dieser Schreibweise, die nur in ZellFmln möglich wäre, und ein derartiger Vgl wäre auch nur mit 1em Einzelwert möglich! Schreibe die Fml als ZellFml, aber in Original-US-Notation als Text und verwende die vbFkt Evaluate, wenn du dir aufwendige Schleifen ersparen willst!
Gruß, Luc :-?
Besser informiert mit …

Anzeige
AW: An die Doku gehalten? Nutzt nichts! AW s...
03.02.2016 19:10:28
Björn
Das ist zu hoch für mich...:)
Trotzdem Danke für Deine Antwort!
Grüße

Ich sehe gerade, dass du versucht hast, ...
03.02.2016 19:42:17
Luc:-?
…die unter dem Link genannten Einschränkungen zu umgehen, was natürlich nicht fktioniert, Björn;
selbst wenn dein Argument2 Werte liefern würde, was es so nicht tun kann, würden dabei Wahrheitswerte herauskommen, die garantiert nicht im VglsBereich B2:B22, mit dem diese vgln würden, stehen. Das wird also auf keinen Fall etwas, auch nicht mit Evaluate! Du musst dir also eine andere Fml ausdenken und die erst mal im TabBlatt ausprobieren. Die kannst du dann auch als FmlText-Argument von Evaluate (in engl Schreibweise!) verwenden.
Übrigens, wenn man so etwas partout mit VBA machen will, sollte man sich auch intensiv mit den Grundlagen beschäftigen. Mit …ist zu hoch für mich… wirst du nicht weit kommen… ;-]
Luc :-?

Anzeige
AW: Ich sehe gerade, dass du versucht hast, ...
03.02.2016 20:15:47
Björn
Mit "zu hoch" habe ich mich auf die Art der Erklärung bezogen. Ich habe gehofft, dass man das Problem bzw. den Fehler im Quellcode verständlicher erklären kann.
Trotzdem vielen Dank für Deine Hinweise :)
Grüße

Ganz einfach; xlVBA ist zwar FÜR Xl, ...
03.02.2016 22:14:12
Luc:-?
…fktioniert aber nicht wie Xl, Björn,
und du bist davon ausgegangen, dass eine VBA-Anweisung, hier speziell die Fkt aus Xl, genau wie in Xl fktioniert. Das ist aber ein Trugschluss, denn hinter Xl steht ein umfangreiches HintergrundPgm, die Calculation Engine, das in VBA natürlich fehlt. Da muss man alles selber vorsehen und machen.
Deine VBA-Zeile dürfte jede Menge FehlerMeldungen verursachen, denn sie entspricht nicht der VBA-Syntax. Jede Sprache hat Regeln, auch eine PgmmierSprache!
Deshalb bestand mein Vorschlag iW darin, dir zu raten, erst mal eine fktionierende TabBlatt-ZellFml zu entwickeln. Die kann man dann zur Not auch als FmlText in US-Notation mit Evaluate auswerten.
Nebenbei, Mid(B2:B22, 2, 4) = lngKto ist absoluter Quatsch, denn Mid ist eine vbFkt, die nicht mit der XlFkt TEIL (engl MID) übereinstimmt. Du hättest also zumindest Mid(Range("B2:B22"), 2, 4) = lngKto schreiben müssen, was dir aber nichts genutzt hätte, weil die vbFkt nur einen einzigen Textwert auf 1× verarbeiten kann, keinen ganzen ZellBereich. Du hättest hier also Evaluate("Mid(B2:B22,2,4)=" & lngKto) schreiben müssen, was dir nichts geholfen hätte, denn es wäre bestenfalls ein Vektor aus True- und False-Werten herausgekommen (eigentl nur False-Werte, da Mid einen Text liefert, der niemals gleich einer echten Zahl sein kann; das Mid-Ergebnis hätte also noch umgewandelt → zB -- davor ← oder der Vglswert hätte zu Text wdn müssen, zB so: "Mid(B2:B22,2,4)=""" & lngKto & """"). Die XlFkt SumIf hätte den auf Gleichheit mit ihrem 1.Argument vgln, so ist sie angelegt (!), und dabei natürlich keinerlei Übereinstimmung gefunden. Das kann also nicht der Weg sein!
Versuche also, dein Problem mit einer ZellFml zu lösen (dabei können dir hier viele helfen!). Danach kann man das immer noch erfolgreich in ein VBA-Pgm umsetzen.
Luc :-?

Anzeige
AW: SUMIF + MID()
03.02.2016 22:16:47
Daniel
Hi
die Klammern sind richtig gesetzt.
falsch ist der zweite Parameter deines SummeWenns.
hier musst du den Vergleichswert als Text angeben, so wie in einer Excelzelle halt auch gebenenfalls mit Platzhaltern.
ausserdem sollten die Zellbereiche bei solchen Funktionen immer gleich gross sein.
selbst wenn ungleich grosse Zellbereiche funktionieren, es ist hier sinnlos.
probiers mal so:
summeA = Application.WorksheetFunction.SumIf(.Range("B2:B23"), "DE" & lngKto, .Range("C2:C23"))

wenns unabhängig von den ersten zwei Buchstaben sein soll:
summeA = Application.WorksheetFunction.SumIf(.Range("B2:B23"), "?" & lngKto, .Range("C2:C23"))

oder
summeA = Application.WorksheetFunction.SumIf(.Range("B2:B23"), "*" &  lngKto, .Range("C2:C23"))
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige