ai fogli dei singoli allievi:
Ecco il codice:
- Codice: Seleziona tutto
Sub CancellaF()
For FF = 1 To Worksheets.Count
If Sheets(FF).Name <> "Generale" And Sheets(FF).Name <> "RECORD" And Sheets(FF).Name <> "MEDIE" And Sheets(FF).Name <> "CLASSIFICHE" Then
Foglio = Sheets(FF).Name
Worksheets(Foglio).Range("F4:CA500").ClearContents
End If
Next FF
Call CompAllievi
End Sub
Sub CompAllievi()
Set Ws1 = Worksheets("Generale")
Ws1.Select
RidC = 6
For CC1 = 1 To 97 Step 4
RidC = RidC - 1
UR1 = Ws1.Cells(Rows.Count, CC1).End(xlUp).Row
For RR1 = 4 To UR1
Foglio = Ws1.Cells(RR1, CC1).Value
URF = Worksheets(Foglio).Cells(Rows.Count, CC1 + RidC).End(xlUp).Row + 1
If URF < 3 Then URF = 3
Ws1.Range(Cells(RR1, CC1 + 1), Ws1.Cells(RR1, CC1 + 2)).Copy Destination:=Worksheets(Foglio).Cells(URF, CC1 + RidC)
Next RR1
Next CC1
End Sub
Adesso sto provando a modificare il codice in modo che prenda in esame, e quindi copi, non solo i dati delle due colonne successive al nome ma dati fino alla quinta successiva al nome in un file come questo:
per distribuirli nei singoli fogli con un layout di questo tipo:
(come si vede non ci sono riuscito).
Il codice così come l'ho modificato è questo:
- Codice: Seleziona tutto
Sub CancellaF()
For FF = 1 To Worksheets.Count
If Sheets(FF).Name <> "Generale" Then
Foglio = Sheets(FF).Name
Worksheets(Foglio).Range("A2:F250").ClearContents
End If
Next FF
Call CompAllievi
End Sub
Sub CompAllievi()
Set Ws1 = Worksheets("Generale")
Ws1.Select
RidC = 2
For CC1 = 1 To 97 Step 7
RidC = RidC - 1
UR1 = Ws1.Cells(Rows.Count, CC1).End(xlUp).Row
For RR1 = 2 To UR1
Foglio = Ws1.Cells(RR1, CC1).Value
URF = Worksheets(Foglio).Cells(Rows.Count, CC1 + RidC).End(xlUp).Row + 1
If URF < 1 Then URF = 1
Ws1.Range(Cells(RR1, CC1 + 1), Ws1.Cells(RR1, CC1 + 2)).Copy Destination:=Worksheets(Foglio).Cells(URF, CC1 + RidC)
Next RR1
Next CC1
End Sub
Ma gli errori sono evidenti:
1) prende ancora in considerazione due colonne di dati (non riesco a capire quali siano le istruzioni per modificare questo parametro);
2) incolla dalla colonna B in poi e non dalla colonna A (sono riuscito a portarlo dalla colonna F alla B però se diminuisco ancora il parametro in
- Codice: Seleziona tutto
RidC=2
mi restituisce un errore.
Avevo pensato che la stringa con le istruzioni per il numero di colonne da copiare fosse
- Codice: Seleziona tutto
Ws1.Range(Cells(RR1, CC1 + 1), Ws1.Cells(RR1, CC1 + 2)).Copy Destination:=Worksheets(Foglio).Cells(URF, CC1 + RidC)
e l'avevo così modificata:
- Codice: Seleziona tutto
Ws1.Range(Cells(RR1, CC1 + 1), Ws1.Cells(RR1, CC1 + 2), Ws1.Cells(RR1, CC1 + 3), Ws1.Cells(RR1, CC1 + 4), Ws1.Cells(RR1, CC1 + 5)).Copy Destination:=Worksheets(Foglio).Cells(URF, CC1 + RidC)
ma non funziona.
Sono impantanato nella mia ignoranza di VBA!!!