Condividi:        

programmazione Excel

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

programmazione Excel

Postdi vaccant » 07/12/06 14:16

ciao a tutti ho un problema con excel, cerco di riassumerlo in poche parole:

Ho una tabella, che varia in base al numero delle classi di un istituto scolastico, in cui ci sono elencate le classi e per ciascuna classe il numero di ore di lezione per materia.
Es.
Italiano Storia
1A 5 2
1B 5 2
1C 5 2
1D 5 2

Vorrei raggruppare sotto “Lettere1” le ore di italiano e storia della 1°A e 1B , sotto “Lettere2” le ore della 1C e 1D e così via, cancellando dall’elenco le ore utilizzate
Come posso fare? Chi mi può aiutare
Grazie Vaccant
vaccant
Newbie
 
Post: 6
Iscritto il: 28/11/06 12:03

Sponsor
 

Postdi Anthony47 » 11/12/06 00:40

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.
Avatar utente
Anthony47
Moderatore
 
Post: 19438
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi vaccant » 11/12/06 11:22

Prima di tutto ti ringrazio per il tuo impegno e la sollecitudine con cui cerchi di risolvere le mie grosse lacune in excel.
Riguardo alla soluzione proposta, è gagliarda, ma non risolve il mio problema. Infatti, col nuovo anno scolastico, cambiando il numero delle prime, seconde, terze, e così via dovrei rifare tutte le associazioni. Un lavoraccio che si può paragonare alla formazione degli organici.
Io cercavo un qualcosa di più automatico. Un qualcosa che dicesse al programma, per esempio, che le cattedre di lettere devono essere formate:
1) dalle ore di Italiano e Storia di una prima e una seconda o due prime o due seconde;
2) dalle ore di Italiano e Storia di una terza una quarta e una quinta o una terza e due quarte o una quarta e due quinte, ecc..
O ancora, che la cattedra di religione (un ora per classe) e formata da 18 classi.
In base alle informazioni inserite, indipendentemente dal numero delle classi, il programma dovrà determinare le varie cattedre es.:
Lettere1 = 1a –Italiano(5) Storia(2)+2a-Italiano(5) Storia(2);
Lettere2= 1b – Italiano (5) Storia(2)+2b-Italiano(5) Storia(2)
Spero di essere stato chiaro e che tu riesca a creare qualche stratagemma perché le mie misere conoscenze di programmazione non mi aiutano.
Saluti vaccant
vaccant
Newbie
 
Post: 6
Iscritto il: 28/11/06 12:03

Postdi Anthony47 » 12/12/06 02:42

Immagino che quando dici, ad esempio, “ore di Italiano e Storia di una prima e una seconda o due prime o due seconde” vorresti fermarti qui, e il programma deve calcolare che Lettere1 associa 1A/1B, Lettere2 associa 1C/1D, ed eventualmente Lettere3 associa 1E/1F.

Se e’ cosi’, la vedo dura per delle proposte di buona volonta’ quale potrebbero essere le mie; potrebbero esserci soluzioni ad hoc in commercio, ma io non sono nel settore.

Mi spiace, ma penso di non essere di aiuto.
Ciao,
Avatar utente
Anthony47
Moderatore
 
Post: 19438
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi vaccant » 12/12/06 11:10

Ti ringrazio, comunque.
vaccant
vaccant
Newbie
 
Post: 6
Iscritto il: 28/11/06 12:03


Torna a Applicazioni Office Windows


Topic correlati a "programmazione Excel":


Chi c’è in linea

Visitano il forum: Nessuno e 108 ospiti