6 febrero, 2025

CONTAR CARACTERES ESPECÍFICOS EN UN RANGO SELECCIONADO

Hola a todos!.

La semana pasada, por diversos motivos, no me fue posible publicar el post habitual. Pero este sábado lo he podido escribir : )

Como sabéis hay varias fórmulas que nos sirven para contar caracteres determinados o específicos en una celda o un rango. Normalmente se suele trabajar con matriciales o combinación de fórmulas, sin embargo, y dado que con VBA podemos crear nuestras propias funciones, os voy a proponer crear nuestra propia fórmula para contar caracteres.

Vamos a imaginar que tenemos un texto, por ejemplo este:

El azafran silvestre o colchicum autumnale
NO ES EL AZAFRAN COMUN
ES UNA planta muy venenosa
que conviene saber identificar

CONTAR CARACTERES ESPECIFICOS EN UN RANGO SELECCIONADO

Y queremos contar el número de letras «m» que existen en todo el rango que en el que he escrito el texto.

Para ello vamos a usar una función que acabo de crear y que he nombrado como CONTARV:

Option Explicit
Public Function CONTARV(ByVal target As Range, ByVal Caracter As Variant)
'Definimos variables
Dim Celda As Range, nCar As Long, i As Long
Dim nCont As String
'Iniciamos primer loop por cada celda en el rango
For Each Celda In target
'Por cada celda recorremos todos los caracteres
For i = Len(Celda) To 1 Step -1
nCont = Mid(Celda, i, 1)
'Si alguno de los caracteres es igual al seleccionado
'lo contamos
If UCase(nCont) = UCase(Caracter) Then
nCar = nCar + 1
End If
Next i
Next Celda
'Pasamos el resultado al valor de la función
CONTARV = nCar
End Function

Según el ejemplo, aquí vemos el resultado:

CONTAR CARACTERES ESPECIFICOS EN UN RANGO SELECCIONADO_1

Como podéis comprobar, la macro nos ha contado el número de letras m en el texto, sean mayúsculas o minúsculas. Esto lo logramos igualando valores con la función UCase()

If UCase(nCont) = UCase(Caracter) Then

Si queréis que el resultado sea sensible a mayúsculas o minúsculas solo tenéis que borrar la función UCase(U).

El código funciona igual para contenido numérico, sin embargo, con el tema de las tildes, se debe especificar si la lleva o no.

Por otra parte, el segundo argumento de la función, en el que indicamos el caracter a contar, se puede especificar en una celda (como lo tenéis en el ejemplo) o en la función (entre comillas, sea número o texto):

=CONTARV(A3:A7;»m»)

Y eso es todo, como habéis visto, nos hemos creado nuestra propia UDF o función definida por el usuario, para solucionar una posible necesidad.

Espero que os haya resultado interesante  🙂

Descarga el archivo de ejemplo pulsando en: CONTAR CARACTERES ESPECÍFICOS EN UN RANGO SELECCIONADO

¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡Muchas gracias!!

Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies

Comparte este post

7 comentarios en «CONTAR CARACTERES ESPECÍFICOS EN UN RANGO SELECCIONADO»

  1. Necesito ayuda para crear una función. Quiero que excel idenrifique un numero x, de una lista de 0 a 9, en cada linea de a1 a a9, y lo coloque de primero en b1. Trasladando los demás a de b2 a b9, y así sucesivamente, ad infinitum.

  2. Hola Segu, excelente información, si quiesiera que contara no un caracter sino un conjunto de caracteres o palabra, por ejemplo, que no no cuente las letras m, sino la palabra maria. Que cambio debería hacer al código?

    Muchas gracias

    1. Hola:

      Así es todavía más sencillo:

      Option Explicit
      Public Function CONTARV(ByVal target As variant, ByVal palabra As Variant)
      Dim Celda, Cont As Long
      Cont = 0
      For Each Celda In Split(target, " ")
      If Celda = palabra Then Cont = Cont + 1
      Next Celda
      CONTARV = Cont
      End Function

  3. ¿Y no sería mas fácil esto?

    nCar = Len(Celda) – Len(Replace(Celda, Caracter, «»))

    y para número palabras:

    nCar = (Len(Celda) – Len(Replace(Celda, Palabra, «»))) / Len(Palabra)

    1. No lo he probado para poder valorarlo, la idea es seleccionar un rango y contar los caracteres. Tendría que ver si se adapta a los requisitos del ejercicio.

      Saludos.

Si te ha gustado o tienes alguna duda, puedes dejar aquí tu comentario.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies