Condividi:        

conta le quote

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

conta le quote

Postdi raimea » 19/11/22 15:23

ciao

tramite macro
vorrei contare quante volte ho usato la stessa quota
di fgl generale col J
e riportarla in fgl squadre col H e I
mettendo in alto la quota usata piu volte

in fgl squadre vorrei fossere scritte/riportare , SOLO
le quote trovate in fgl generale


vi allego il file

https://www.dropbox.com/scl/fi/u3r28d7k7pqaqoaivh731/quote.xlsm?dl=0&rlkey=9rzr6z5hq8tswlxk1rirbxoyh

ciao
S.O. win10, Excell 2019
Avatar utente
raimea
Utente Senior
 
Post: 1427
Iscritto il: 11/02/10 07:33
Località: lago

Sponsor
 

Re: conte le quote

Postdi Anthony47 » 19/11/22 19:53

Non sono certo di aver capito, ma prova questa macro:
Codice: Seleziona tutto
Sub QuoteNSort()
Dim wArr, StaQ As Range, myMatch, OutR As Range
Dim oArr(), oInd As Long, tArr(1 To 2)
'
Set StaQ = Sheets("generale").Range("J8")       '<<< Da dove leggere le quote
Set OutR = Sheets("Squadre").Range("O7")        '<<< Dove scrivere il risultato
'
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
Next I
'Ordinamento in bubble sort:
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 Sub

Questa legge le quote da foglio GENERALE e le scrive su foglio SQUADRE in ordine decrescente di presenza

Le linee marcate <<< sono da personalizzare; al momento ho impostato l'output su un'area libera; se il risultato e' quello che cercavi allora bastera' correggere la riga Set OutR = Etc Etc

Se cercavi una cosa diversa allora devi spiegare meglio...
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: conte le quote

Postdi raimea » 19/11/22 20:28

ciao

e' tutto ok

ho sistemato dove riportare il risultato

grazie
S.O. win10, Excell 2019
Avatar utente
raimea
Utente Senior
 
Post: 1427
Iscritto il: 11/02/10 07:33
Località: lago

Re: conte le quote

Postdi raimea » 30/11/22 17:55

ciao
ho resettato il fgl generale x partire con i dati nel nuovo mese di Dicembre

ma la macro mi va in blocco,
non termina mai se scrivo 1na sola partita in riga 8.

mentre se x test ne scrivo solo 2/ 3 si blocca qui:

Immagine

Immagine

:roll:

ciao
S.O. win10, Excell 2019
Avatar utente
raimea
Utente Senior
 
Post: 1427
Iscritto il: 11/02/10 07:33
Località: lago

Re: conta le quote

Postdi Anthony47 » 30/11/22 19:25

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

Re: conte le quote

Postdi raimea » 30/11/22 19:34

ciao
tutto ok

x ora va bene cosi

grazie
S.O. win10, Excell 2019
Avatar utente
raimea
Utente Senior
 
Post: 1427
Iscritto il: 11/02/10 07:33
Località: lago


Torna a Applicazioni Office Windows


Topic correlati a "conta le quote":


Chi c’è in linea

Visitano il forum: Nessuno e 10 ospiti