Tipp: Summenprodukt Vorgänger Zellen färben
Ich habe aus einer Liste mittels Summenprodukt aus aus einer
anderen Liste mit einigen dieser Wert Summen gebildet. Gibt es
eine Möglichkeit, herauszufinden, welche Werte NICHT durch die
Summenprodukt-Berechnung ausgewählt wurden. Also praktisch wie
eine Vorgänger-Suche, die aber die Vorgänger von 50
Summenprodukt-Berechnungen ausgeben soll.
Hallo Karin,
nachstehender Code ist in dieser Datei eingebaut.
http://www.hostarea.de/server-01/Januar-4e8c125ad1.xls
Der Code überprüft automatisch ob die Zelle die du gerade mit der Maus oder Tastatur markiert hast, eine Summenprodukt-Formel hat.
Ist dies der Fall werden alle Zellen die in die Summenprodukt verwurstet worden farblich markiert.
Diejenigen Zellen, die nicht mit in die Wurst kamen, werden andersfarbig markiert.
Genau wie bei Detektiv—Vorgänger werden auch Linien gezogen.
Wenn die Zellen auf anderen Blättern sind, wird nur die Zellfarbe geändert, keine Linien gezogen.
Gruß
Reinhard
In ein normales Modul:
Option Explicit
'
Sub SP()
Dim F, N, Anz, Pos, Term(), NN, Zelle, Richtig, A, B, Farbe
F = ActiveCell.FormulaLocal
ActiveCell.Interior.ColorIndex = 35
Pos = InStr(F, "(")
While InStr(Pos + 1, F, "(")
Pos = InStr(Pos + 1, F, "(")
ReDim Preserve Term(2, Anz)
Term(0, Anz) = VBA.Mid(F, Pos + 1, InStr(Pos, F, ")") - Pos - 1)
Anz = Anz + 1
Wend
For N = 0 To UBound(Term)
Pos = InStr(Term(0, N), "=")
If Pos \> 0 Then
Term(2, N) = VBA.Mid(Term(0, N), Pos + 1)
Term(0, N) = VBA.Left(Term(0, N), Pos)
For NN = Pos To 1 Step -1
If InStr("0123456789", VBA.Right(Term(0, N), 1)) \> 0 Then Exit For
Term(1, N) = VBA.Right(Term(0, N), 1) & Term(1, N)
Term(0, N) = VBA.Left(Term(0, N), NN - 1)
Next NN
End If
Next N
For N = 1 To Range(Term(0, 0)).Cells.Count
Richtig = True
For NN = 0 To UBound(Term, 2)
If Term(1, NN) "" Then
A = Range(Term(0, NN)).Cells(N, 1)
B = Range(Term(2, NN))
If A = "" Then A = "0"
If B = "" Then B = "0"
Richtig = Evaluate(A & Term(1, NN) & B)
If Richtig = False Then Exit For
End If
Next NN
For NN = 0 To UBound(Term, 2)
Farbe = 35
If Richtig = False Then
Farbe = 34
Else
If Range(Term(0, NN)).Parent.Name = ActiveSheet.Name Then
ActiveSheet.Shapes.AddLine(ActiveCell.Left + ActiveCell.Width / 2, ActiveCell.Top + ActiveCell.Height / 2, Range(Term(0, NN)).Cells(N, 1).Left + Range(Term(0, NN)).Cells(N, 1).Width / 2, Range(Term(0, NN)).Cells(N, 1).Top + Range(Term(0, NN)).Cells(N, 1).Height / 2).Select
Application.EnableEvents = False
ActiveCell.Select
Application.EnableEvents = True
End If
End If
Range(Term(0, NN)).Cells(N, 1).Interior.ColorIndex = Farbe
If Term(1, NN) "" Then Range(Term(2, NN)).Interior.ColorIndex = 36
Next NN
Next N
End Sub
'
Sub tt()
Application.EnableEvents = True
End Sub
In das Dokumentmodul des betreffenden Arbeitsblattes:
Option Explicit
'
Private Sub Worksheet\_SelectionChange(ByVal Target As Excel.Range)
Dim N
ActiveSheet.UsedRange.Interior.ColorIndex = xlNone
For Each N In ActiveSheet.Shapes
If N.Name Like "Line\*" Then N.Delete
Next N
If Target.Cells.Count 1 Then Exit Sub
If Target.HasFormula Then
If InStr(VBA.UCase(Target.FormulaLocal), VBA.UCase("Summenprodukt")) \> 0 Then Call SP
End If
End Sub