Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

Übersichtstabelle für Gesprächszeiten erstellen
#1
Hallo Excel-Experten,

ich habe ein Anliegen, weil ich selbst nicht mehr weiterkomme.

Sachverhalt:
Für die Effizienzsteigerung an meiner Schule mit 800 Schülern bin ich gerade dabei, die Planung für Elternabende nachhaltig zu gestalten. Es ist so, dass Eltern bei Gesprächsbedarf Lehrer nennen können, was wiederum (von mir) zeitlich getaktet werden muss. Demnach habe ich insgesamt 3 Werte zu berücksichtigen (Namen der Lehrkräfte, Namen der Schüler und Uhrzeiten). Beispielhaft verwirklicht ist das exemplarisch in Anhang-Matrix. In einer zweiten Tabelle auf einem weiteren Worksheet-'Übersichtstabelle' soll eine Übersicht aufgelistet werden. Denn bei 800 Schülern und 70 Lehrkäften suche ich mich da duselig, um zu filtern, welches Elternteil welchen Lehrer wann spricht.

Was möchte ich erreichen?
Im Anhang2 (Übersichtstabelle) möchte ich in dem Bereich (B2:CW11) ausschließlich die Schüler-/Elternnamen aufgeführt bekommen, die in der jeweiligen Uhrzeit den Lehrer "X" sprechen sollen. Die Daten werden aus Anhang1 (Matrix) gefiltert. Der Bereich B1:CW1 führt alle Lehrernamen auf, A2:A1001 alle Schülernamen der Schule und im Bereich B2:CW1001 sind die Uhrzeiten verbucht.
Beispiel: In dem Worksheet Übersichtstabelle müsste jetzt in C2 'Schüler2' stehen, weil in der Matrix die 16:30 entsprechend verbucht ist. Gleiches in C3 = 'Schüler7', weil 16:45.

Ich habe es schon ChatGPT versucht, wo mir Index- iVm. Vergleich- Formeln ausgespuckt wurden. Führte alles leider nicht zum gewünschten Erfolg.
Beispiel: =INDEX('Output Matrix'!$A$2:$A$1001; SVERWEIS($A2 & "|" & C$1; 'Output Matrix'!$B$2:$CW$1001; SUMME(WENNFEHLER(SPALTEN('Output Matrix'!$B$1:$CW$1)*(ZEILE('Output Matrix'!$B$1:$CW$1)>1);0);FALSCH); FALSCH))

Ich freue mich auf nette Hilfestellungen.


Angehängte Dateien Thumbnail(s)
       
Antworten Top
#2
Hola,
eine Exceltabelle an Stelle von Bildern wäre hilfreicher.
Gruß,
steve1da
Antworten Top
#3
Hallo und danke :)

Kann ich gerne machen.

Ich habe ein zweites Arbeitsblatt erstellt 'Output' und dort sollen quasi anstelle der "X" die jeweiligen Namen aufgeführt werden.

LG


Angehängte Dateien
.xlsm   Elternabend.xlsm (Größe: 1,47 MB / Downloads: 17)
Antworten Top
#4
Hallo,

Vorschlag:

Code:
Sub T_1()
Dim dS As Object, dL As Object
Dim C As Range, Sc As String, Le As String

Sheets("Tabelle1").Activate
Set dS = CreateObject("Scripting.Dictionary")   'Schüler
Set dL = CreateObject("Scripting.Dictionary")   'Lehrer

lr = Cells(Rows.Count, 2).End(xlUp).Row

For Each C In Range("B5:AE" & lr)
    If C = 1 Then
        Sc = Cells(C.Row, 1)
        Le = Cells(4, C.Column)
        
        dS(Sc) = dS(Sc) & " " & Le
        dL(Le) = dL(Le) & " " & Sc
        
    End If
Next C

Sheets("Tabelle2").Activate

For Each k In dL
    ze = Application.Match(k, Columns(1), 0)
    ar = Split(dL(k))
    For i = 1 To UBound(ar)
    
        sp = Cells(ze, Columns.Count).End(xlToLeft).Column + 1
        'sp = Cells(ze, sp).End(xlToLeft).Column
        Cells(ze, sp) = ar(i)
    Next i
Next k
End Sub

Sorry, der Kommentar muss sein:

Excel's Strukturierte Tabelle machen in VBA einfach nur Ärger
Der Wunsch einen "ordentlichen Code" zu schreiben ...

mfg


Angehängte Dateien
.xlsm   Eltern_sprech.xlsm (Größe: 494,53 KB / Downloads: 3)
[-] Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:
  • ma_LLg
Antworten Top
#5
Der vorherige Code wird nach dem kompletten Ausfüllen der Input-Matrix (Anmeldungung) ausgeführt. Das ist sehr inflexible, besser ist das "FiFo"-Prinzip, wer sich zuerst anmeldet, erhält den ersten Termin, einmal gesetze Termin bleiben unverändert.

Der Code sollte bei jeder Eingabe sofort rechnen, da die Anmeldungen nacheinander kommen.

Dann reicht dieser Code:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target = 1 Then
    Sc = Cells(Target.Row, 1)
    Le = Cells(4, Target.Column)
    
    With Sheets("Output")
        ze = Application.Match(Le, .Columns(1), 0)
        sp = .Cells(ze, Columns.Count).End(xlToLeft).Column + 1
        .Cells(ze, sp) = Sc
    End With
    
    With Sheets("Zeit")
        ze = Application.Match(Le, .Columns(1), 0)
        .Cells(ze, sp - 1) = Sc
    End With
End If
End Sub

mfg


Angehängte Dateien
.xlsm   Eltern_sprech.xlsm (Größe: 116,59 KB / Downloads: 4)
[-] Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:
  • ma_LLg
Antworten Top


Gehe zu:


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