Das Forentreffen 2018 findet am 20./21. April in Dresden statt. Weitere Infos hier
Anmeldungen zum Forentreffen 2018 sind auf der Anmeldeseite möglich
Zur Homepage des Deutschsprachige Xbase-Entwickler e. V.
Xbase++-Wiki des Deutschsprachige Xbase-Entwickler e. V.

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: 1981
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Kontaktdaten:

Excel SUM

Beitrag von Koverhage » Mi, 23. Apr 2014 14:15

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: 1951
Registriert: Fr, 08. Feb 2008 21:29

Re: Excel SUM

Beitrag von georg » Mi, 23. Apr 2014 15:25

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

Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1981
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Kontaktdaten:

Re: Excel SUM

Beitrag von Koverhage » Mi, 23. Apr 2014 16:40

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: 6828
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: Excel SUM

Beitrag von Tom » Mi, 23. Apr 2014 17:04

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: 1981
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Kontaktdaten:

Re: Excel SUM

Beitrag von Koverhage » Mi, 23. Apr 2014 18:34

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: 13749
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Kontaktdaten:

Re: Excel SUM

Beitrag von Martin Altmann » Mi, 23. Apr 2014 18:38

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: http://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: http://meldungen.altem.de/

Mitglied der XUG Osnabrück
stellv. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 10657
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Excel SUM

Beitrag von AUGE_OHR » Mi, 23. Apr 2014 21:51

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: 13811
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Excel SUM

Beitrag von brandelh » Mi, 23. Apr 2014 22:00

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: 6828
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: Excel SUM

Beitrag von Tom » Do, 24. Apr 2014 14:18

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

Antworten