PDA

Vollständige Version anzeigen : Tabelle Zelle LEER und Rechnen


ggm
04.10.2019, 12:45
Ich bräuchte dringend ein Makro was leere Zellen einer Tabelle mit 0 belegt, damit die Rechenfunktion sum(above) funktioniert.

Habe schon was gefunden, was jedoch an der Definition von cell scheitert (win10 wahrscheinlich etwas anders)
-----------------------------------------------ODER
Sub tt()
Dim iZeile As Long

For iZeile = 1 To Range("A65536").End(xlUp).Row
If IsEmpty(Cells(iZeile, 1)) Then
Cells(iZeile, 1) = 0
End If
Next iZeile
End Sub

Sub t()
Dim iZeile As Long

For iZeile = 1 To Range("A65536").End(xlUp).Row
If Cells(Cells(iZeile, 1)) = 0 Then
Cells(iZeile, 1) = 0
End If
Next iZeile
End Sub


JEDES MAL:
Range ==> Sub oder Function NICHT DEFNIERT


Bitte um Hilfe

erpe
04.10.2019, 12:51
Hi,
wie es scheint, hast du ein Excel-Makro gefunden.
Suche mal direkt nach Word-VBA.

Gruß
Rainer

ggm
04.10.2019, 14:17
Ich suche nun schon 2 Tage und finde nichts.
Eigentlich ist das ein Problem was jeder hat, da die Summe einer Spalte doch sicher wichtig ist - und nicht dass wenn eine oder mehrere Zeilen nicht ausgefüllt sind, dass Ergebnis nicht stimmt.


Vielleicht gibt es eine korrigierte Version von sum, bzw mit Parameter dazu?
Aber auch hier habe ich nichts gefunden

erpe
04.10.2019, 14:34
Hallo,
wenn in einer Zelle nichts steht - also leer ist - oder eine Null eingetragen ist, wird auch nichts summiert.
Stimmt denn deine Formel?
Kannst du mal eine Musterdatei hochladen?

Gruß
Rainer

Gerhard H
04.10.2019, 15:09
Hallo zusammen,

das Problem von Sum(above) in einer Word-Tabelle ist, dass die Formel aufhört zu rechnen, sobald sie auf eine leere Zelle trifft (siehe angehängtes Beispiel).

Das Eintragen einer Null löst das Problem. Per VBA ginge das so (behandelt werden die Zeilen 2 bis vorletzte Zeile (da in der ersten die Überschriften und in der letzten die Summe stehen soll)

Das Makro behandelt die Tabelle, in der irgendwo die Schreibmarke steht. Das kann man natürlich noch ändern:
Sub summe()
Dim i As Long, letzteSpalte As Long, vorletzteZeile As Long

If Selection.Information(wdWithInTable) = False Then
MsgBox "Bitte in die gewünschte Tabelle klicken"
Exit Sub
End If

With Selection.Tables(1)
letzteSpalte = .Columns.Count
vorletzteZeile = .Rows.Count - 1

For i = 2 To vorletzteZeile
'eventuele Leerzeichen eliminieren, bei einer leeren Zelle verbleiben zwei Zeichen:
If Len(Trim(.Cell(i, letzteSpalte).Range)) = 2 Then
.Cell(i, letzteSpalte).Range = "0"
End If
Next i

End With

'Fehlerhafte Formel per Aktualisieren korrigieren
ActiveDocument.Fields.Update

End Sub

ggm
04.10.2019, 15:45
Danke, das ist ja schon ein super Anfang.
Das makro sollte jedoch nur die Spalte bearbeiten wo der Cursor steht --- und diese Spalte komplett.
Die Änderung von ".Rows.Count - 1" auf ".Rows.Count" ist klar.

Wie muß ich jedoch die Zeile "letzteSpalte = .Columns.Count" ändern, damit das Makro die Spalte vom Cursor ausliest und verwendet ???

Habe Tabelle gekürzt (tausende Zeilen und zig Spalten) und Teil als Kopie angehängt:
Gelb ist zum Beispiel Position des Cursors und Grün die Formel

erpe
04.10.2019, 22:21
Hallo Gerhard, das Problem von Sum(above) in einer Word-Tabelle ist, dass die Formel aufhört zu rechnenman lernt immer noch dazu! :)

Gruß
Rainer

Gerhard H
04.10.2019, 22:41
Hallo ggm,

vielleicht wäre es angesichts der Größe der Tabelle doch sinnvoller, das Ganze in Excel zu veranstalten und in Word nur eine Verknüpfung davon einzufügen.

In Word würde das Durchackern einer angeklickten Spalte so funktionieren:
Sub summe2()
Dim i As Long, spNr As Long

If Selection.Information(wdWithInTable) = False Then
MsgBox "Bitte in die gewünschte Spalte klicken"
Exit Sub
End If

'Spaltennummer feststellen
spNr = Selection.Information(wdEndOfRangeColumnNumber)

'Leere Zellen in der Spalte mit Nullen füllen
With Selection.Tables(1)
For i = 2 To .Rows.Count - 1
If Len(Trim(.Cell(i, spNr).Range)) = 2 Then
.Cell(i, spNr).Range = "0"
End If
Next i
End With

'Summenformel aktualisieren
ActiveDocument.Fields.Update
End Sub

Getestet an der Tabelle im Musterdokument aus Beitrag 5.Dieses Makro scheitert jedoch, wenn es in deiner Tabelle verbundenen Zellen gibt. Falls die blaue Zeile oben mit zur Tabelle gehört, trenn sie vorher ab.

ggm
05.10.2019, 07:35
Guten Morgen

Herzlichen Dank.
Keine verbundenen Zellen.
blaue Zeile war abgetrennt.
Excel wegen Formatierungsproblemen leider nicht möglich.

Das Makro macht das zwar, ABER zuerst 10 Sekunden weißer Überlastungsbildschirm, dann sagenhafte 2 Minuten Sanduhr, dann in einem Rutsch erledigt.
Die Spaltenermittlung scheint extrem aufwendig das ganze Dokument durchzuarbeiten.
Ist hier eine Änderung möglich???

Hinweis: durchgeführt an Probetabelle mit nur 20 Zeilen, Rest-Dokument jedoch mit vielen großen Tabellen

Weiterer Test: auch erster Makro-Vorschlag braucht so lange bis Makro etwas macht. Scheint also an den sonstigen großen Tabellen im Dokument zu liegen.
Habe daraufhin das Dokument bis auf die Mini-Tabelle gekürzt und das Makro lief auch sofort an. Wie kann man also dem Makro sagen, dass es nur die Tabelle beachten soll wo der Cursor drinsteht ???

Weiterer Test: Deutliche Verbesserung wenn ' ActiveDocument.Fields.Update nicht ausgeführt wird.
Trotzdem: je länger die Tabelle ist um so länger zuerst der weiße Überlastungsbildschirm von Word (am Rechner kann es nicht liegen).
Kann man das Makro etwas umstellen, dass es möglichst wenig um sich herum kontrolliert / einliest usw.

Viele Grüße
Gunar

Gerhard H
05.10.2019, 09:20
Hallo Gunnar,

ich hab in meinem Musterdokument probehalber die Testtabelle auf ca. 650 Zeilen und etwa 10 Spalten erweitert. Ab da erfolgen bei mir schon einfache händische Aktionen wie Wechsel der Registerkarte oder Hinzufügen einer weiteren Spalte mit bemerkbarer Verzögerung.

Das Makro braucht dann bei mir zwischen 10 und 25 Sekunden (je mehr Leerzellen ersetzt werden müssen, desto länger).
Ich fürchte, das liegt einfach an den riesigen Tabellen und weniger daran:
"Die Spaltenermittlung scheint extrem aufwendig das ganze Dokument durchzuarbeiten"
Denn die zuständige Tabelle wird vorab ermittelt, indem die Position der Schreibmarke festgestellt wird. Das dauert keine messbare Zeit.

Das temporäre Ausschalten der Bildschirmaktualisierung brachte nur wenig Verbesserung.
Ich hab weiter keine Idee, wie man das schneller machen könnte.

Meiner Meinung nach sollte man hier ansetzen:
"Excel wegen Formatierungsproblemen leider nicht möglich."
Was denn für Probleme? Ich wundere mich übrigens schon die ganze Zeit, wie du "zig Spalten" in ein Word-Dokument gequetscht hast.

halweg
05.10.2019, 09:20
Ich nutze auch recht oft die {=Sum(ABOVE)} Funktion.
Auch mit leeren Zwischenzellen. Das funktioniert unter bestimmten Bedingungen, s. beiliegende Datei.

Selbst wenn dieser Ansatz für dich nicht gangbar ist, kannst du auf die Nullen verzichten, indem du einfach mit {=SUM(C:C)} die Spalte summierst. Dann sollte die Summe aber in einer anderen Spalte stehen und die Überschrift keine Zahlen enthalten.

Gerhard H
05.10.2019, 09:30
Hallo nochmal,

die Lösung von Halweg mit =Sum(C:C) funktioniert bei mir ohne irgendeine spürbare Zeitverzögerung.

Da nehm ich doch meinen Ansatz zurück.

Luschi
07.10.2019, 12:36
Hallo Word-Fan's,

trotzdem finde ich es merkwürdig, daß in keinen meiner vielen Ebooks zu Word 2000-2019 die Buchautoren über solch merkwürdiges
Verhalten berichten; da bilden auch die Amerikaner keine Ausnahme - ich hoffe doch, daß sie nicht alle voneinander abschreiben.
Selbst in dem von mir geschätzten Buch 'Word 2016 In Depth' von QUE/Pearson Education steht:
SUM(ABOVE) - Sums the contents of all the cells above the current one (same column)
SUM(LEFT) - Sums the contents of all the cells to the left of the current one (same row)

Gruß von Luschi
aus klein-Paris

PS: Der Tipp von

halweg
07.10.2019, 17:17
Ja, ja, ich habe hier im Forum auch schon manche Dinge gelernt, die es in keiner Anleitung gibt.

ggm
07.10.2019, 19:42
HALLO!

Vielen herzlichen Dank.

Das so ein wichtiger Unterschied und so eine einfache Lösung nicht dokumentiert ist kann man nur als sehr enttäuschend testieren.
Ganze 3 Tage an VBA Macos rumgebastelt für nichts.

Gunar

G.O.Tuhls
07.10.2019, 20:37
Zu der merkwürdigen Tabellenrechnerei von Word haben Gerhard und ich doch mal eine Testreihe durchgezogen, die zu diesem Ergebnis (https://oerttel.net/computerthemen/word/word-tipps/eigenartige-rechenregeln-in-tabellen/) führte.
Gruß
G.O.