Sviluppare funzionalita su Microsoft Office con VBA trovare il primo, secondo, terzo, ecc, numero piu frequente

Login Registrati
Stai vedendo 10 articoli - dal 1 a 10 (di 10 totali)
  • Autore
    Articoli
  • #35387 Score: 0 | Risposta

    giulioc
    Partecipante

      Buongiorno ho una colonna con dei numeri ad esempio 332 - 332 - 820 - 820 - 820 - 331 - 290 - 290 ecc. vorrei sapere quale è il primo numero più frequente - il secondo ecc. fino al quinto. Spero che non sia una questione troppo complessa. Vi ringrazio anticipatamente.

      #35393 Score: 0 | Risposta

      vecchio frac
      Senior Moderator
        272 pts

        Una moda?

        Option Explicit
        
        Function Moda()
        Dim n As Long
        Dim j As Long
        Dim i As Long
        
            Range("B2:C8", "Z:Z").ClearContents
            Range("A2:A8").Copy Range("Z2")
            n = Range("Z2").CurrentRegion.Cells.Count
            Range("Z2:Z" & n).RemoveDuplicates Columns:=1, Header:=xlNo
            n = Range("Z2").CurrentRegion.Cells.Count
            
            j = 2
            For i = 1 To n
                Cells(j, "B") = Cells(i + 1, "Z")
                Cells(j, "C") = Application.CountIf(Range("A2:A8"), Cells(i + 1, "B"))
                j = j + 1
            Next
        
        End Function

         

        #35395 Score: 0 | Risposta

        giulioc
        Partecipante

          Perfetto! Ma mi sceglie il primo numero ripetuto piu volte vorrei che ci sia la possibilità di scegliere il primo o il secondo o il terzo o il quarto o il quinto. Nel mio esempio 820 è il primo, 290/332 il secondo, 331 il terzo. Ti ringrazio della cortese attenzione.

          Ovviamente i dati primo secondo terzo verrebbero messi su celle differenti ed editate come grafico.

          #35396 Score: 0 | Risposta

          vecchio frac
          Senior Moderator
            272 pts

            Mi sembrava di aver colto il senso della domanda. Allego il file così mi dici se ho sbagliato scenario.

            Ho anche modificato leggermente il codice rispetto a quello precedente ma solo per introdurre il sorting del risultato. Che secondo me risponde alla domanda 🙂

            Allegati:
            You must be logged in to view attached files.
            #35398 Score: 0 | Risposta

            giulioc
            Partecipante

              Grazie comunque spero che l'esempio sia esaustivo

              Allegati:
              You must be logged in to view attached files.
              #35400 Score: 0 | Risposta

              vecchio frac
              Senior Moderator
                272 pts

                Alla luce della diversa disposizione dei range nel tuo nuovo file, allego la nuova modifica. Incollo qui anche il codice utilizzato.

                Option Explicit
                
                Function Moda()
                Dim n As Long
                Dim j As Long
                Dim i As Long
                
                    Range("E2:F8,Z:Z").ClearContents
                    Range("Z1") = "header"
                    n = Application.CountA(Range("B:B"))
                    Range("B2:B" & n).Copy Range("Z2")
                    n = Range("Z2").CurrentRegion.Cells.Count
                    Range("Z:Z").RemoveDuplicates Columns:=1, Header:=xlYes
                    n = Range("Z2").CurrentRegion.Cells.Count
                    
                    j = 2
                    For i = 1 To n
                        Cells(j, "E") = Cells(i + 1, "Z")
                        Cells(j, "F") = Application.CountIf(Range("B2:B8"), Cells(i + 1, "E"))
                        j = j + 1
                    Next
                    Range("E2:F" & j).Sort Range("F2"), xlDescending, Header:=xlYes
                    Range("Z:Z").ClearContents
                
                End Function
                
                
                Allegati:
                You must be logged in to view attached files.
                #35402 Score: 0 | Risposta

                giulioc
                Partecipante

                  Non capisco mi trova sempre il primo e non il secondo ecc. Ciao e grazie dell'interessamento

                  #35404 Score: 0 | Risposta

                  vecchio frac
                  Senior Moderator
                    272 pts

                    Sì, il refuso c'era (nel range da cui ricavare i dati). Con la correzione seguente (allego anche il file completo) il comportamento dovrebbe essere quello giusto. Il range dei risultati si riordina correttamente mostrando in ordine decrescente dal maggiore al minore in base alla sequenza di occorrenze rinvenute. Se non è ancora questa la risposta che aspettavi, credo che servirà un esempio del risultato atteso.

                    Option Explicit
                    
                    Sub Moda()
                    Dim n As Long
                    Dim j As Long
                    Dim i As Long
                    Dim rng As Range
                    
                        Range("E2:F8,Z:Z").ClearContents
                        Range("Z1") = "header"
                        n = Application.CountA(Range("B:B"))
                        Set rng = Range("B2:B" & n)
                        
                        rng.Copy Range("Z2")
                        n = Range("Z2").CurrentRegion.Cells.Count
                        Range("Z:Z").RemoveDuplicates Columns:=1, Header:=xlYes
                        n = Range("Z2").CurrentRegion.Cells.Count - 1
                        
                        j = 2
                        For i = 1 To n
                            Cells(j, "E") = Cells(i + 1, "Z")
                            Cells(j, "F") = Application.CountIf(rng, Cells(i + 1, "E"))
                            j = j + 1
                        Next
                        Range("E1:F" & j - 1).Sort Range("F2"), xlDescending, Header:=xlYes
                        Range("Z:Z").ClearContents
                    
                    End Sub

                     

                    Allegati:
                    You must be logged in to view attached files.
                    #35407 Score: 0 | Risposta

                    giulioc
                    Partecipante

                      Perfetto sei un grande. Grazie di cuore

                      #35408 Score: 0 | Risposta

                      vecchio frac
                      Senior Moderator
                        272 pts

                        Bene, però attenzione che il codice è pesantemente influenzato dalla struttura del file. Se cambi la posizione dei range devi adattare il codice di conseguenza (sarebbe meglio generalizzarlo ricorrendo a nomi definiti invece che riferimenti di range e celle).

                        Se per adesso ti accontenti, puoi marcare come Risolto il thread 🙂

                      Login Registrati
                      Stai vedendo 10 articoli - dal 1 a 10 (di 10 totali)
                      Rispondi a: trovare il primo, secondo, terzo, ecc, numero piu frequente
                      Gli allegati sono permessi solo ad utenti REGISTRATI
                      Le tue informazioni: