20.09.2020, 21:08 (Dieser Beitrag wurde zuletzt bearbeitet: 20.09.2020, 21:09 von Cantello.)
Moin zusammen!
Ich würde gerne (für eine Schüler:innenübersicht mit Noten) eine Tabelle erstellen, in der ich aus einer Haupttabelle (Namen, Fächer, Klassen) basierend auf dem Wert einer Zelle (definiert durch ein Drop-Down-Menü aus einer Liste) einen Teil der Tabelle anzeigen lassen kann (Name nach Klasse & Fach), Daten (Noten) zu den jeweiligen Namen hinzufügen kann und diese Daten dann auch an die Haupttabelle zurückgeben kann.
Die jeweiligen Teil-Tabellen könnte ich vermutlich mit SVERWEIS und mehreren Kriterien anzeigen lassen - jedoch fällt mir nichts ein, wie ich diese Daten ändern und/oder wieder an die Haupttabelle zurückgeben könnte.
(20.09.2020, 21:46)Cadmus schrieb: mach die Änderungen in der Haupttabelle. Zum schnelleren Auffinden kannst du den Schnellfilter benutzen.
Wenn's nur für mich wäre, würde ich das vermutlich auch genau so machen - leider sollen das auch eher wenig technik-affine Kolleg:innen benutzen, daher die Frage, es so einfach und verwechslungssicher wie möglich zu machen...
(21.09.2020, 20:33)Cantello schrieb: leider sollen das auch eher wenig technik-affine Kolleg:innen benutzen, daher die Frage, es so einfach und verwechslungssicher wie möglich zu machen...
Wenn Excel zu technisch für die Kollegen ist dann würde ich vorschlagen dass ihr zurück zu Papier, Bleistift und Radiergummi geht. Damit sollten alle zurechtkommen. Und ihr spart euch Lizenzkosten.
Wir sehen uns! ... Detlef
Meine Beiträge können Ironie oder Sarkasmus enthalten.
Über mehrere Tabellenblätter verteilt wird das nichts. Dann wäre eher eine VBA Lösung anzustreben mit entsprechenden Userforms/Masken und Buttons zum Suchen, Löschen, Speichern, etc..
Evtl. ist Excel auch nicht die richtige Anwendung, sondern eher eine Access-Datenbank mit Abfragen und Berichten.
der Punkt ist, dass Du erst mal eine Formellösung hast, wo Du ggf. die Formeln wegen der Änderung durch Eingabewerte ersetzt, bei SVERWEIS z.B. nicht mehr genau weist, wo der Wert her kommt und den dann zurück schreiben willst. Man könnte mit einem Mix aus Formeln und minimal VBA schon was erreichen, z.B. siehe Anhang. Im Beispiel werden leere Änderungszellen nicht berücksichtigt, die Auswahl in B1 erweitert sich noch nicht automatisch usw.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Danke erst einmal für all die Antworten, ich habe mich von 'normalen' Excel-Funktionen verabschiedet und probiere gerade VBA aus, inspiriert vom Beispiel von schauan.
Es sieht schon eher komplex aus, vermutlich ist es auch super-ineffizient, aber zumindest das Laden der Daten auf die Übersichtsseite klappt gut. Jetzt muss ich das Zurückschreiben angehen - da dachte ich, dass ich die Variablen der ersten gefundenen Zeile und der letzten irgendwo zwischenspeichere und dann basierend darauf die Daten von der Auswahlseite wieder zurückschreibe. Geht vermutlich eleganter, aber mit meinen beschränkten Mitteln () wäre das die Methode der Wahl.
Code:
Public Sub Laden()
Dim rFirst As Range Dim rFound As Range Dim Zeile As Integer Dim Spalte As Integer Dim Anzeige As Range Dim Offset As Integer Dim i As Integer Dim j As Integer Dim Fach As Integer
Set Anzeige = Worksheets("Auswahl").Range("A10:J100")
' Anzeigebereich löschen Anzeige.Clear
' Erstes Vorkommen der gersuchten Klasse (laut Zelle C2) suchen Set rFirst = ActiveWorkbook.Sheets("Haupttabelle").Range("A2:A900").Find(What:=Worksheets("Auswahl").Range("C2").Value, _ SearchOrder:=xlByColumns, SearchDirection:=xlNext, LookIn:=xlValues, Lookat:=xlWhole)
Set rFound = rFirst Offset = 0 Fach = Worksheets("Hilfstabelle").Cells(3, 6).Value Worksheets("Hilfstabelle").Cells(3, 8).Value = Fach
Do While Not rFound Is Nothing 'weitermachen, so lange etwas gefunden wurde ' Genauen Fundort und Zielort definieren ZellAdresse = Split(rFound.Address, "$") Zeile = rFound.Row Spalte = rFound.Column ' Klasse und Namen in die ersten beiden Spalten schreiben Worksheets("Auswahl").Cells(10 + Offset, 2).Value = Worksheets("Haupttabelle").Cells(Zeile, Spalte).Value Worksheets("Auswahl").Cells(10 + Offset, 3).Value = Worksheets("Haupttabelle").Cells(Zeile, Spalte + 1).Value ' Ergebnisse in die folgenden acht Spalten schreiben For i = 2 To 9 Worksheets("Auswahl").Cells(10 + Offset, i + 2).Value = Worksheets("Haupttabelle").Cells(Zeile, Spalte + i + (Fach - 1) * 8) Next i ' nächster Fundort Set rFound = ActiveWorkbook.Sheets("Haupttabelle").Range("A3:A900").FindNext(After:=rFound) ' Zähler hochsetzen Offset = Offset + 1 ' Wenn keine weiteren gefunden werden, abbrechen If rFirst.Address = rFound.Address Then Exit Do Loop
für das Zwischenspeichern gibt es einige Möglichkeiten. Eine wäre eine Public-Variable. Du deklarierst die dann nicht mehr im Makro, sondern am Anfang von einem Modul, z.B.
Public Zeile As Integer Public Spalte As Integer
Public Sub Laden()
Dim rFirst As Range Dim rFound As Range
Dim Anzeige As Range Dim Offset As Integer
...
Wenn die Makroausführung aus irgend einem Grund mal zurückgesetzt wird, sind aber auch die Variableninhalte weg. Dagegen würde ein anderer Speicherort helfen, z.B. zwei Zellen. In dem Fall kannst Du die Deklaration im Makro lassen und holst die Zahlen aus den Zellen
je nachdem, wie das bei Dir dann abläuft, müsstest Du eventuell eine Fallunterscheidung machen, falls noch keine Zeile oder Spalte in den Variablen steht. Das geht im Prinzip so: If IsEmpty(aaa) Then MsgBox "Nix da" und bei Zellen wäre ja klar, if ...Value = "" Then ...
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:1 Nutzer sagt Danke an schauan für diesen Beitrag 28 • Cantello
So, klappt als erster Prototyp. Habe es einfach gehalten, Sicherheitsabfragen versuche ich, im nächsten Schritt dazuzubasteln.
Code:
Public Sub Speichern()
Dim i As Integer Dim j As Integer
' Start und Ende des zu kopierenden Bereichs setzen Start = Worksheets("Hilfstabelle").Cells(9, 9).Value Ende = Worksheets("Hilfstabelle").Cells(12, 9).Value Fach = Worksheets("Hilfstabelle").Cells(3, 6).Value
' zeilenweise durchgehen For i = 0 To (Ende - Start) ' Spalten KA1-Apr kopieren For j = 0 To 7 Worksheets("Haupttabelle").Cells(Start + i, 3 + (Fach - 1) * 8 + j).Value = Worksheets("Auswahl").Cells(10 + i, 4 + j) Next j Next i