Visual Basic para Aplicaciones - Vba en Excel parámetros en funciones

Life is soft - evento anual de software empresarial
 
Vista:

Vba en Excel parámetros en funciones

Publicado por Marcos (2 intervenciones) el 11/02/2019 20:08:15
Buenas Tardes

Estoy tratando de usar la función suma.si en vba, lo que quiero hacer es mirar si en una rango hay una palabra contenida y en tal caso hacer una suma de importes. Por ejemplo lo que quiero es buscar en un rango si alguna celda contiene la palabra RECIBO en tal caso hago la suma de un importe que está en otra columna, de manera que me salga la suma total de todas las celdas que contienen la cadena de texto RECIBO. Buscando como hacerlo he llegado a este código pero me da error y no se dónde está el fallo (soy muy nuevo lo sé...) Si alguien me puede ayudar lo agradezco mil. Gracias

1
2
3
4
5
6
7
8
9
10
11
12
Public Sub cumplimentar()
Dim palabra As String
Dim palabra1 As String
Dim palabra2 As String
 
palabra = InputBox("Palabra a buscar")
palabra1 = "*"
palabra2 = palabra1 & palabra & palabra1
Range("K26").Value = palabra
Range("K27").Value = "=SUM.IF(C4;_palabra2;D4)"
 
End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de MIGUEL
Val: 424
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Vba en Excel parámetros en funciones

Publicado por MIGUEL (121 intervenciones) el 12/02/2019 00:21:45
BUENAS
EL ERROR ES QUE NO LE INDICAS EL RANGO DONDE DEBE BUSCAR LA PALABRA, TAMPOCO LE DAS INSTRUCCIONES PARA COMPARAR LA PALABRA BUSCADA DENTRO DE LA CADENA DE TEXTO, TAMPOCO LE INDICAS QUE EN LA FORMULA LOS RANGOS DE LA FORMA EN QUE LA TIENES SOLO SUMARA LO QUE ENCUENTRE EN D4 Y NO TOMARA EN CUENTA SI HAY MAS REGISTROS QUE COINCIDAN CON EL CRITERIO EN SI TODO TU CODIGO SOLO SIRVE PARA PONER UNA PALABRA EN EL INPUTBOX Y EN LA CELDA K27 PONER EL TEXTO =SUM.IF(C4;_palabra2;D4), PERO NO LO TOMES A MAL NADIE NACE SABIENDO Y AQUI TE DEJO LA AYUDA


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Public Sub cumplimentar()
    Dim palabra As String
    Dim ultFila As Long
    Dim f As Long
    Dim suma As Double
    'LA VARIABLE ULTFILA DEBE DE SER UNA COLUMNA QUE CONTENGA EL MAYOR NUMERO DE FILAS DENTRO DE LOS RANGOS A BUSCAR
    ultFila = Range("A" & Rows.Count).End(xlUp).Row
    'LA VARIABLE F ES SOLO PARA INDICAR DESDE QUE FILA SE EMPEZARA A HACER LA SUMA, YO LA PUSE EN 2 PORQUE ME IMAGINO
    'QUE LA PRIMER FILA ES EL ENCABEZADO DE LOS DATOS Y LOS REGISTROS EMPIEZAN DESDE LA FILA 2, SI NO ES ASI CAMBIALA
    f = 2
    palabra = InputBox("Palabra a buscar")
    Do While f <> ultFila + 1
        ' AQUI SE LE INDICA QUE BUSQUE LA PALABRA INTRODUCIDA SIN IMPORTAR EN QUE PARTE DE LA CADENA DE TEXTO
        ' SE ENCUENTRE MIENTRAS COINCIDAN LOS CARACTERES "LIKE", LA FUNCION UCASE ES PARA QUE NO LE IMPORTE SI
        ' ESTA EN MAYUSCULAS O MINUSCULAS PERO SI TIENE ACENTO LA PALABRA BUSCADA O LA PALABRA EN LA CELDA Y NO
        ' LO PONES, NO LA ENCONTRARA, PARA QUE TE DE LAS PALABRAS CON ACENTO A LA HORA DE ESCRIBIRLA EN EL INPUTBOX
        ' LA SUSTITUYES POR UN "?", POR EJEMPLO LA PALABRA "código" LA PONDRIAS "c?digo" DE ESTA FORMA LE INDICAS
        ' QUE DE POR BUENO CUALQUIER CARACTER QUE SE ENCUENTRE EN LA POCISION DEL SIGNO ?, por ejemplo
        ' cadigo,c-digo,c digo, c.digo,etc...
        If UCase(Range("C" & f)) Like "*" & UCase(palabra) & "*" Then
            suma = suma + Range("D" & f).Value
            f = f + 1
        Else
            f = f + 1
        End If
    Loop
 
    Range("K26") = palabra
    Range("K27") = suma
 
    ' PARA USAR UNA FORMULA EN UNA CELDA DESDE VBA HAY VARIAS FORMAS
    ' PARA SACAR LA FORMULA LOCAL SOLO ESCRIBELA NORMALMENTE EN UNA CELDA DE LA HOJA, LA COPIAS
    ' DESDE LA BARRA DE FORMULAS Y LA PEGAS EN EL CODIGO EN VBA
    ' Range("K27").FormulaLocal = "=SUMAR.SI(C:C,""recibo"",D:D)", la parte que va en texto debe de ir entre comillas
    ' con sus respectivas comillas que indican que es un texto para lo que tu querias hacer era asi
    ' Range("K27").FormulaLocal = "=SUMAR.SI(C:C,""" & palabra & """,D:D)"
End Sub

SALUDOS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Vba en Excel parámetros en funciones

Publicado por Antoni Masana (498 intervenciones) el 12/02/2019 07:39:41
Lo que haces en tu macro, bueno mejor dicho lo que pretendes hacer o supuestamente pretendes es poner una formula en la celda K27.

Como muy bien explica y su ejemplo es muy válido, con la macro haces lo mismo que la fórmula.

Corrigiendo tu código esta seria la forma correcta de hacerlo:
1
2
3
4
5
6
7
8
9
10
11
Public Sub cumplimentar()
    Dim palabra As String
    palabra = InputBox("Palabra a buscar")
    If palabra <> "**" Then
        Range("K26").Value = palabra
        Range("K27").Formula = "=SUMIF(C3,""=*" & palabra & "*"", C4)"
    Else
        Range("K26").Value = ""
        Range("K27").Value = ""
    End If
End Sub


Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Vba en Excel parámetros en funciones

Publicado por Marcos (2 intervenciones) el 12/02/2019 10:10:29
Muchas gracias por la respuesta. En ningún caso me molesto soy un novato y agradezco que me deis la oportunidad de aprender con vuestras enseñanzas.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar