Tabelle automatisch erstellen und Änderungen an Haupttabelle zurückgeben?
#1
Question 
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.

Habt ihr Ideen? Danke schon einmal! Smile Huh
Top
#2
Hallo,

mach die Änderungen in der Haupttabelle.  Zum schnelleren Auffinden kannst du den Schnellfilter benutzen.
Cadmus
Top
#3
(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...
Top
#4
(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.

Top
#5
Ü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.
Cadmus
Top
#6
Hallöchen,

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.


Angehängte Dateien
.xlsm   Anzeigen+Aendern.xlsm (Größe: 18,31 KB / Downloads: 3)
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#7
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 (Wink) 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

End Sub
Top
#8
Hallöchen,

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:
  • Cantello
Top
#9
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
       
End Sub
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste