Excel Contar.si + Suma mezclar

Hola,
No se si esto se puede hacer con el excel, pero yo lo pregunto. Imaginen que yo tengo en una hoja celdas del formato "coche:7, coche:2,25, coche:2...". Yo necesito que en una celda de esa hoja se busque todas las celdas con el valor "coche:" y que sume el valor que tiene después de los ":", con lo que en el ejemplo en la celda que tiene la fórmula me aparecería el valor"11,25" que es el sumatorio de "7+2,25+2".
Es como mezclar las sentencias contá.si y suma.
Otro Ejemplo:
Tengo las siguientes celdas por la hoja, pero no se el sitio exacto, que lo mismo es A1, que puede ser b25 o z30. El rango si estará determinado, osea que irán por ejemplo de A1 a z60 y ahí tengo:
- celda b20 = coches:3
- celda h24 = coches:7
- celda z58 = coches:4
- celta c34 = motos:1
- celda h1= motos:1
Yo lo que quiero es que en la celda AA1 (con la fórmula correspondiente) me aparezca 14 (que es la suma de los valores de las celdas que tienen "coches:") y en la celda AB1 (por ejemplo) me aparezca 2 ( que es la suma de los valores de las celdas que tienen "motos:")
La verdad es que no se explicarlo mejor, creo que esta claro, la fórmula sería buscar un determinado texto en un rango de celdas y sumar los valores que vienen después del texto. El formato siempre va a ser "texto:numero". No me Interera separar los datos de la celda en 2 columnas porque van a ser mucho textos y números que sumar.
¿Se puede hacer esto?
Gracias.
Saludos
1

1 respuesta

Respuesta
1
Lo que yo haría es crear una función que realice la suma.
Para ello entra en el editor de Visual Basic (<Alt><F11>) e inserta un módulo (menú insertar - modulo).
Copia este código:
Option Explicit
Function sumarParteCelda(ByVal rangoCeldas As Range, ByVal textoInicio As String)
    Dim i As Integer
    Dim j As Integer
    Dim suma As Double
    Dim aux As String
    textoInicio = UCase$(Trim$(textoInicio))
    suma = 0
    For i = 1 To rangoCeldas.Rows.Count
        For j = 1 To rangoCeldas.Columns.Count
            aux = UCase$(rangoCeldas.Cells(i, j)) ' Cogemos el contenido de la celda
            If Left$(aux, Len(textoInicio) + 1) = textoInicio & ":" Or _
               Left$(aux, Len(textoInicio) + 2) = textoInicio & " :" Then
                ' El contenido empieza por el texto que queremos seguido del
                ' carácter ":" (o con un espacio entre el texto y los dos puntos)
                aux = Trim$(Right$(aux, Len(aux) - Len(textoInicio))) ' Quitamos el texto
                If Left$(aux, 1) = ":" Then aux = Right$(aux, Len(aux) - 1) ' Y los dos puntos
                If IsNumeric(aux) Then suma = suma + CDbl(aux)
            End If
        Next j
    Next i
    sumarParteCelda = suma
End Function
Después sólo tienes que llamar a esa función desde cualquier celda. Por ejemplo, si los datos están entre A1 y A4 pondrías:
        =sumarParteCelda(A1:A4;"coches")
Hola gracias por responder,
Es exactamente lo que me hace falta, pero al crear la función y llamarla desde una celda me da error "Error de nombre no válido" #¿NOMBRE?.
La función se crea bien. La guardo, después me aparece en la barra de fórmulas al llamarla, pero me da error de nombre. ¿La probaste? ¿Te funciona a ti?. Estoy utilizando el excel 2007, pero supongo que eso da igual.
Saludos.
Una cosa también, nos podemos encontrar números con decimales pero eso supongo que dará igual, ej.
- celda b20 = coches:3,1
- celda h24 = coches:7
- celda z58 = coches:4,7
He probado a realizar el rango con números sin decimales y también falla.
Gracias.
Me vas a perdonar, funciona correctisimamente el módulo. Algún formato extraño que tiene la hoja en la cual lo probé por primera vez que hacia que no funcionara, pero probado en una en blanco, funciona Perfecto.
Muchísimas Gracias por todo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas