Mi spiace, io non sono un appassionato di fantacalcio e quindi non posso aiutare granche'...
Andando a sentimento ho immaginato che il lavoro iniziale sia compilare in TUTTI quale Allenatore acquista quale Giocatore e quanto lo paga (colonna Crediti?)
Finito questo lavoro ti interessa che ogni giocatore venga posizionato nel foglio giusto, ruolo giusto, insieme con la Squadra e il costo (es colonna D di un foglio squadra?).
Assumero' che in colonna G di TUTTI ci siano tutti gli Allenatori e che ogni nominativo abbia un Foglio esattamente con lo stesso nome e tutti con la stessa struttura dati (nel file pubblicato cio' non e' rispettato per Patrik, Kele,
Per prima cosa modifica tutti i fogli "Allenatore=Squadra" per eliminare le celle unite sulla riga 4; inserirai il Ruolo (Portiere, Difensori,...) solo nella colonna destinata a contenere il nominativo del giocatore (quindi B4, G4, etc); la precisione di questo lavoro e' fondamentale per il lavoro che ti vado a proporre.
E' probabile che il contenuto dei fogli "Allenatore" debba essere azzerato inizialmente.
Per questo possiamo usare la seguente macro:
- Codice: Seleziona tutto
Sub Azzera()
Dim Elenco As String, I As Long, pIPp, myAll As Range
Dim deSquadra, deRuolo
deSquadra = Array("B5", "G5", "L5", "Q5")
deRuolo = Array("P", "D", "C", "A")
'
Elenco = "G2" '<<< Dove comincia 'elenco Allenatori=Squadre in Tutti
'
Sheets("Tutti").Select
For Each myAll In Range(Range(Elenco), Range(Elenco).End(xlDown))
If myAll.Value <> "" Then
With Sheets(myAll.Value)
For Each pIPp In deSquadra
.Range(pIPp).Resize(8, 3).ClearContents
Next pIPp
End With
End If
Next myAll
End Sub
ATTENZIONE: cancella anche alcune formule con cui credo tu abbia cercato di popolare le squadre. Quindi fai le prove su UNA COPIA del tuo file.
A questo punto puoi "spalmare" i giocatori sulle varie squadre usando questa seconda macro:
- Codice: Seleziona tutto
Sub Distrib()
Dim ETutti As String, myP As Range, Posit, myNext As Long, mErr As String
Dim deSquadra, deRuolo
'
deSquadra = Array("B5", "G5", "L5", "Q5")
deRuolo = Array("P", "D", "C", "A")
'
ETutti = "E14" '<<< Dove comincia l'elenco dei Giocatori in Tutti
'
Sheets("Tutti").Select
For Each myP In Range(Range(ETutti), Range(ETutti).End(xlDown))
If myP.Value = "CONSIGLI" Then Stop
If myP.Offset(0, -4) <> "" Then
With Sheets(myP.Offset(0, -4).Value)
Posit = Application.Match(myP.Offset(0, -1), deRuolo, 0) - 1
If Not IsError(Posit) Then
myNext = .Range(deSquadra(Posit)).Offset(10, 0).End(xlUp).Row + 1
.Cells(myNext, Left(deSquadra(Posit), 1)) = myP.Value
.Cells(myNext, Left(deSquadra(Posit), 1)).Offset(0, 1) = Left(myP.Offset(0, 1).Value, 3)
.Cells(myNext, Left(deSquadra(Posit), 1)).Offset(0, 2) = myP.Offset(0, -3).Value
Else
mErr = mErr & myP.Value & vbCrLf
End If
End With
End If
Next myP
If Len(mErr) > 5 Then
MsgBox ("Completato con errori su: " & mErr)
Else
MsgBox ("Completato...")
End If
End Sub
Il codice va inserito in un modulo standard del vba. Per questo, partendo da Excel
-premi Alt-F11 per aprire l'editor delle macro
-Menu /Inserisci /Modulo
-Copia il codice e incollalo nel frame dx del modulo appena creato
Le righe marcate <<< sono state compilate per aderire ai file da te pubblicati.
Il file a questo punto va salvato in formato .xlsm (macro enabled)
Nota che in questo modo la tabella su Tutti con i Crediti impegnati e quelli ancora disponibili non verrebbero aggiornati man mano che compili gi impegni di spesa, ma solo quando esegui la seconda macro.
Per avere in real time il calcolo dell'impegnato allora inserisci in I2 di Tutti questa formula:
- Codice: Seleziona tutto
=MATR.SOMMA.PRODOTTO(--($A$14:$A$5000=$G2);--($D$14:$D$5000=I$1);$B$14:$B$5000)
Copia poi verso destra e copia poi la prima riga di formule verso il basso; calcolerai cosi' nelle colonne I:L i valori "impegnati" man mano che li segni. Da questi valori unitari puoi calcolare il totale impegnato e il residuo con semplici formule, sempre sul foglio Tutti.
Spero che quanto proposto sia di qualche utilita'.
Ciao
keywords
Fantacalcio macro per assegnare alle squadre i calciatori acquistati