Fórmula para sumar celdas seleccionadas, contiguas o no

amig@s Tengo esta plantilla la cual quiero meterle una formukla para que me sume SOLO las celdas que yo seleccione, sean contiguas o no y de u en varias columnas

1 Respuesta

Respuesta
2

.07/10/16

Buenas tardes, Joaom

Tal vez, esta rutina basada en el evento de selección resuelva lo que solicitas.

Para que funcione, activa el editor de Visual Basic (presiona Alt+F11) y en el panel de la izquierda busca la hoja donde quieres que esto ocurra. Da doble click sobre ella. (Otra forma de llegar a este punto es hacer click derecho sobre la solapa de esta hoja y elegir la opción "Ver Código)

Allí pega el siguiente código:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
CeldaSuma = "L1" 'indica la celda donde se debe sumar la selección
If IsNumeric(Target.Value) And Target.Address(False, False) <> CeldaSuma Then Range(CeldaSuma).Value = Target.Value + Range(CeldaSuma).Value
End Sub

Sólo debes indicarle la dirección de la celda de la página actual donde quieres el resultado de la suma.

Como no es una fórmula, cada vez que quieras realizar otra suma discontinua, borra el contenido de la celda indicada.

Saludos

Fernando

.

Hola Fernando = fejoal

Gracias por tu aporte, muy bueno se ve yresulta. En prencipio sirve bien. Una sugerencia si se puede:

Si tengo una cantidad ya seleccionada si suma, pero si selecciono la celda de la suma, me dobla la suma, hasta aquí no problema.

¿Se podría hacer algo siempre que seleccione una celda vacía se borre la suma y quede vacía o en 0 (cero Bs 0,00)? algo así de ejemplo =SI(x celda vacia;vacia;suma x celda) (toma lo anterior como ejemplo)

Como puedes observar en la imagen, hay columnas con números y al seleccionar alguna de esas las suma igual; ¿Se puede hacer algo para que solo sume celda con formato moneda? Ej. Bs  2.365,00

Tu me dirás si algo se puede hacer, si no ya esto me ayuda bastante, solo hay que tener cuidado en solo seleccionar celdas con formato moneda, que a eso me refería

.

Hola, Joaom

Pues si, tus sugerencias pueden ser incluidas. Me llama la atención que digas que seleccionando la celda de la suma la duplique. Aquella rutina no hacía la suma si la celda seleccionada era la misma que la de la suma. Recuerda que debes indicarle en qué celda debe sumar.

Usa esta rutina extendida:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
CeldaSuma = "L2" 'indica la celda donde se debe sumar la selección
If Target.Count = 1 Then
    If Target.Value = 0 Then
        Application.EnableEvents = False
            Range(CeldaSuma).ClearContents
        Application.EnableEvents = True
    Else
        If InStr(1, Target.NumberFormat, "Bs") And IsNumeric(Target.Value) And Target.Address(False, False) <> CeldaSuma Then
            Range(CeldaSuma).Value = Target.Value + Range(CeldaSuma).Value
        End If
    End If
End If
End Sub

Esta controla que la hayas seleccionado una sola celda (si seleccionabas un rango daba error), que la celda no esté vacía (si lo estuviera) limpia la celda de suma). Finalmente si la celda tiene un número con formato de moneda bolivariana [Bs] y NO fuera la misma celda de la suma, agrega a aquella ese valor.

Espero que esto sea lo que buscabas.

Un abrazo

Fer

.

fejoal, gracias por tu empeño. Esta no me muestra nada, nada hace seleccionando una por una para que sume; Ctrl+click. La celda que opte por dejar para la suma es N15. La cambie en la macro

Dices: Me llama la atención que digas que seleccionando la celda de la suma la duplique.

Recuerda que debes indicarle en qué celda debe sumar.

La 1ª parte: Si tenia ya una suma (500) en la celda SUMA y seleccionaba la misma celda SUMA que ya me muestra la suma 500, pasaba a mostrarme 1000. Cosa que ahora no me lo hace; QUE BIEN.  No se el motivo ni cual la causa que me lo hice.

La 2ª Si eso entendi, ademas la dejaste con comentario

.

Buenas, de nuevo

Recuerda que sólo tienes que seleccionar la celda a sumar con un click. No es necesario usar Ctrl + Click. Además, de acuerdo a lo que solicitaste sólo suma celdas con formato de moneda. Si no, aunque tuviere un número, no lo suma.

Pruebala con estas consideraciones y coméntame si anduvo.

Saludos

Fer

.

Lo anterior, nada aparece en la celda SUMA, N15 y he probado click en celda con Bs y nada, también no Bs y tampoco.

No quisiera molestarte con esto ya que la anerior funciona, solo que al seleccionar otra celda que no tenga formato de Bs no se vacía la N15 (celda SUMA)

.

Buenas,

Es sumamente curioso, porque probé -antes de enviartelo, claro, y ahora- la misma rutina y funciona como se espera.

Mira esta pantalla, donde le había indicado a la rutina que sumara en N15 y seleccioné las celdas en amarillo:

Como verás, sumó en N15 las que tienen formato Bs y no aquella que carece de ese formato. Desde luego, si hago click en cualquier otra celda en blanco (con o sin formato) limpia la celda N15.

Eventualmente, prueba con esta versión que NO considera el formato (puede ser que tu versión de MS Excel difiera de la mía en le trato de ese formato):

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
CeldaSuma = "L2" 'indica la celda donde se debe sumar la selección
If Target.Count = 1 Then
    If Target.Value = 0 Then
        Application.EnableEvents = False
            Range(CeldaSuma).ClearContents
        Application.EnableEvents = True
    Else
        If IsNumeric(Target.Value) And Target.Address(False, False) <> CeldaSuma Then
            Range(CeldaSuma).Value = Target.Value + Range(CeldaSuma).Value
        End If
    End If
End If
End Sub

Noté que, cuando le doy formato de tu moneda en mi versión, lo escribe distinto. Aunque no debería haber generado problemas eso.

Ojala te funcione bien.

Abrazo

Fer

.

Algo pasa en mi Excel porque ahora en la macro me presenta líneas en rojo, sea en la anterior como en esta misma. Deja que resuelva esto y sigo

.

Si presenta líneas en rojo significa que no están bien escritas.

Te sugiero que copies de nuevo la rutina de esta página, borres la anterior y vuelvas a pegarla, ya sabes, en el modoulo de la hoja donde quieres que este ocurra.

Saludos
Fer

.

La 2ª que me dejas no me funciona, la ultima si

Perfecto

Gracias Fernando por tu tiempo

Tengo un tema que quisiera enviarte el libro, es un tanto más complicado.

Buscare el enlace y te lo dejo a ver si te envío el libro

El tema:  Macro eliminar línea jalando si hay en Pagina2

El enlace: 

Macro eliminar línea jalando si hay en Pagina2 

Macros casi todas fueron facilitaas por el amigo ante Amor

Dime si quieres el libro y tu mail

.

Si la última rutina que te envié (y la primera) funcionaron correctamente, el problema está en cómo reconoce el formato de moneda.

Entonces, habrá que ver cómo define tu equipo el formato de celda de Moneda en Bolívares.

Podrías activar la grabadora de macros que está en el angulo inferior izquierdo de la pantalla de MS Excel:

Y darle formato de moneda a alguna celda de tu archivo. Luego detienes la grabadora (en el mismo lugar anterior verás un cuadrado blanco). Luego vas al editor de Visual Basic, buscas el módulo donde grabó esa instrucción, la copias y la pegas aquí para que vea si es distinta a la pauta que le dí a la segunda rutina.


Respecto a la macro para eliminar linea, no entendí si está resuelta o necesitas alguna ayuda con ella.

En este caso, puedes escríbire a:

Fer

.

Puede ser as{i

_ Bs.* #.##0,00_ ;_ Bs.* -#.##0,00_ ; ;_ @_

Bs. * #.##0,00

_ Bs.* #.##0,00_ ;_ Bs.* -#.##0,00_ ;_ Bs.* "-"??_ ;_ @_

Bs.#.##0,00;[Rojo]Bs.-#.##0,00

o as{i

Bs.* #.##0,00

El asterisco es para mantener separado el signo de los números

Bs. 23.501,00

Según el ancho de la celda. Estoy claro con el funcionamiento de la grabadora, me falta es saber componer lo que graba para poder ejecutarlo bien jejejejjje

Use este personalizado

    Range("E19").Select
    Selection.NumberFormat = "$#,##0.00" pero, no importa ese detalle fernando, com oesta me satisface pero si quieres probar, adelante.

Sobre el tema que te referí, no esta resuelto parece ser que el amigo Dante esta oupado y no ha tenido tiempo para ello porque según hay que estudiar la solicitud para ver si es posible lo que pretendo

.

Me lo imaginaba, pero quería confirmar que el código que se graba, incluía en el texto "Bs"

Porque en aquella segunda versión, yo le había indicado en el condicional:

IF InStr(1, Target.NumberFormat, "Bs") ...

Por lo que si el formato de esa celda contenía Bs daría VERDADERO y tenía que sumarla a la celda indicada.

De hecho yo le dí ese formato a las celdas que usé de prueba (como habrás notado en la imagen) y la rutina funcionaba perfectamente.

Sigo sin entender por qué no lo hacía en la tuya.

Ví que llegó tu archivo a mi mail.

Tal vez mañana pueda darte una respuesta al respecto.

Abrazo

Fer

.

Gracias Fernando. Toma tu tiempo. Si algún tema hay que abrir dímelo

.

Buenas, Joao

Ya te contesté a tu mail. Cierro esta pregunta para que no quede como pendiente.

Abrazo
Fer

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas