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

SummenFunktion Uhrzeitformat ausnehmen

SummenFunktion Uhrzeitformat ausnehmen
26.11.2013 12:32:00
Alexander
Hallo,
ich habe für mein Anliegen (aufsummieren von Zahlenwerten in jeweils einer Spalte; Zahlen mit dem Format Uhrzeit ([hh]:mm) sollen nicht mitgezählt werden)
diesen Code gefunden:
Function MeineSumme(ByVal vBereich As Range) As Double
Dim lZeilen As Long
Dim lSpalten As Long
Dim lZaehlerZeilen As Long
Dim lZaehlerSpalten As Long
Dim dSumme As Double
lZeilen = vBereich.Rows.Count  ' Die Anzahl Zeilen werden bestimmt
lSpalten = vBereich.Columns.Count  ' Die Anzahl Spalten werden bestimmt
dSumme = 0  ' Wert Initialisieren, ist eigentlich in VBA bei erstmaliger Verwendung nicht  _
notwendig,
' aber eine alte Gewohnheit
For lZaehlerZeilen = 1 To lZeilen  ' Hier werden die Werte in den einzelnen Zellen  _
aufsummiert
For lZaehlerSpalten = 1 To lSpalten
If IsDate("07:00")(vBereich.Cells(lZaehlerZeilen, lZaehlerSpalten).Value) Then '  _
IsNumeric() prüft, ob es sich um eine
' Zahl handelt
dSumme = dSumme + vBereich.Cells(lZaehlerZeilen, lZaehlerSpalten).Value
End If
Next lZaehlerSpalten
Next lZaehlerZeilen
MeineSumme = dSumme ' Übergabe des Summenergebnisses an das Rückgabeergebnis von MeineSumme
End Function

Und hier ist dann mein Versuch die Funktion anzupassen, sodass Zahlen summiert werden und Uhrzeiten (sind ja auch Zahlenwerte) eben nicht.
Function MeineSumme(ByVal vBereich As Range) As Double
Dim lZeilen As Long
Dim lSpalten As Long
Dim lZaehlerZeilen As Long
Dim lZaehlerSpalten As Long
Dim dSumme As Double
lZeilen = vBereich.Rows.Count  ' Die Anzahl Zeilen werden bestimmt
lSpalten = vBereich.Columns.Count  ' Die Anzahl Spalten werden bestimmt
dSumme = 0  ' Wert Initialisieren, ist eigentlich in VBA bei erstmaliger Verwendung nicht  _
notwendig,
' aber eine alte Gewohnheit
For lZaehlerZeilen = 1 To lZeilen  ' Hier werden die Werte in den einzelnen Zellen  _
aufsummiert
For lZaehlerSpalten = 1 To lSpalten
If IsNumeric(vBereich.Cells(lZaehlerZeilen, lZaehlerSpalten).Value) And IsDate(vBereich. _
Cells(lZaehlerZeilen, lZaehlerSpalten).Value) Then ' IsNumeric() prüft, ob es sich um eine
dSumme = dSumme + 0
Else
If Not IsDate(vBereich.Cells(lZaehlerZeilen, lZaehlerSpalten).Value) And IsNumeric( _
vBereich.Cells(lZaehlerZeilen, lZaehlerSpalten).Value) Then                                                 ' Zahl handelt
dSumme = dSumme + vBereich.Cells(lZaehlerZeilen, lZaehlerSpalten).Value
End If
End If
Next lZaehlerSpalten
Next lZaehlerZeilen
MeineSumme = dSumme ' Übergabe des Summenergebnisses an das Rückgabeergebnis von MeineSumme
End Function
Soweit ich weiß, ist es möglich Zahlenformate auszulesen und dann wohl auch damit weiter zu arbeiten (außer Bedingte Formatierung).
Kann mir jemand helfen, die Funktion anzupassen?
Danke im Voraus
Alexander

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: SummenFunktion Uhrzeitformat ausnehmen
26.11.2013 14:08:05
EtoPHG
Hallo Alexander,
Natürlich ist es möglich Zellen aufgrund ihres Formats auszuscheiden. Aber ich halte das für sehr gefährlich. Spalten von Tabellen organisiert man ja mehrheitlich so, dass alle Zellen das gleiche Format erhalten. Die Frage stellt sich somit vielmehr, wie den deine Tabellenstruktur aussieht und warum du die Spalten mit den Uhrzeiten nicht aus dem als Parameter übergebenen Bereich ausschliesst? Kannst du eine Beispielmappe hochladen? Hast du es anstelle von VBA schon mit Standardformeln (z.B. Summenprodukt ) versucht?
Gruess Hansueli

AW: SummenFunktion Uhrzeitformat ausnehmen
26.11.2013 14:41:00
Alexander
Hallo Hansueli,
hier die Beispielmappe.
https://www.herber.de/bbs/user/88267.xlsm
Ich wollte das ursprüngliche Format des Arbeitsblattes eigentlich größtenteils beibehalten, weil ich
die Mappe für die Arbeit meiner Frau nur etwas aufbereite. Natürlich könnte ich auch mit Hilfsspalten arbeiten, was mir aber ganz schön Arbeit machen wird. Wie du in Zeile 5 siehst, sind alle Zellen einzeln
benannt, die summiert werden sollen. Daraus wollte ich aber einen Bereich machen, weil wenn ich unten per Makro schon vorformatierte Blöcke anfüge, reagiert die Summenformel oben entsprechend und erweitert den Bereich. Das war die Grundidee. Ich habe wirklich schon viel recherchiert und ausprobiert, aber per Formel ist das so leider nicht zu lösen (zumindest für mich nicht). Und VBA bin ich noch ohne Hilfe ziemlich aufgeschmissen. Hier habe ich noch einen Versuch mit "NumberFormat "[hh]:mm" unternommen.
Function MeineSumme(ByVal vBereich As Range) As Double
Dim lZeilen As Long
Dim lSpalten As Long
Dim lZaehlerZeilen As Long
Dim lZaehlerSpalten As Long
Dim dSumme As Double
lZeilen = vBereich.Rows.Count
lSpalten = vBereich.Columns.Count
dSumme = 0
For lZaehlerZeilen = 1 To lZeilen
For lZaehlerSpalten = 1 To lSpalten
If NumberFormat  "[hh]:mm" Then
dSumme = dSumme + vBereich.Cells(lZaehlerZeilen, lZaehlerSpalten).Value
End If
Next lZaehlerSpalten
Next lZaehlerZeilen
MeineSumme = dSumme
End Function
aber es klappt einfach nicht. Warum?
Gruss
Alexander

Anzeige
AW: SummenFunktion Uhrzeitformat ausnehmen
26.11.2013 15:00:10
EtoPHG
Hallo Alexander,
Die Formel (z.B. bis Zeile 1000) lautet ganz einfach:
=SUMMENPRODUKT((REST(ZEILE(B23:B1000);7)=2)*B23:B1000)+B16
und nach rechts kopieren!
Gruess Hansueli

Häää?
26.11.2013 15:15:33
Alexander
Hallo Hansueli,
na das kapier ich noch nicht! Selbst die Quersumme "Tot.:" hast du damit von der Summe ausgeschlossen.
Jetzt muss ich deine Formel erstmal in Ruhe zerlegen. Hätt ich nicht gedacht. In vielen Posts, die ich gelesen habe, wurde als einzige Möglichkeit speziell formatierte Zellen von der Berechnung auszunehmen VBA genannt.
Ich danke Dir auf jeden Fall sehr, ich teste noch ein bisschen...
In meinem Beitrag unter Luschi (dessen Code auch funktioniert) habe ich noch die Frage nach den Gefahren gestellt.
Vielleicht kannst du mir das auch näher erläutern?
Danke und Gruss
Alexander

Anzeige
Die Gefahren...und Summenprodukt...
26.11.2013 15:34:39
EtoPHG
Hallo Alexander,
Die Gefahr liegt darin, dass halt schnell mal etwas nicht so formatiert wird, wie es sollte. Da du aber 'kopierst' minimiert sich diese Gefahrenquelle.
Und meine Formel birgt natürlich auch Gefahren, nämlich, wenn plötzlich jemand auf die Idee kommt, diese Kopierten-Bereiche grösser/kleiner in den Anzahl Zeilen zu machen. Die Formel ist ganz einfach:
Sie summiert nur die Zellen, deren Zeilennummer dividiert durch 7 einen Rest von 2 ergibt. Die B16 wurde davon ausgenommen, weil da noch eine Verbundene Zelle mit einem Text (Pausen) in einer B-Zelle die Formel zerschiessen würde. Es ist also wichtig bei einem solchen Blattaufbau dem Benutzer nur in den Zellen Eingaben zu erlauben, die für die Berechnung die Grundlage bilden. Dies kann durch einen simplen Blattschutz ereicht werden.
Gruess Hansueli

Anzeige
Verstanden!
26.11.2013 16:47:42
Alexander
...mein Gott wie kommt man auf so eine Idee?! Ich dachte, ich habe schon kreative Ideen (auch in Excel).
Aber das...
Genial. Und verstanden. Aber ohne deine Erklärung hätte ich noch ein bisschen gebraucht.
Bis denn dann und Gruss
Alexander

AW: SummenFunktion Uhrzeitformat ausnehmen
26.11.2013 14:20:18
Luschi
Hallo Alexaner,
meine Funktion würde so aussehen:

Function MeineSumme(ByVal vBereich As Range) As Double
Application.Volatile
Dim dSumme As Double
Dim rg As Range
dSumme = 0
For Each rg In vBereich
Select Case LCase(rg.NumberFormat)
Case "[hh]:mm", "[h]:mm", "hh:mm", "h:mm"
'nichts tun
Case Else
If IsNumeric(rg.Value) Then
dSumme = dSumme + rg.Value
End If
End Select
Next rg
MeineSumme = dSumme
End Function
Hansueli hat natürlich recht, wenn er auf Gefahr hinweist, welche Fehlerquellen die Funktion birgt.
Gruß von Luschi
aus klein-Paris

Anzeige
Welche Gefahren bestehen?
26.11.2013 14:59:08
Alexander
Hallo,
danke... bei dir funktioniert es natürlich!
Und woran bin ich gescheitert (siehe mein posting nach Hansueli)?
Was sind denn die Gefahren bei der Verwendung einer solchen Funktion eurer Meinung nach?
Gruss
Alexander

AW: Welche Gefahren bestehen?
26.11.2013 15:56:17
Luschi
Hallo Alexaner,
schau Dir doch mal mein Schleifenkonstrukt genauer an. Hiet wird ebenfalls jede Zelle im übergebenen Zellbereich durchlaufen, ohne das man Koordinaten wie Anzahl der Zeilen und Spalten im Bereich wissen muß. Die Gefahr liegt in einer nicht erfaßten Zeitformatierung in dieser Programmzeile:
Case "[hh]:mm", "[h]:mm", "hh:mm", "h:mm"
z.B: "h:m", "TT.MM.JJJJ hh:mm" usw.
Dies kann immer dann auftreten, wenn Zellen aus anderen Tabellen in diesen Bereich kopiert werden und das Zellformat mit übernommen wird.
Oder es sind falsche Formate wie "dd:mm", die sehen aus wie eine reine Uhrzeit, sind aber ein ungültiges Datum: wenn der eigentliche Wert 0,5 ist, steht in der Zelle 00:00 und in der
Bearbeitungsleiste: 00.01.1900 12:00:00
Die Gefahren lauern eben überall!!!
Gruß von Luschi
aus klein-Paris

Anzeige
Gefahren Verstanden!
26.11.2013 17:05:07
Alexander
...
"schau Dir doch mal mein Schleifenkonstrukt genauer an. Hiet wird ebenfalls jede Zelle im übergebenen Zellbereich durchlaufen, ohne das man Koordinaten wie Anzahl der Zeilen und Spalten im Bereich wissen muß."
o.k., das ist geschickt. Aber die Version, die ich gepostet habe hat im Original ja auch funktioniert.
...nur mit diesem Zahlenformat nicht. Komisch. Würdest du sagen, dass eine Anpassung auf meine Erfordernisse ("hh:mm" von der Berechnung ausnehmen) mit dieser Art des Codes nicht möglich wäre?
Warum muss man immer für Range irgendeine Variable (rg) verwenden und kann nicht einfach Range schreiben? Weil in diesem Code zum Beispiel in der 1. Zeile (überschrift) schon vBereich als Range deklariert ist?
Was bewirkt LCase? Müsste ja auch ein feststehender Ausdruck sein (weil du es nicht vorher deklariert hast).
Hätte ich im ersten Code Application.Volatile auch gebraucht?
Danke nochmal und Gruss
Alexander
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige