Seite 1 von 1

Excel SUM

Verfasst: Mi, 23. Apr 2014 14:15
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 ?

Re: Excel SUM

Verfasst: Mi, 23. Apr 2014 15:25
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?

Re: Excel SUM

Verfasst: Mi, 23. Apr 2014 16:40
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.

Re: Excel SUM

Verfasst: Mi, 23. Apr 2014 17:04
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.

Re: Excel SUM

Verfasst: Mi, 23. Apr 2014 18:34
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 ?

Re: Excel SUM

Verfasst: Mi, 23. Apr 2014 18:38
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

Re: Excel SUM

Verfasst: Mi, 23. Apr 2014 21:51
von AUGE_OHR
du kannst die Spalte sortieren und dann das erste / letzte Element prüfen ob es 0 ist.

Re: Excel SUM

Verfasst: Mi, 23. Apr 2014 22:00
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 ;-)

Re: Excel SUM

Verfasst: Do, 24. Apr 2014 14:18
von Tom
Ich würde nicht die Spalte aus dem Array löschen, sondern einfach bei der Übergabe überspringen, feddisch. :wink: