Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
668to672
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
668to672
668to672
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Hilfe - SUMMIEREN

Hilfe - SUMMIEREN
20.09.2005 14:51:30
Darren
Hi,
dieser Wert steht in der Zeile B1:
car2 2000 to / 20 nmm 60 test 30
Ziel:
Mein Vorhaben ist aus einer Zelle nur die Zahlen 2000, 20, 60 und 30 zu summieren. Aber leider geht mein Code nicht ganz.
Kann mir jemand HELFEN?
Das steht im VBA als code:
Sub summieren() Dim Sp$, TMP$, wort$, zahlen%(), zelle$, buf%, wert% Dim i%, c%, a%, anz% zelle = Range("B1") Sp = Chr$(32) i = 1: c = 2 TMP = zelle Range("B1").Select Do While i <> 0 i = InStr(TMP, Sp) If i = 0 Then If IsNumeric(TMP) Then ReDim Preserve zahlen(a) zahlen(a) = Val(TMP) End If For anz = 0 To a wert = buf + zahlen(anz) Next anz End If wort = Left(TMP, i - 1) If IsNumeric(wort) Then ReDim Preserve zahlen(a) zahlen(a) = Val(wort) a = a + 1 End If TMP = Right(TMP, Len(TMP) - i) c = c + 1 Loop Range("B2").Value = wert End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Hilfe - SUMMIEREN
20.09.2005 15:28:02
Galenzo
unkonventionell:
Application.DisplayAlerts = False
Range("B1").TextToColumns Destination:=Range("A65536"), DataType:=xlDelimited, Space:=True
Range("A1") = WorksheetFunction.Sum(Rows(65536))
Rows(65536).ClearContents
Application.DisplayAlerts = True
Viel Erfolg!
AW: Hilfe - SUMMIEREN
20.09.2005 15:36:24
Darren
Hi,
was genau muss ich mit diesen Code machen? Und ggef. wo muss ich es einsetzen?
Wenn ich mein Beispiel durchlaufen lasse, dann hält er bei dieser Funktion an:
wort = Left(TMP, i - 1)
Aber warum?
Grüße
AW: Hilfe - SUMMIEREN
20.09.2005 16:21:29
EtoPHG
Hallo Darren,
Ob Du's glaubst oder nicht:
Ersetze Deinen COde mit dem Galenzzo.
Er macht etwas, was Du auch in Excel händisch machen kannst:
B1 selektieren
Menu - Daten - Text in Spalten - Trennzeichen Leerschlag
Anschlieesen Summe über die neu gebildeten Spalten und Du hast was Du wolltest.
Gruss Hansueli
Anzeige
AW: Hilfe - SUMMIEREN
20.09.2005 16:33:21
Darren
Hi,
d.h., ich soll mein gesamter Code löschen und mit dem con Galenzzo ersetzen?!
GRüße und schon mal vielen Danke!
Du siehst das richtig (o.T.)
EtoPHG
AW: Du siehst das richtig (o.T.)
20.09.2005 17:11:58
Galenzo
ja, das war ein Vorschlag, wie man's lösen kann. Es gibt sicherlich noch andere/bessere Wege. Du kannst z.B. mit einer Schleife den Text durchlaufen und nach Leerzeichen trennen und das ganze dann aufaddieren. Ist aber aufwendiger.
Vielleicht macht ja noch jemand einen Vorschlag in diese Richtung ?
(daher laß ich den Beitrag mal offen)
und nun VBA
20.09.2005 19:11:14
MichaV
Hallo,
hier eine mögliche VBA- Variante
Option Explicit Function Addieren(Was) Dim i%, Summe%, s$ For i = 1 To Len(Was) If IsNumeric(Mid(Was, i, 1)) Then s = s & Mid(Was, i, 1) Else If Len(s) > 0 Then Summe = Summe + CInt(s) s = "" End If End If Next If Len(s) > 0 Then Summe = Summe + CInt(s) Addieren = Summe End Function
Tabelle1
 AB
1car2 2000 to / 20 nmm 60 test 302112
Formeln der Tabelle
B1 : =addieren(A1)
 
Diagramm - Grafik - Excel Tabellen einfach im Web darstellen    Excel Jeanie HTML  3.0    Download  
Funzt nur, wenn nur eine Zelle übergeben wird und nur bei ganzen Zahlen.
Gruß- Micha
Anzeige
stop
20.09.2005 19:13:11
MichaV
habe die Aufgabenstellung nicht richtig gelesen :o(
AW: und nun VBA
20.09.2005 19:27:13
MichaV
Hallo,
also hier nun die Variante "Du kannst z.B. mit einer Schleife den Text durchlaufen und nach Leerzeichen trennen und das ganze dann aufaddieren. Ist aber aufwendiger."
...naja, Galenzo- Profi ;o) . Mit dem Split- Befehl sparst Du Dir die Schleife, dann ist es nicht mehr aufwendig.
Option Explicit Function Addieren(Was) Dim s, t%, i% s = Split(Was, " ") For i = 0 To UBound(s) If IsNumeric(s(i)) Then t = t + s(i) Next i Addieren = t End Function
Tabelle1
 AB
1car2 2000 to / 20 nmm 60 test 302110
Formeln der Tabelle
B1 : =addieren(A1)
 
Diagramm - Grafik - Excel Tabellen einfach im Web darstellen    Excel Jeanie HTML  3.0    Download  
Anzeige
AW: und nun VBA
21.09.2005 08:33:50
Darren
Moin,
so jetzt bin ich wieder auf der Arbeit und schaue ich mir sofort Eure Hilfe mal an!
Schon mal vielen DAnk fpr die zahlreichen Antworten!
DArren
AW: und nun VBA
21.09.2005 09:07:45
Galenzo
Hi MichaV-Kaum Excel/VBA-Kenntnisse
tolle Sache - bei deinem Kenntnisstand ;-)
AW: und nun VBA
21.09.2005 09:16:28
MichaV
Hallo Galenzo- Profi,
jaaa, lasst uns unsere Level tauschen ;o)
Gruss- Micha
AW: und nun VBA
21.09.2005 09:51:40
Darren
Die codes sind super!
Jetzt eine kleine Erweiterung:
Wie muss ich den Code ausbauen, wenn ich jetzt diesen Code benutzen möchte, aber jetzt soll er die Inhalte der Zellen A1 (summieren, wie im code bis jetzt) + A2 + A3 summieren?
Grüße
Darren
P.S.: Hatte diesen Code im Forum falsch postiert, so nun ist er hier richtig!
Anzeige
AW: und nun VBA
21.09.2005 09:54:52
MichaV
Hallo,
=addieren(A1)+Addieren(A2)+Addieren(A3)
...oder suchst Du eine =Addieren(A1:A4)- Lösung? Dann müsste man das Makro ein wenig umbauen.
Gruss- Micha
..und welches Makro meinst du überhaupt?
AW: und nun VBA
21.09.2005 10:10:42
Darren
Hallo MichaV,
genau Dein Code/Makro meine ich!
Mein Ziel ist z.B.:
Hier ein Beispiel meiner Tabelle in Excel Quelle.xls:
1. Summe von (S3) Inhalt-Zelle = (car2 2000 to / 20 nmm 60 test 30)
2. Summe von (T3) Inhalt-Zelle = (car3 5000 to / 56 nmm 67 test 40)
3. Summe von (U3) Inhalt-Zelle = (car4 1000 to / 40 nmm 22 test 80)
So und nun sollen die Zellen S3 + T3 + U3 summiert werden.
Das beste wäre, wenn ich diesen Code, den wir bis jetzt hatten und jetzt erweitern, aus der DAtei Ziel.xls ausgeführt wird.
Das Ergebnis soll in der Datei Ziel.xls importiert werden aus Quelle.xls.
GRüße
Anzeige
mein letztes Gebot incl. Frage an die Profis
21.09.2005 10:29:54
MichaV
Hallo Darren,
mit

Option Explicit
Function Addieren(Was)
Dim s, t%, i%
Dim Zelle As Range
For Each Zelle In Was.Cells
s = Split(Zelle, " ")
For i = 0 To UBound(s)
If IsNumeric(s(i)) Then t = t + s(i)
Next i
Next
Addieren = t
End Function

kannst Du Zellbereiche berechnen. Also z.B. alle Zellen in S3 bis U3, indem Du =Addieren(S3:U3) schreibst.
Du kannst diese Formel auch in einer anderen Datei einbauen, beide Dateien müssen dazu allerdings geöffnet sein.
@Alle: Warum eigentlich? Gibts da einen Ausweg? (hier bitte ich die mitlesenden Profis um Hilfe ;o) )
Gruss- Micha
PS: Rückmeldung wäre nett.
Anzeige
Warum eigentlich...
21.09.2005 11:22:32
EtoPHG
Hallo Micha,
Solange sich der Code Deiner Funktion nur in einer Mappe befindet hast Du ein Problem.
Mache aus Deinem Code eine Public Function in einem Modul
Speichere die Mappe als XLA (Exel-Add-In).
Lade das Add-In und Dein Code steht Dir für alle Zeiten (?) in allen Mappen zur Verfügung
Gruss Hansueli
AW: Warum eigentlich...
21.09.2005 11:27:06
MichaV
Hallo Hansueli,
nein, was ich meine ist:
Ich habe eine "normale" benutzderdefinierte Funktion. Diese kann man ja aus Excel über eine Zelle aufrufen.
=addieren($A$1)
Ich kann die zu übergebenden Argumente auch aus einer anderen Mappe ziehen.
=addieren([bla.xls]Tabelle1!$A$1)
Warum funzt die UDF nicht mehr (#Wert) , wenn ich die zweite Datei schließe?
=addieren('E:\privat\[Bla.xls]Tabelle1'!$A$1)
...und wie kann ich das abstellen?
Die Standart- Formeln funzen doch auch weiter, wenn die Datei geschlossen wurde?!
...inzwischen gibts aber schon einen Lösungsansatz.
Crossposting: http://www.online-excel.de/fom/fo_read.php?f=1&bzh=0&h=4421&ao=1#a123x
Gruss- Micha
PS: Rückmeldung wäre nett.
Anzeige
Frage geklärt
21.09.2005 11:46:44
MichaV
Hallo,
so würde es auch mit geschlossenen Mappen gehen:

Option Explicit
Function Addieren(Was)
Dim s, t%, i%
Dim Zelle As Range
Dim k%
If VarType(Was) = 8 Then  'einzelne Zelle=String
t = Berechne(Split(Was, " "))
Else
On Error Resume Next
k = LBound(Was)
If Err.Number <> 0 Then 'Zellbereich aus offener Mappe (Range- Feld)
On Error GoTo 0
For Each Zelle In Was.Cells
t = t + Berechne(Split(Zelle, " "))
Next
Else 'Zellbereich aus geschlossener Mappe (String- Feld)
On Error GoTo 0
For k = LBound(Was) To UBound(Was)
t = t + Berechne(Split(Was(k, 1), " "))
Next
End If
End If
Addieren = t
End Function
Function Berechne(Feld)
Dim t As Double
Dim i%
For i = 0 To UBound(Feld)
If IsNumeric(Feld(i)) Then t = t + Feld(i)
Next i
Berechne = t
End Function

Gruss- Micha
Anzeige
AW: Frage geklärt
21.09.2005 11:55:30
Darren
Super, dann werde ich mal versuchen diese einzubauen.
DAnke!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige