orario docenti



  • orario docenti
    di zatopek (utente non iscritto) data: 13/11/2012 01:03:03

    Buongiorno a tutti. Premetto che mi interesso un po' di excel ma non sono un esperto. Chiedo pertanto un aiuto.
    Ho una tabella-orario scolastico così composta: titoli riga = aule, titoli colonna = ore (1a, 2a..). All'incrocio il nome del docente. Da questi dati vorrei poter ricavare l'orario del signolo docente.
    Es: casella a discesa con nome docente, le ore nel titolo riga, ed ottenere l'aula corrispondente nella colonna a fianco. Non so se sono stato chiaro... il dato variabile (formula?) è l'aula.

    TABELLA DATI:

    ore a b c d e f g
    1 neri bianchi gialli rossi viola blu verdi
    2 bianchi blu neri verdi viola rossi gialli
    3 verdi gialli rossi blu bianchi viola neri
    4 blu verdi rossi viola neri gialli bianchi
    5 bianchi viola neri verdi gialli rossi blu
    6 viola neri gialli rossi bianchi blu verdi
    7 gialli rossi bianchi blu verdi neri viola

    RISULTATO DESIDERATO:
    neri (elenco a discesa)
    1 a
    2 c
    3 g
    4 e
    5 c
    6 b
    7 f

    Meglio ancora sarebbe se, partendo da un'orario settimanale o mensile del tipo sopra indicato (quindi riportante in colonna anche il giorno, accanto all'ora) potessi estrarre un orario-docente settimanale o mensile

    Grazie per qualunque suggerimento, spero di essere stato abbastanza chiaro



  • di HarryBosch data: 13/11/2012 08:35:42

    Ciao Zatopek
    riusciresti ad allegare un file di esempio?
    probabilmente mi risulterebbe un pò più chiaro, perché la mattina sono un pò lento a carburare ^_^
    Senza dati sensibili ovviamente.. bastano le tabelle con alcuni dati fittizzi come hai indicato.



  • di Vecchio Frac data: 13/11/2012 10:28:10

    Fattibile con un pochino di impegno concettuale.
    Dalla tabella devo costruire l'array senza duplicati dei nomi dei docenti (neri, bianchi, gialli, ...), quindi scorrere la matrice per trovare tutte le corrispondenze e restituire i risultati in un elenco a discesa nel foglio stesso. Giusto?
    Ogni docente compare una sola volta per riga? se sì questo semplifica il meccanismo :)





  • di Vecchio Frac data: 13/11/2012 14:18:21

    Ho ricostruito lo specchietto. Posto qui sia il codice utilizzato che un piccolo file d'esempio.
    Il risultato è ancora in via di elaborazione, nel senso che il codice non crea una cella con elenco a discesa, si limita a scorrere la tabella e a ricostruire chi trova e dove.
    Sulla seconda parte della tua richiesta, non riesco a capire (fammi un esempio chiaro).
     
    Option Explicit
    
    Sub estrai()
    Dim find_cell As Range, table As Range, ac As Range, find_first As String, i As Integer, j As Integer
    
        Set table = [A1].CurrentRegion.Offset(1, 1).Resize([A1].CurrentRegion.Rows.Count - 1, [A1].CurrentRegion.Columns.Count - 1)
    
        For Each ac In table.Rows(1).Cells
            j = j + 1
            i = 0
            With table
                Set find_cell = table.Cells(1).Find(ac)
                If Not (find_cell Is Nothing) Then
                    find_first = find_cell.Address
                    i = i + 1
                    Do
                        Cells(11 + i, 1 + j) = Cells(find_cell.Row, 1) & Cells(1, find_cell.Column)
                        Set find_cell = .FindNext(find_cell)
                        i = i + 1
                    Loop While Not (find_cell Is Nothing) And (find_cell.Address <> find_first)
                    End If
            End With
        Next
            
    
    End Sub






  • di Vecchio Frac data: 13/11/2012 14:27:54

    Sarebbe fichissimo invece (e procurerebbe un po' di notorietà sul Web) un programmino che, dato un elenco di docenti, un numero di ore a disposizione per ciascuno, turni di riposo e vincoli vari, sfornasse un orario bell'e pronto con tutti gli incastri al posto giusto, rispettando i vincoli inseriti. Quante volte ho provato a farlo, tante volte mi sono arenato :)

    Comunque attendo da "Zapotek" un commento sul codice prodotto e su eventuali richieste successive, che magari lo modificano anche pesantemente.





  • di Rplacanica (utente non iscritto) data: 13/11/2012 22:12:07

    Non solo, ma il programmino potrebbe essere usato mutatis mutandis per numerose altre applicazioni, come ad esempio la programmazione di produzione...
    Pensa alla produzione farmaceutica dove ci sono pdt che sono contaminanti e che quindi devono essere lanciati solo dopo altri... O reattori che non possono accogliere alcune sintesi perchè non inerti... Ce ne sarebbero di applicazioni....



  • di Vecchio Frac data: 14/11/2012 08:37:47

    Verissimo Roberto... e infatti programmi così ce ne sono, ma mica in Excel e comunque costano bei dollaroni :)
    Infatti ho detto che sarebbe un lavorone mica male.
    Però in effetti quando ho provato a svilupparlo per me, dopo alcune settimane di insuccessi (beninteso, anni fa) ho pensato che in fondo non mi sarebbe servito a niente se non a rimpolpare il blog... e allora a che mi sarebbe servito? :P





  • di zatopek (utente non iscritto) data: 14/11/2012 20:30:31

    Grazie per l'interessamento e i preziosi consigli. E in particolare a Vecchio Frac che mi ha inviato un file di esempio e a cui mi rivolgo ora. Devi sopportare ancora un po' la mia ignoranza: la tabellina inferiore estrae esattamente i dati nel modo che mi serviva (non serve nemmeno più un elenco a discesa). Quello che non ho capito ancora è come devo procedere a partire da zero (ossia se ho solo la tabella superiore come faccio a ricavare quella inferiore? Posso applicare lo stesso procedimento a una tabella diversa - es. più grande?). Allego l'estratto dal file reale su cui sto lavorando, per essere meno vago. Grazie ancora



  • di Vecchio Frac data: 14/11/2012 21:32:09

    In effetti ho dovuto rivedere il mio codice.
    Vedi l'allegato "per zapotek 2", dove adesso puoi avere una tabella estesa quanto vuoi, la macro inserirà i dati quattro righe sotto la fine della tabella.
    Devo ancora vedere il tuo allegato ma non sarà difficile adattare la macro al contesto (spero ^_^).
     
    Option Explicit
    
    Sub estrai()
    Dim find_cell As Range, table As Range, ac As Range, find_first As String, i As Integer, j As Integer
    Const NUM_RIGHE_SOTTO = 5
    
        Set table = [A1].CurrentRegion.Offset(1, 1).Resize([A1].CurrentRegion.Rows.Count - 1, [A1].CurrentRegion.Columns.Count - 1)
    
        Cells(2 + table.Rows.Count + NUM_RIGHE_SOTTO, 1) = 1
        Cells(3 + table.Rows.Count + NUM_RIGHE_SOTTO, 1) = 2
        Range(Cells(2 + table.Rows.Count + NUM_RIGHE_SOTTO, 1), Cells(3 + table.Rows.Count + NUM_RIGHE_SOTTO, 1)).AutoFill Range(Cells(2 + table.Rows.Count + NUM_RIGHE_SOTTO, 1), Cells(1 + table.Rows.Count * 2 + NUM_RIGHE_SOTTO, 1))
        
        j = 1
        
        For Each ac In table.Rows(1).Cells
            i = table.Rows.Count + 1 + NUM_RIGHE_SOTTO
            With table
                Set find_cell = table.Rows(1).Find(ac)
                If Not (find_cell Is Nothing) Then
                    find_first = find_cell.Address
                    Cells(i, j + 1) = ac
                    Cells(i, j + 1).Font.Bold = True
                    i = i + 1
                    Do
                        Cells(i, j + 1) = Cells(find_cell.Row, 1) & Cells(1, find_cell.Column)
                        Set find_cell = .FindNext(find_cell)
                        i = i + 1
                    Loop While Not (find_cell Is Nothing) And (find_cell.Address <> find_first)
                End If
            End With
            j = j + 1
        Next
    
    End Sub