20.09.2020, 20:08 (Dieser Beitrag wurde zuletzt bearbeitet: 20.09.2020, 20: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, 20: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, 19: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