Es scheint sich also nur um bestimmte Zellen ...
16.02.2017 19:02:45
Luc:-?
…bzw ganze Zeilen zu handeln, Werner,
da wären Daniels Vorschläge wohl am günstigsten (natürlich eingegrenzt auf diese Zellen), wenn die Zahlen nicht nur negativ sein müssen, sondern auch tatsächlich negativ sind bzw so behandelt wdn sollen. Wahrscheinlich willst du eine einfache Summe (über Zeile bzw Spalte) bilden und diese Zellen nicht separat abziehen müssen. Das halte ich aber für bedenklich, denn durch ein derartiges Konzept provoziert man Fehler, da nicht jeder Ausfüllende das Konzept kennt bzw daran denkt, was wohl auch passiert.
Liegen die Daten aber schon in dieser zT irregulären Form vor, nutzen dir Daniels Vorschläge vermutlich wenig. Hier wäre dann entweder eine Nachbearbeitung der entsprd Zeilen per korrigierender VBA-SubProzedur oder die Berücksichtigung dieses Tatbestands in der SummenFml erforderlich. In der 1.Variante können die Daten entweder direkt geändert oder sie in eine ZellFml eingekleidet wdn → zB:
Dim xZ As Range
For Each xZ In ActiveWindow.RangeSelection
xZ = -Abs(xZ) 'oder eben: xZ.Formula = "=-ABS(" & CStr(xZ) & ")"
Next xZ
Die Alternative hat den Vorteil, dass die OriginalDaten erhalten bleiben.
In der 2.Variante wdn die betreffenden Zellen mit dem Format -0;-0 versehen (unbedingt beide -0 verwenden, weil sonst bei negativen Zahlen 2× - gezeigt wird). Die auf die Werte zugreifenden Fmln müssen dann eine UDF wie zB GetText verwenden, um dieses Format beizubehalten. Dabei wdn die Zahlen zu TextZahlen, aber mit vorangestelltem -- ist das korrigierbar, also --GetText(bereichsbezug). Diese UDF liefert aber stets ein Datenfeld, auch, wenn nur 1 Wert zurückgegeben wird (in Analogie zu ZEILE und SPALTE, bei denen das auch so ist)! Warum das so ist, kannst du aus ihrem Pgm ersehen (EinzelWerte wdn nicht separat behandelt!):
Rem Ermittelt Werte eines Bereichs in Darstellungsform --> GetRText
' Vs1.1 -LSr -cd:2014? -1pub:20170216h[20141223h(1.0)] -lupd:20160611n
Function GetText(Bezug As Range)
Dim cct As Long, cix As Long, rct As Long, rix As Long, ber As Range
cct = Bezug.Columns.Count: rct = Bezug.Rows.Count
ReDim erg(rct - 1, cct - 1)
For Each ber In Bezug
erg(rix, cix) = ber.Text
cix = (cix + 1) Mod cct: rix = rix - CInt(cix = 0)
Next ber
GetText = erg
End Function
Gruß, Luc :-?