Macro conta carateri



  • Macro conta carateri
    di Salvleotta data: 28/07/2010

    Ciao,
    non sono molto pratico di macro ed ho un piccolo problema:
    ho necessità di cercare delle lettere specifiche in un intervallo di celle.
    la macro che riporto di seguito fa esattamente ciò che mi serva ma purtroppo limitatamente ad una singola cella. questo rende il mio foglio pesantissimo visto che mi trovo costretto a ripeteree n volte la stessa formula. potreste aiutarmi?

    per intenderci piuttosto che avere una formula del tipo =conta_car(a4;"a")
    avrei bisogno di =conta_car(a4:a5000;"a").
    allego codice vba
    grazie
    salvo
     
    Function Conta_Car(Dato As String, Separatore As String) As String
    Dim Matrice
    
    Matrice = Split(Dato, Separatore)
    
    Conta_Car = UBound(Matrice) + 0
    
    End Function



  • di Locate (utente non iscritto) data: 28/07/2010

    Ciao
    potresti utilizzare una macro e usare la tua funzione come contatore di stringa,vedi la proposta che ti ho fatto,questa riporta quante a ci sono in colonna a:a e il valore in c1
    ciao da locate

     
    Sub conta()
    Dim contatore, ver_car
    contatore = 0
    For i = 1 To 10
    ver_car = Str(Conta_Car(Cells(i, 1), "a"))
    If ver_car > 0 Then
    contatore = contatore + ver_car
    End If
    Next i
    Range("C1") = contatore
    End Sub
    
    Function Conta_Car(Dato As String, Separatore As String) As String
    Dim Matrice
    Matrice = 0
    Matrice = Split(Dato, Separatore)
    Conta_Car = UBound(Matrice) + 0
    End Function
    



  • di Salvleotta data: 28/07/2010

    Grazie,
    puntualissimo nella risp. ma mi ritroverei ancora una volta ad inserire tante macro per quante sono le lettere da ricercare e tante volte quante sono le colonne che mi interessa verificare. quello di cui ho bosigno, è una funzione tipo formula che mi restituisce il risultato nella cella in cui la inserisco contando le lettere che mi interessano nell'intervallo di celle che richiedo. spero tu mi possa aiutare.
    es.: =funzione(range;"lettera") così posso condizionarla facilmente con altre formule e/o risultati.
    salvo



  • di Enzo (utente non iscritto) data: 28/07/2010

    Ma nella cella hai solo una lettera o un insieme di lettere all'interno delle quali devi sapere se ce' un determinato carattere?



  • di Salvleotta data: 28/07/2010

    Un insieme di lettere diversamente, avrei potuto utilizzare un =conta.se



  • di Salvleotta data: 29/07/2010

    Per favore, ragazzi, aiutatemi!!!
    salvo



  • di Enzo (utente non iscritto) data: 30/07/2010

    Allega un file di esempio e vediamo che se po fa'



  • di Salvleotta data: 30/07/2010

    Come faccio ad allegare il file attraverso il forum?



  • di Salvleotta data: 30/07/2010

    Ok, file allegato



  • di Albatros54 (utente non iscritto) data: 30/07/2010

    Prova cosi. ti allego il file con la mia udf, deve esere adattata alle tue esigenze
     
    Function Conta_Car(ByVal vSelection As Variant) As Long
    Count = 0
    For Each c In vSelection
    If c = "a" Then
    Count = Count + 1
      End If
    Next
    Conta_Car = Count
    End Function
    



  • di Albatros54 (utente non iscritto) data: 30/07/2010

    Udf modificata.nella cella inserisci =conta_car(d1:d5; "m")dove "d1:d5" è l'intervallo che contiene i tuoi dati ed "m" è il valore da cercato
    ciao
    albatros54
     
    Function Conta_Car(ByVal vSelection As Variant, dato As String) As Long
    Count = 0
    For Each c In vSelection
    If c = dato Then
    Count = Count + 1
      End If
    Next
    Conta_Car = Count
    End Function



  • di Salvleotta data: 30/07/2010

    Ciao albatros54,
    la modifica è certamente una miglioria ma non mi risolve il problema del tutto; non conta i caratteri che cerco se all'interno della cella ve ne sono altri o se nella stessa cella si ripetono + volte; la funzione che ho già inoltrato lo fa. avrei solo la necessità che questa venisse modificata per funzione non nella singola cella ma nella selezione

    function conta_car(dato as string, separatore as string) as string
    dim matrice

    matrice = split(dato, separatore)

    conta_car = ubound(matrice) + 1
    end function



  • di Albatros54 (utente non iscritto) data: 30/07/2010

    Rileggendo bene non avevo capito la tua necessita , forse ora ci siamo.
    fai sapere
    ciao
    albatros54
     
    Function Conta_Car(ByVal vSelection As Variant, dato As String) As Long
    For Each c In vSelection
    ciao = Split(c, dato, , vbTextCompare)
    Conta_Car = Conta_Car + UBound(ciao)
    Next
    End Function



  • di Salvleotta (utente non iscritto) data: 31/07/2010

    Non funge purtroppo!!!
    la formula ammette la selezione adesso ma non conta correttamente.



  • di Albatros54 (utente non iscritto) data: 01/08/2010

    Prova cosi , in questo caso tiene conto delle matrice zero
    ciao
    albatros54
     
    Function Conta_Car(ByVal vSelection As Variant, dato As String) As Long
    For Each c In vSelection
    ciao = Split(c, dato, , vbTextCompare)
    If UBound(ciao) = 0 Or UBound(ciao) = -1 Then
    Conta_Car = Conta_Car
    Else
    Conta_Car = Conta_Car + UBound(ciao)
    End If
    Next
    End Function



  • di Salvleotta data: 01/08/2010

    Funziona!!! grazia albatros, grazie a tutti per la pazienza e per la vs. professionalità
    alla prox
    salvo



  • di Albatros54 (utente non iscritto) data: 01/08/2010

    Grazie a te per il riscontro.
    ciao
    albatros54



  • di Salvleotta data: 02/08/2010

    Sono passato da un *.xlsm da 34 mb ad uno da ~ 950 kb
    salvo