contare o trovare celle piene



  • contare o trovare celle piene
    di Vale (utente non iscritto) data: 10/09/2015 11:04:31

    Salve!non riesco a capire come creare un codice in vba che riesca a trovare solo le celle dove sono inseriti dei numeri. Sia per scriverle su un file txt che per trovare un numero specifico o trovare solo i numeri pari per esempio.
    Vi prego aiutatemi!!!!!
    grazieeeeeeeeeeeeeeeee



  • di alfrimpa data: 10/09/2015 11:20:28

    Ciao Vale

    La funzione qui sotto conta i valori numerici presenti nell'intervallo passato come parametro nella funzione.

    Sai inserirla nella cartella di lavoro e poi usarla sul foglio?

    Non ho capito le altre due domande; puoi allegare un file di esempio e spiegare meglio?

    Alfredo
     
    Function contanumeri(zona)
    Dim cella As Range
    For Each cella In zona
        If IsNumeric(cella.Value) Then
            contanumeri = contanumeri + 1
        End If
    Next cella
    End Function
    






  • di Vecchio Frac data: 10/09/2015 14:38:39

    Su IsNumeric ho sempre qualche perplessità ^_^
    Nel caso particolare io proverei banalmente con [count(...)].

    Il fatto è che isNumeric non mi tratta bene i numeri con notazione particolare... per esempio "1e3" e "1d3" sono riconosciuti come numeri (stanno entrambi per "1000"). Ma allo stesso tempo non vede bene le date, che non vede come numeri (sbagliando), mentre COUNT sì... insomma forse bisogna prima capire la definizione di "numero" che si vuole accettare ^_^





  • di tanimon data: 11/09/2015 14:54:56

    ciao,
    ipotizzando una serie da da 1 a 10 nel range("a1:a10")
    entrambe le due macro che riporto inseriscono la parola "pari" o "dispari",
    nel range("b1:b10").

    Spero ti possano servire.

    Ciao
    Frank


     
    Sub pari_dispari()
    
    'adatta riferimenti alla tua situazione
    r = 1
    
    Do While Cells(r, 1).Value <> ""
    num = Cells(r, 1).Value / 2
        If num - Int(num) = 0 Then
            Cells(r, 2).Value = "pari"
        Else
            Cells(r, 2).Value = "dispari"
        End If
    r = r + 1
    Loop
    End Sub
    
    Sub pari_dispari_()
    
    'adatta riferimenti alla tua situazione
    For r = 1 To 10
        
    num = Cells(r, 1).Value / 2
        If num - Int(num) = 0 Then
            Cells(r, 2).Value = "pari"
        Else
            Cells(r, 2).Value = "dispari"
        End If
    
    Next r
    End Sub
    



  • di scossa data: 14/09/2015 09:32:59

    cit.: "Il fatto è che isNumeric non mi tratta bene i numeri con notazione particolare... per esempio "1e3" e "1d3" sono riconosciuti come numeri (stanno entrambi per "1000"). Ma allo stesso tempo non vede bene le date, che non vede come numeri (sbagliando)"

    Forse non è "lui" che sbaglia (do you remeber Value vs Value2 ?)





    ABC
    11=contanumeri(A1:A5)4
    2a
    301/10/2015
    45
    51000


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.(George Bernard Shaw)

     
    Function contanumeri(ByRef zona As Range) As Long
    Dim cella As Range
      
      For Each cella In zona
          If IsNumeric(cella.Value2) Then
              contanumeri = contanumeri + 1
          End If
      Next cella
    
    End Function



  • di Vecchio Frac data: 14/09/2015 12:01:30

    Ah d'accordo, e lo dice anche la Guida se è per questo:
    "L'argomento obbligatorio espressione è un valore di tipo Variant contenente un'espressione numerica o un'espressione stringa.
    IsNumeric restituisce True se espressione viene riconosciuta per intero come dato numerico, in caso contrario restituisce False.
    IsNumeric restituisce False se espressione è un'espressione data."

    Bel comportamento per una funzione che deve dirmi se quello che gli passo è un "numero"... autocontradditorio, impreciso, parziale e soprattutto *sbagliato*. La bestialità di Value2 che converte il dato a forza in tutto tranne Date (e Currency) non fa che peggiorare le cose :)






  • di scossa data: 14/09/2015 12:43:27

    cit.: "La bestialità di Value2 che converte il dato a forza ..."

    Punti di vista: secondo me è la proprietà Value che converte il dato originale (proprietà Value2), che anche per una data è un valore numerico di tipo Single, in data .....

    Comunque, sono d'accordo con te: peggiorare le cose riesce bene a quelli di Redmond


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.
    (George Bernard Shaw)



  • di Vecchio Frac data: 14/09/2015 14:22:09

    cit. " secondo me è la proprietà Value che converte il dato originale"
    ---> Ma è verissimo e purtroppo è pure la proprietà di default >_<