Non so se interpreto bene la richiesta, ma propongo il seguente approccio:
Sul tuo file, in un foglio libero, ti fai una tabella di associazione, di 3 colonne e tante righe, che contengono in sequenza su ogni riga Classe (es 1A), Materia (es Italiano) e Aggregazione (es Lettere1); piu’ righe, anche non consecutive, devono essere usate per definire delle “aggregazioni” complete.
Seleziona tutta la tabella, eventualmente anche ulteriori righe vuote di scorta, e 1) colorale di giallo per ricordarsi quale area e’ stata definita, e 2) assegna a questa area il nome TabIns tramite: Menu ->Inserisci ->Nome ->Definisci; nello spazio “Nomi nella cartella di lavoro” scrivi TabIns e confermi con Ok.
Se avrai bisogno di allungare (in altezza) la tabella e le righe di scorta sono esaurite, seleziona una riga completa a meta' tabella e fai Menu' ->Inserisci ->Righe; ripeti a piacere.
Copia la seguente macro in un Modulo di codice (istruzioni come da precedente caso):
- Codice: Seleziona tutto
Sub Vacc2()
Dim ColClassi, RiClassi, ColMat, RiMat, NumMat, LastRiga, ColIns, NumIns As Integer
Dim IClass, JMat, HIns, KIns As Integer
Dim CurClass, CurMat, CurIns, TabIns, RootIns As String
Dim PCeClassi, CeMaterie As String
PCeClassi = "A2" '<<< Prima Cella Classi, in verticale
CeMaterie = "B1:I1" '<<< Area Materie, in orizzontale
ColClassi = Range(PCeClassi).Column
RiClassi = Range(PCeClassi).Row
NumIns = Range("TabIns").Rows.Count
RootIns = Range("TabIns").Range("A1").Address
RiMat = Range(CeMaterie).Row
ColMat = Range(CeMaterie).Column
NumMat = Range(CeMaterie).Columns.Count
LastRiga = Cells(65536, ColClassi).End(xlUp).Row
If ActiveCell.Row <> Range(CeMaterie).Row Then
MsgBox ("ERRORE, la cella corrente non e' sulla riga dei Titoli; >> Abort")
Exit Sub
End If
CurIns = ActiveCell.Value
ColIns = ActiveCell.Column
Range("A1").Select
For IClass = 0 To LastRiga - RiClassi
CurClass = Range("A1").Offset(RiClassi - 1 + IClass, ColClassi - 1).Value
HIns = 0
For JMat = 0 To NumMat - 1
CurMat = Range("A1").Offset(RiMat - 1, ColMat - 1 + JMat).Value
Range(PCeClassi).Offset(IClass, ColMat - 1 + JMat).Select
For KIns = 0 To NumIns - 1
If (Range(RootIns).Offset(KIns, 0) = CurClass And Range(RootIns).Offset(KIns, 1) = CurMat And _
Range(RootIns).Offset(KIns, 2) = CurIns) Then
HIns = HIns + ActiveCell.Value
Selection.Interior.ColorIndex = 44
End If
Next KIns
Next JMat
Cells(RiClassi + IClass, ColIns).Value = HIns
Next IClass
End Sub
Ci sono 2 istruzioni, marcate con <<<< che devono essere ragionevolmente modificate per descrivere correttamente il tuo foglio di partenza:
Con la prima definisci da quale cella partono, in verticale, le Classi (e' settato su A2)
Con la seconda definisci su quali celle sono presenti le intestazioni di materia (e' settato su B1:I1)
Cambia questi valori, se necessario, cambiando i valori tra le VIRGOLETTE.
Assegna a questa macro un tasto di scelta rapida: Menu ->Macro ->Macro; seleziona dall’ elenco la macro Vacc2, premi Opzioni; nel box “Tasto di scelta rapida” inserisci A (A come Aggrega, Maiuscolo).
Come si usa:
Sulla stessa riga delle materie, in una colonna libera, scrivi l’ aggregazione da analizzare; es. Lettere1. Seleziona questa cella; premi Contr-Maiusc-A per lanciare la macro.
La macro scorre la tabella delle materie e la confronta con la tabella delle aggregazioni; eventuali corrispondenze di Classe/Materia/Aggregazione sono colorate di oro nella tabella delle materie e le rispettive ore sono sommate nella colonna di aggregazione.
Ripeti per ogni aggregazione che vuoi eseguire.
Le ore non vengono cancellate dalla tabella delle materie, ma solo colorate.
Se vuoi rilanciare tutte le aggregazioni, dovresti “scolorare” tutte le celle della tabella di partenza, in modo da avere la corretta identificazione delle aggregazioni eseguite.
Nota: cosi’ come e’ concepita, puo’ anche servire per tradurre le ore per classe/materia in ore per Insegnante; in questo caso la tabella di aggregazione dovra’ riportare, con santa pazienza, tutte le classi (col 1); poi per ogni classe le materie (Col 2); poi per ogni combinazione di Classe/Materia l’ Insegnante (Col 3). Come gia' detto, non e' necessario che le aggregazioni siano su righe consecutive.
Come sempre, 2 copie di backup prima di provare.
Infine, se quanto fatto aiuta, si puo’ anche automatizzare per elencare in orizzontale tutte le aggregazioni che si vogliono analizzare, e POI lanciare la macro (da modificare) per eseguire in un unico ciclo tutti i calcoli.
Facci sapere, ciao.