Condividi tramite

Filtrare valori decimali tramite macro.

Anonimo
2021-12-25T15:54:09+00:00

Ciao,

ho la seguente maschera:

per filtrarmi i dati uso la seguente macro:

Sub CECKPOINT_Rettangolo1_Click()

ActiveSheet.Range("$H$12:$H$2000").AutoFilter Field:=6, Criteria1:=(">=" & Range("H2").Value - Range("H4").Value), \_ 

Criteria2:="<=" & Range("H2").Value + Range("H4").Value, Operator:=xlAnd 

End Sub

il problema però è che il filtro avviene solo se nelle celle H2 e H4 ci sono numeri interi, mentre con i decimali non funziona.

Come si può risolvere?

Ci sarebbe anche un'altra possibilità.

Siccome un mio amico mi ha fatto vedere che in un programma, purtroppo chiuso con password, i dati vengono filtrati inserendo tramite macro i numeri direttamente nella mascherina predefinita di Excel:

mi sapete dire quale codice usare?

Vladimiro

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-12-26T05:36:36+00:00

Ciao Vladimiro,

Un'altra soluzione preferibile sarebbe adottare il seguente approccio:

'========>>

Option Explicit

'-------->>

Public Sub CECKPOINT_Rettangolo1_Click()

Dim dVal As Double 

Dim dVal2 As Double 

With ActiveSheet 

    dVal = .Range("H2").Value - .Range("H4").Value 

    dVal2 = .Range("H2").Value + .Range("H4").Value 

    .Range("$H$12:$H$2000").AutoFilter Field:=6, Criteria1:=">=" & **Str(dVal)**, \_ 

        Criteria2:="<=" & **Str(dVal2)**, Operator:=xlAnd 

End With 

End Sub

'<<========

Per comprendere la logica di questo approccio, guarda i valori restituiti dalla macro per un determinato insieme di valori H2 e H4:

Immagine

Noterai che la funzione VBA Str converte i valori numerici in valori stringa e sostituisce il separatore decimale virgola con un punto.

===

Regards,

Norman

Immagine

La risposta è stata utile?

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

3 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2021-12-26T19:14:36+00:00

    Ciao Vladimiro,

    Ciao Norman

    spiegazione impeccabile e risultato perfetto.

    Grazie e alla prossima,

    Mi fa piacere che tu abbia risolto il problema e ti ringrazio il cortese riscontro.

    Alla prossima.

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2021-12-26T16:49:49+00:00

    Ciao Vladimiro,

    Un'altra soluzione preferibile sarebbe adottare il seguente approccio:

    '========>>

    Option Explicit

    '-------->>

    Public Sub CECKPOINT_Rettangolo1_Click()

    Dim dVal As Double

    Dim dVal2 As Double

    With ActiveSheet

    dVal = .Range("H2").Value - .Range("H4").Value

    dVal2 = .Range("H2").Value + .Range("H4").Value

    .Range("$H$12:$H$2000").AutoFilter Field:=6, Criteria1:=">=" & Str(dVal), _

    Criteria2:="<=" & Str(dVal2), Operator:=xlAnd

    End With

    End Sub

    '<<========

    Per comprendere la logica di questo approccio, guarda i valori restituiti dalla macro per un determinato insieme di valori H2 e H4:

    Immagine

    Noterai che la funzione VBA Str converte i valori numerici in valori stringa e sostituisce il separatore decimale virgola con un punto.

    ===

    Regards,

    Norman

    Immagine

    Ciao Norman

    spiegazione impeccabile e risultato perfetto.

    Grazie e alla prossima,

    Vladimiro

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2021-12-26T04:57:38+00:00

    Ciao Vladimiro,

    ho la seguente maschera:

    Immagine

    per filtrarmi i dati uso la seguente macro:

    Sub CECKPOINT_Rettangolo1_Click()

    ActiveSheet.Range("$H$12:$H$2000").AutoFilter Field:=6, Criteria1:=(">=" & Range("H2").Value - Range("H4").Value), _

    Criteria2:="<=" & Range("H2").Value + Range("H4").Value, Operator:=xlAnd

    End Sub

    il problema però è che il filtro avviene solo se nelle celle H2 e H4 ci sono numeri interi, mentre con i decimali non funziona.

    Come si può risolvere?

    Ci sarebbe anche un'altra possibilità.

    Siccome un mio amico mi ha fatto vedere che in un programma, purtroppo chiuso con password, i dati vengono filtrati inserendo tramite macro i numeri direttamente nella mascherina predefinita di Excel:

    Immagine

    mi sapete dire quale codice usare?

    Questo è un problema causato dall'incapacità di VBA di gestire un separatore decimale virgola quando viene utilizzato come criterio di filtro.

    Per superare questa difficoltà prova qualcosa del genere:

    '========>>

    Option Explicit

    '-------->>

    Public Sub CECKPOINT_Rettangolo1_Click()

    Dim dVal As Double 
    
    Dim dVal2 As Double 
    
    With ActiveSheet 
    
        dVal = .Range("H2").Value - .Range("H4").Value  
    
       dVal2 = .Range("H2").Value + .Range("H4").Value       
    
       .Range("$H$12:$H$2000").AutoFilter Field:=6, Criteria1:="&gt;=" & **Replace(dVal, ",", ".")**, \_ 
    
            Criteria2:="&lt;=" & **Replace(dVal2, ",", ".")**, Operator:=xlAnd 
    
    End With 
    

    End Sub

    '<<========

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento