Danke für den ersten Hinweis. Wie kann man aus der Tabelle1 die Tabelle2 konstruieren, bei Eingabe von B1, C1 usw. undzwar in beliebiger Reihenfolge. Anstatt Werte von Tabelle 1 nur "ja", "nein" oder "1" und "0" ausgeben. In Worten, wenn B1 ist 10, 11 oder 12 dann die restlichen Werte ersetzt durch 1 oder 0 wiedergeben.
Tabelle1-------------------Tabelle2
---A---B--C--D ----------A---B---C----D
1----10-11-12---------1----12---10--11
2-A--2---0---3---------2--A--1----1----0
3-B--0---5---1---------3--B--1----1----1
4-C--3---0---3---------4--C--1----1----0
Hallo!
Ich gehe einmal davon aus, dass Dir bei der Darstellung der Tabelle ein Eintragungsfehler in der Zelle "B10" in der zweiten Tabelle unterlaufen ist, denn ansonsten würde ich das Bildungsgesetz doch nicht verstanden habe, da ich annehme,
dass die zweite Tabelle die Vorzeichen der Elemente der Matrix B2:D4 enthält und zusätzlich eine Rechtsverschiebung der Spalten (einschl. Kopfzeile) erfährt.
Ob es hier eine Zellenformellösung dazu gibt, weiß ich nicht, denn diese müßte einen rechts Shift der Spalten der Matrix und des Spaltenkopfes ermögliche.
Hier also mein Lösungsvorschlag, der aus WorkSheet-Prozeduren aufgebaut ist und folgendes Bild liefert:.
A
B
C
D
E
F
G
H
I
1
10
11
12
8
11
12
10
2
A
2
0
3
A
0
1
1
3
B
0
5
1
B
1
1
0
4
C
3
0
3
C
0
1
1
Diagramm - Grafik - Excel Tabellen einfach im Web darstellen Excel Jeanie HTML 3.0 Download
Links ist die Ursprungsmatrix mit Kopfzeile. Die Zelle E1 dient als Eingabezeile für die Anzahl der Spaltenverschiebungen (Rollen) nach rechts.
Private Sub RightShift(ByRef Target As Range)
Dim Matrix(3, 3) As Integer, Header(3) As Integer
Dim tm(3) As Integer, th As Integer
Dim rShift As Integer
For c = 1 To 3
Header(c) = Cells(1, 1 + c)
Next c
For r = 1 To 3
For c = 1 To 3
Matrix(r, c) = Sgn(Cells(r + 1, c + 1))
Next c
Next r
rShift = Target.Value
If rShift < 0 Then Exit Sub
rShift = rShift - 3 * Int(rShift / 3)
'Verschiebe nach rechts
For s = 1 To rShift
'speiche rechte Spalte in Hilfsvariablen
th = Header(3)
For r = 1 To 3
tm(r) = Matrix(r, 3)
Next r
'Verschiebe Spalte 2 und 1 nach rechts
For c = 3 To 2 Step -1
Header(c) = Header(c - 1)
For r = 1 To 3
Matrix(r, c) = Matrix(r, c - 1)
Next r
Next c
'schreibe erste Spalte aus Hilfsvariablen
Header(1) = th
For r = 1 To 3
Matrix(r, 1) = tm(r)
Next r
Next s
'Scheibe Ergebnis in Tabelle
For c = 1 To 3
Cells(1, 6 + c) = Header(c)
Next c
For r = 1 To 3
For c = 1 To 3
Cells(r + 1, 6 + c) = Matrix(r, c)
Next c
Next r
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$1" Then RightShift Target
End Sub
Gruß,
Uwe