Quando si blocca e' perche' sta lavorando con una matrice lunga tutta una colonne; mentre ho capito che in certe condizioni le dimensioni di wArr e oArr rischiavano di essere in contrasto.
Ho quindi aggiunto un If /End If + un ulteriore If, le righe marcate con 'XXX nel seguente listato, e spostata la riga marcata 'SSS:
- Codice: Seleziona tutto
'altro codice precedente
' http://www.pc-facile.com/forum/viewtopic.php?f=26&t=112675&p=662302#p662302
'------------------
ActiveSheet.Unprotect
Set StaQ = Sheets("generale").Range("J8") '<<< Da dove leggere le quote
Set OutR = Sheets("Squadre").Range("H7") '<<< Dove scrivere il risultato
'
Range(OutR, OutR.Offset(10000, 0).End(xlUp)).Resize(, 2).ClearContents 'SSS
If Range(StaQ, StaQ.End(xlDown)).Rows.Count < 5000 Then 'XXX
wArr = Range(StaQ, StaQ.End(xlDown)).Value
ReDim oArr(1 To UBound(wArr), 1 To 2)
oInd = 1
For i = 1 To UBound(wArr)
myMatch = Application.Match(wArr(i, 1), Application.WorksheetFunction.Index(oArr, 0, 1), False)
If IsError(myMatch) Then
oArr(oInd, 1) = wArr(i, 1)
oArr(oInd, 2) = 1
oInd = oInd + 1
Else
oArr(myMatch, 2) = oArr(myMatch, 2) + 1
End If
DoEvents
Next i
'Ordinamento in bubble sort:
If oInd > UBound(wArr) Then oInd = oInd - 1 'XXX
For i = 1 To oInd - 1
For J = i + 1 To oInd
If oArr(i, 2) < oArr(J, 2) Then
tArr(2) = oArr(i, 2)
tArr(1) = oArr(i, 1)
oArr(i, 2) = oArr(J, 2)
oArr(i, 1) = oArr(J, 1)
oArr(J, 2) = tArr(2)
oArr(J, 1) = tArr(1)
End If
Next J
Next i
'' Range(OutR, OutR.Offset(10000, 0).End(xlUp)).Resize(, 2).ClearContents
OutR.Resize(UBound(oArr), 2).Value = oArr
End If 'XXX
'---- metto in ordine dal piu frequente-----------------------
Range("H7:I1000").Select
'altro codice successivo
Richiede almeno 2 valori in colonna J (con 0 o 1 valore skippa la fase di calcolo e lascia vuota l'area su foglio Squadre; se ha senso faccio un'ulteriore modifica)
Ciao