XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 21.01 einschl. 64 Bit
Bei einem Doppelklick in eine der Spalten, in Zeile 7, sollen automatisch alle Zellinhalte der Spalte aufaddiert werden. Als zweite und bevorzugte Variante sollte bei einem Doppelklick in die verbundene Zelle A8:C8 in der jeweiligen darüberliegenden Zelle wiederum die Spaltensumme eingetragen werden und anschließend die Gesamtsumme aller Spalten in der verbundenen Zelle A8:C8 eingetragen werden.
Die Anzahl der Spalten kann aber variieren und somit auch die Länge der verbundenen Zelle z.B A8:J8
Vielleicht habt Ihr eine Idee wie man das mittels VBA umsetzen kann?
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True If Not Intersect(Rows(7), Target) Is Nothing Then Target = Application.WorksheetFunction.Sum(Target.Offset(-6).Resize(6)) End If If Target.Address(0, 0) = "A8" Then Target = Application.WorksheetFunction.Sum(Cells(7, 1).Resize(, Cells(7, 1).End(xlToRight))) End If End Sub
Gruß Stefan Win 10 / Office 2016
Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:1 Nutzer sagt Danke an Steffl für diesen Beitrag 28 • sharky51
ich habe das etwas anders verstanden. Darum meine Version, die automatisch die belegten Spalten berechnet:
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim lCol As Integer Dim rngZe7 As Range, rngZe8 As Range, c As Range
lCol = Cells(1, Columns.Count).End(xlToLeft).Column 'Alternative, falls Zeile 1 nicht immer die längste ist ' lCol = Cells.Find(What:="*", SearchOrder:=xlByColumns, _ SearchDirection:=xlPrevious).Column Set rngZe7 = Range(Cells(7, 1), Cells(7, lCol)) Set rngZe8 = Range(Cells(8, 1), Cells(8, lCol))
If Not Intersect(rngZe8, Target) Is Nothing Then For Each c In rngZe7 c = WorksheetFunction.Sum(Range(Cells(1, c.Column), Cells(6, c.Column))) Next c Cells(8, 1) = WorksheetFunction.Sum(Range(Cells(7, 1), Cells(7, lCol))) End If Cancel = True End Sub
Beste Grüße Günther
Excel-ist-sexy.de …schau doch mal rein! Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
eine Frage noch: Warum das "Cancel = True" am Ende der Routine? Ist das notwendig? Nach einem Doppelklick ist keine weitere Aktion möglich, d.h. es ist irgendwie blockiert.
Kommentiere ich die Zeile aus erfolgt wie gewünscht die Berechnung.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
es wird also Cancel als Bool'scher Wert automatisch übergeben. Und ich habe das aus Gewohnheit wieder auf True gesetzt, aber es muss bzw. sollte hier nicht nicht sein. Also: Raus damit ...
Beste Grüße Günther
Excel-ist-sexy.de …schau doch mal rein! Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Nochmals sorry, solch ein Lapsus (mit dem Cancel) sollte mir nicht passieren. Ich war leider ziemlich abgelenkt durch die sich immer wieder aktualisierenden schrecklichen Nachrichten aus Paris ...
Beste Grüße Günther
Excel-ist-sexy.de …schau doch mal rein! Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
(14.11.2015, 13:22)GMG-CC schrieb: Nochmals sorry, solch ein Lapsus (mit dem Cancel) sollte mir nicht passieren. Ich war leider ziemlich abgelenkt durch die sich immer wieder aktualisierenden schrecklichen Nachrichten aus Paris ...
Hi Günther,
einen "Lapsus" würde ich höchstens darin sehen, das Cancel = True unabhängig von der Bedingung generell gesetzt wird.
Wenn ich jetzt mehrere Bereiche habe die ich auf die gleiche Weise (Addition per Doppelklick) bearbeiten will, wie müsste das Makro abgeändert werden. Die Bereiche habe ich mit Namen benannt. Siehe dazu die angehängte Datei.
'Const anzSumBereich = 3 'Anzahl der benannten Summenbereiche
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim lCol As Integer Dim rngUnion As Range
lCol = Cells(1, Columns.Count).End(xlToLeft).Column Set rngUnion = Application.Union(Range("SumErgebnis1"), Range("SumErgebnis2"), Range("SumErgebnis3")) If Not Intersect(rngUnion, Target) Is Nothing Then Call SpaltenSumme(Target.Row - 1, lCol) End Sub
Sub SpaltenSumme(Zeile, lCol) Dim rngSubSum As Range, c As Range, rngData As Range
Select Case Zeile Case 7 Set rngData = Range("Bereich1") Case 20 Set rngData = Range("Bereich2") Case Else Set rngData = Range("Bereich3") End Select
Set rngSubSum = Range(Cells(Zeile, 1), Cells(Zeile, lCol)) For Each c In rngSubSum Cells(Zeile, c.Column) = WorksheetFunction.Sum(rngData.Columns(c.Column)) Next c Cells(Zeile + 1, 1) = WorksheetFunction.Sum(rngSubSum) End Sub
Beste Grüße Günther
Excel-ist-sexy.de …schau doch mal rein! Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Folgende(r) 1 Nutzer sagt Danke an GMG-CC für diesen Beitrag:1 Nutzer sagt Danke an GMG-CC für diesen Beitrag 28 • sharky51