Excel SUM

Einbindung von Office-Komponenten wie Word, Excel usw.

Moderator: Moderatoren

Antworten
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Excel SUM

Beitrag von Koverhage »

Habe folgendes aufgezeichnet.
Sub Makro1()
'
' Makro1 Makro
' Makro am 23.04.2014 von OK aufgezeichnet
'

'
Range("B26").Select
ActiveCell.FormulaR1C1 = "=SUM(R[-24]C:R[-1]C)"
End Sub

Auch die Ausführungen zu SUM in der Wissensbasis gelesen, stehe aber irgendwie auf dem Schlauch.

Ich habe eine Tabelle mit 5 Spalten (A-E) in der ersten Zeile die Überschrift in den Zeilen 2-x die Daten (numerisch).
Ich möchte feststellen, ob eine Spalte nur 0 Werte enthält und diese dann löschen.
Wie kann ich die eine Summe der Spalten erzeugen, ohne diese in einer zelle zu speichern, sondern ganz normal in eine Variable ?
Gruß
Klaus
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2821
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 94 Mal
Danksagung erhalten: 13 Mal

Re: Excel SUM

Beitrag von georg »

Hallo, Klaus -


lange vergessen, immer noch wahr: Excel ist ein 1-2-3 Klon und musste daher die 1-2-3 Notation beherrschen. Daher auch die kryptischen (internen) Formeln.

Wenn man Dein Beispiel ausführt, steht in der Zelle B26 diese Formel:

=Summe(B2:B25)

das entspricht diesem Ausdruck im Makro:

=SUM(R[-24]C:R[-1]C)

Wir befinden uns in Zelle B26. Dann ist R[-24] ein "Zurückgehen" von B26 um 24 Zeilen => aus B26 wird B2. R[-1] entspricht einem "Zurückgehen" von B26 um 1 Zeile => B25. Und das entspricht dann der Adressierung von =Summe(B2:B25).

Um an die Summe der Felder einer Spalte zu kommen, könntest Du eine beliebige, in einer anderen Spalte liegende Zelle mit dieser Formel beschicken:

Range("B1").Select
ActiveCell.FormulaR1C1 = "=SUM(C[1])"
Range("C1").Select

In diesem Fall habe ich in B1 die Summe der Spalte C gespeichert. Wenn der Wert von B1 = 0 ist, enthält die Spalte C keinen Wert.

Oder: Du ermittelst die Grösse der Daten (siehe den Artikel in der Wissensbasis) und liest dann über eine Range die Werte der Spalte ein und erhältst ein Array in dieser Form:

{{0}, {17}, NIL}

Das arbeitest Du in einem Loop ab, prüfst auf NIL, und wenn der erste Wert ungleich 0 gefunden wirst, brichst Du ab.

Hinweis: wenn A2 = 2 und A3 = -2 sind, dann ist die Summe der beiden Zeilen 0, obwohl Daten vorhanden sind.

Deine Definiton "0 Werte" ist leider nicht eindeutig: meinst Du, dass alle Zellen nur 0 enthalten, oder die Summe der Zellen 0 ist? Wenn es darum geht, dass eine Spalte nur dann gelöscht wird, wenn alle Zellen leer (= NIL) sind oder 0 enthalten, dann solltest Du eher über den Loop als über =summe() nachdenken.

Hilft Dir das?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Excel SUM

Beitrag von Koverhage »

Hallo Georg,

Hilft Dir das?
Zum Teil ja. Es ist wie folgt: Ich übergebe ein Array in der Form von
{
{001, 80.00, 123.456, 789.012, 0}, {002, 96.00, 345.678, 901.234, 0}
}
In diesem Fall enthalten die Zellen in Spalte 5 (E) 0, d.h. die Spalte soll komplett entfernt werden.
Excel erschien mir das als einfachster Weg. Da ich das Array in Xbase generiere, könnte ich das ja
auch in Xbase erledigen, erscheint mir aber momentan aufwendiger.
Gruß
Klaus
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9343
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 358 Mal
Kontaktdaten:

Re: Excel SUM

Beitrag von Tom »

Mmh. Ich halte das tatsächlich für deutlich weniger aufwendig, wenn man es in Xbase++ macht, entweder bei der Übergabe (eine Funktion zur Ermittlung von Spaltensummen auf einem zweidimensionalen Array ist mit aEval() ein Dreizeiler) oder vorher.
Herzlich,
Tom
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Excel SUM

Beitrag von Koverhage »

Hallo Tom,

ich habe mir gedacht, ich mache das so:

Code: Alles auswählen

  for i:= 1 to nMaxLength  // Länge des Aarays
     IF aArray[i,5] # 0
        lhatWert := .t.
        exit
     ENDIF
  next
  IF !lhatWert
     for i:= 1 to nMaxLength
        aRemove(aArray[i],5)
     next
  ENDIF
Wie kann ich das mit aEval machen ?
Gruß
Klaus
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16488
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Excel SUM

Beitrag von Martin Altmann »

Du könntest mit aEval die Anzahl der Zellen zählen, die in einer Spalte einen Wert ungleich 0 enthalten. Ist die Anzahl gleich 0, kannst Du die Spalte löschen.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Excel SUM

Beitrag von AUGE_OHR »

du kannst die Spalte sortieren und dann das erste / letzte Element prüfen ob es 0 ist.
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Excel SUM

Beitrag von brandelh »

Alles was man an Formeln und Zwischenwerten NICHT IM XLS braucht, soll man vorher im Programm berechnen.
Das ist viel einfacher !
Ansonsten kannst du natürlich auch in einer Schleife durch die Zellen gehen und die Ergebnisse auswerten.
Wenn es zu langsam ist, sieh dir mal meine Klasse zur XLS DLL an ;-)
Gruß
Hubert
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9343
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 358 Mal
Kontaktdaten:

Re: Excel SUM

Beitrag von Tom »

Ich würde nicht die Spalte aus dem Array löschen, sondern einfach bei der Übergabe überspringen, feddisch. :wink:
Herzlich,
Tom
Antworten