Condividi tramite

Conteggio occorrenze e ritardi

Anonimo
2021-05-28T11:19:43+00:00

Buongiorno,

per approfondire le mie conoscenze su Excel sto cercando di apprendere il linguaggio VBA.

In un file, che allego, ho una tabella da B2 a G10 dove riporto dei numeri (nel mio esempio da 1 a 10) .

In colonna K e in colonna L rispettivamente riesco ad ottenere con formule il numero delle occorrenze (col. K) e il numero del ritardo rispetto all'ultima occorrenza (col. L) dei valori presenti in colonna J.

In colonna O e P vorrei ottenere con il VBA lo stesso risultato. Sono riuscito a risolvere solo il "conteggio delle occorrenze" e mi servirebbe un aiuto per quantificare i "ritardi"

link file

Find.xlsm

Ringrazio in anticipo

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2021-05-28T12:34:24+00:00

Ciao Michele,

per approfondire le mie conoscenze su Excel sto cercando di apprendere il linguaggio VBA.

In un file, che allego, ho una tabella da B2 a G10 dove riporto dei numeri (nel mio esempio da 1 a 10) .

In colonna K e in colonna L rispettivamente riesco ad ottenere con formule il numero delle occorrenze (col. K) e il numero del ritardo rispetto all'ultima occorrenza (col. L) dei valori presenti in colonna J.

In colonna O e P vorrei ottenere con il VBA lo stesso risultato. Sono riuscito a risolvere solo il "conteggio delle occorrenze" e mi servirebbe un aiuto per quantificare i "ritardi"

link file

Find.xlsm

Prova qualcosa del genere:

'========>>

Option Explicit

'-------->>

Public Sub Ritardo()

Dim WB As Workbook 

Dim SH As Worksheet 

Dim srcRng As Range, rng\_Numeri As Range 

Dim rng\_Ritardo As Range 

Dim iRitardo As Long 

Dim i As Long, LRow As Long, iCtr As Long 

Const sFoglio As String = **"Numeri"                            '<<=== Modifica** 

Const sIntervallo\_Sorgente As String = **"B2:G10"        '<<=== Modific** 

Const sIntervallo\_Numeri As String = **"J2:J11"             '<<=== Modifica** 

Const sIntervallo\_Ritardo As String = **"P2:P11"           '<<=== Modifica** 

Set WB = ThisWorkbook 

Set SH = WB.Sheets(sFoglio) 

With SH 

    Set srcRng = .Range(sIntervallo\_Sorgente) 

    Set rng\_Numeri = .Range(sIntervallo\_Numeri) 

    Set rng\_Ritardo = .Range(sIntervallo\_Ritardo) 

End With 

With srcRng 

    For i = 1 To rng\_Numeri.Cells.Count 

        iCtr = iCtr + 1 

        LRow = LastRow(SH, rng\_Numeri.Cells(i).Value, srcRng) 

        If CBool(LRow) Then 

            iRitardo = .Rows.Count - LRow + 1 

            rng\_Ritardo.Cells(i).Value = iRitardo 

        End If 

    Next i 

End With 

End Sub

'--------->>

Public Function LastRow(SH As Worksheet, _

iNumber As Long, \_ 

Optional Rng As Range, \_ 

Optional minRow As Long = 1) 

If Rng Is Nothing Then 

    Set Rng = SH.Cells 

End If 

On Error Resume Next 

LastRow = Rng.Find(What:=iNumber, \_ 

    After:=Rng.Cells(1), \_ 

    Lookat:=xlPart, \_ 

    LookIn:=xlFormulas, \_ 

    SearchOrder:=xlByRows, \_ 

    SearchDirection:=xlPrevious, \_ 

    MatchCase:=False).Row 

On Error GoTo 0 

If LastRow < minRow Then 

    LastRow = minRow 

End If 

End Function

'<<========

===

Regards,

Norman

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

9 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2021-05-28T14:08:21+00:00

    Giusto. Eventuali dubbi sono disposizione!

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2021-05-28T12:21:30+00:00

    È possibile utilizzare le funzioni di Excel in VBA chiamandole tramite WorksheetFunction. Qualcosa di simile a

    Sub aTest ()

    Dim MyVar As Long
    
    
    
    Con fogli ("Piano1")
    
        MyVar = WorksheetFunction.CountIf (.Range ("B: B"), "60l")
    
        MsgBox MyVar
    
    Finisci con
    

    End Sub

    Potrebbe anche essere usato

    MyVar = Application.CountIf (.Range ("B: B"), "60l")

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2021-05-28T12:16:30+00:00

    Ciao, come stai?

    Per chiarire, eri in grado di risolvere solo il "conteggio delle occorrenze" e avresti bisogno di aiuto per quantificare i "ritardi". Giusto?

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2021-05-28T12:06:57+00:00

    Ciao, comunidade Benvenuto nella Microsoft. Piacere di aiutarti. Sono Sandro, un consulente indipendente.

    La risposta è stata utile?

    0 commenti Nessun commento