lunes, 7 de septiembre de 2009

Botón con macro en Excel 2007.

Aprendimos en la entrada Creación de macros cuáles eran los pasos a seguir para crear una macro, usando el 'asistente'. Hoy haremos lo mismo, pero desde Excel 2007, para después asignar la macro creada a un Botón generado por nosotros.
En primer lugar deberemos extraer el Menú Programador, donde se encuentran las herramientas que necesitaremos, ejercitando la opción el Botón de Office en Excel 2007. Buscaremos el botón Opciones de Excel y tras pulsarlo, y dentro de las opciones principales para trabajar con Excel marcaremos Mostrar ficha de programador en la 'Cinta de opciones'.


Hecho esto, podemos generar una macro sencilla empleando el asistente para Grabar macro. Por ejemplo, crearemos una macro que introduzca un texto, y luego de color a la fuente y al fondo de la celda.
Posteriormente, también desde el menú Programador, desde Insertar Controles de formulario, elegiremos el control Botón y automáticamente nos desplegará el listado de macros existentes para asociar uno de ellos a este botón.
Veámoslo en un video.


La utilidad de este uso y otros de los Controles de Formulario lo veremos en una entrada posterior.

147 comentarios:

  1. tengo una macro en excel 2007 que la agrego a la barra de herramientas de un libro especifico grabo todo y cierro ... cuando lo vuelvo a abrir la macro ya no esta en la barra de herramientas.... podrias ayudarme con esto ? desde ya muchas gracias

    ResponderEliminar
  2. Hola Juan,
    comprueba los pasos en la entrada adjunta

    http://excelforo.blogspot.com/2009/10/insertar-un-boton-de-macro-en-la-barra.html

    dentro de la etiqueta de Macro. Yo he replicado los pasos y funciona correctamente.
    Coméntame cómo te va...
    Saludos

    ResponderEliminar
  3. Hola a todos
    Les pido si me pueden ayudar, veran soy totamente novato en esto, mas sin embargo estoy en busca de un macro o lo que sea que me haga la vida mas facil, les explico, tengo dos archivos en excel 2007, en uno tengo miles de datos con los cuales yo siempre trabajo, mas sin embargo cada mes recibo otro archivo excel 2007 con los cambios de algunos cientos o miles de datos que tengo que pasar en una nueva columna del primer archivo.
    Aqui el punto es que no todos cambian y los que cambian estan saltados, es decir cambia un solo dato de la fila 20 y el siguiente dato que cambia esta en la fila 524 y la siguiente en la 530 etc. osea no hay un orden.
    Y para pasar dato por dato es muy dificil para mi, pues tengo que hacer copiar el dato a buscar en el primer archivo, buscar en el segundo archivo y ya encontrado copiar los cambios y pegarlos en el primer archivo y asi hasta 1500 veces, me tardo una eternidad.
    Me podrian ayudar, se los agradeceria muchismo

    ResponderEliminar
  4. Muy buenas,
    a mi entender la solución pasaría por emplear un formato condicional; si trabajas con Excel 2007 deberás acceder al Formato condicional y aplicar el formato a los valores duplicados en ambos libros...
    De todas formas, subiré la semana que viene una entrada con una solución a tu problema.
    Saludos

    ResponderEliminar
  5. Gracias Excel, pero no entendi lo que me dices, el formato conidional no lo se usar muy bien pero tengo entendido que necesito ponerle al formato condicional que si no es "X" numero que haga "Y" funcion, pero son cientos de miles de numeros.

    Mejor me espero a que subas la entrada que comentas, que ya lo espero con ansias jaja, pues ya me volvi loco con tantos datos.

    ResponderEliminar
  6. Ya quedó subido una solución al problema de encontrar datos dispares al comparar bases de datos
    http://excelforo.blogspot.com/2009/12/busqueda-de-diferencias-en-una-base-de.html
    espero que te sirva
    Un saludo

    ResponderEliminar
  7. abro mi libro ecxel y no esta hbilitado el boton de macro como lo haboito por q no puedo picarle al boton por lo tanto no puedo grabar

    ResponderEliminar
  8. Muy buenos días,
    tendría que saber si dispones de Excel 2003 o Excel 2007.
    Si tienes Excel 2003 deberás habilitar la barra de herramientass Visual Basic o bien desde el menú Herramientas > Macros.
    Si tienes Excel 2007 deberás activar pulsando el Botón de Office > Opciones de Excel > marcar 'Mostrar ficha Programador en la cinta de opciones.
    Saludos

    ResponderEliminar
  9. para aser bromas ahi va una macro

    que desaparece varias cosas de excel


    Sub ocultar()

    ActiveWindow.DisplayGridlines = False

    ActiveWindow.DisplayHorizontalScrollBar = False

    ActiveWindow.DisplayVerticalScrollBar = False

    ActiveWindow.DisplayWorkbookTabs = False

    Application.DisplayFormulaBar = False

    ActiveWindow.DisplayHeadings = False

    Application.DisplayStatusBar = False


    End Sub

    ResponderEliminar
  10. Hola...
    curiosa macro...
    Muy buena aportación!!!
    Gracias

    ResponderEliminar
  11. Buenas Alguien me puede ayudar, necesito una macro EXCEL 2007, que me lleve el codigo de una tabla(x) de 2 columnas a una tabla (y) de 1 columna, la cual contiene nombres que coinciden con la tabla (y).

    tabla x
    0000001 3M COLOMBIA S.A
    0000002 ABBOTT
    0000003 ACTIVIDADES PESQUERAS S.A
    0000004 ADAMS
    0000005 AGUILA ROJA
    0000006 ALAMAR
    .......

    tabla y
    BEIERSDORF
    FAMILIA SANCELA
    FAMILIA SANCELA
    COLGATE PALMOLIVE
    NACIONAL DE CHOCOLATE
    PROCTER Y GAMBLE
    FAMILIA SANCELA
    FAMILIA SANCELA
    .........

    Desde ya gracias..

    ResponderEliminar
  12. Hola,
    no se ve clara la coincidencia de que hablas entre los nombres de la tabla (y) y los de la tabla (x), respecto al código supongo te refieres a la numeración de la tabla (x)...
    En todo caso para hacer lo que quieres no te hace falta una macro, existen funciones estándar en Excel que te hacen lo mismo...
    echa un vistazo a
    http://excelforo.blogspot.com/2010/03/buscar-en-matrices-la-funcion-indice.html
    o inténtalo con una función BUSCARV.

    Slds

    ResponderEliminar
  13. como puedo hacer desde una hoja excel mediante un boton pedir abrir un archivo txt de ancho fijo y colocarlo en la hoja excel para poder trabajrlo. El tyrabajo que tengo que hacer es que en una sola columna tengo 2 nombres de ciudades de mi localidad y quiero separarlo uno por uno, el problema es que la ciudad puede tener nombre compuestos por ejemplo "SAN FELIPE SAN VICENTE" esto debo de separarlo en una columna cada una.
    Y despues de eso debo de volver a gaenerar el artchivo corregido en txt ancho fijo.

    Gracias por su ayuda, es urgente esta solucion.
    Bruno.
    me podrian escribir a mi correo btornero@dataimagenes.com.pe

    ResponderEliminar
  14. Hola,
    Sería mejor me enviaras un ejemplo del fichero .txt a excelforo@gmail.com
    Te adelanto que abrir el fichero txt, mediante un botón es sencillo; el problema efectivamente vendrá a la hora de trabajar de manera automática sobre él (aunque manualmente se puede con la herramienta Texto en columnas
    http://excelforo.blogspot.com/2010/02/texto-en-columnas.html
    seguro la conoces)
    Igualmente sería sencillo agregarle un botón para guardarlo ya corregido.
    Slds

    ResponderEliminar
  15. estas guenasos los egemplo de esta paj aca un salido a lo guasos q visitan la pagina de parte de ponce y cragnolini de colejio del huerto jesus maria cordoba aguante la lbc cheee ....bay

    ResponderEliminar
  16. buenas, tengo conocimientos de excel basico, quiero aprender a utlizar macros con visual , me podrias recomendar alguna pagina en la cual pueda aprender, oh un manual para descargar, oh aplicaciones...gracias

    ResponderEliminar
  17. Hola,
    no sabría indicarte, la verdad es que hay muchas, pero si buscas en scrib.com 'macros excel' te saldrán algunos manuales que te pueden servir para empezar...
    Además busca en google foros de macros en excel donde seguro te ayudarán en dudas concretas.
    Yo poco te puedo decir respecto a este punto por que soy un principiante en este tema.
    Suerte

    ResponderEliminar
  18. no se entiende ke se hace cuando quitas la celda de la macros y pones el boton, por una parte dices ke "borrar la celda" pero no dices como ya que aparece como si estuvieras cortando o copiando el dato. saludos

    ResponderEliminar
  19. Hola Teo,
    en este ejemplo sólo pretendo enseñar cómo generar un botón, y no como editar el código de una macro (para esto he subido algún otro ejemplo).
    La idea es asignar cualquier macro a un botón.
    Slds

    ResponderEliminar
  20. Hola,

    tengo un libro excel con 25 hojas. En cada una de esas hojas hay datos de análisis químicos de diferentes lugares y también tengo una hoja en la que se recogen todos esos análisis (sería como una hoja "resumen").
    Como recibo datos quincenalmente, me gustaría introducir una macro para que cuando meta un nuevo análisis en alguna de las hojas, automáticamente se copie y peque en la hoja "resumen".

    Estaría muy agradecida si alguien me pudiera indicar como conseguirlo.

    Muchas gracias,

    ResponderEliminar
  21. María,
    creo que la mejor opción sería optar por configurar una tabla dinámica de rangos múltiples de consolidación
    http://excelforo.blogspot.com/2010/05/rangos-de-consolidacion-multiples.html
    donde recoger todas las adiciones de datos en algunas o todas las hojas de trabajo, aprovechando los 'rangos dinámicos'.
    También podrías optar por combinar las Listas o Tablas como origenes de datos con una única Tabla dinámica.
    Otra opción, antes de optar por las macros (no creo que aporten nada especial a tu trabajo) sería la opción de 'Consolidar'
    Hace tiempo subí una macro que realizaba en parte lo que quieres.
    http://excelforo.blogspot.com/2009/10/macro-para-agrupar-datos-de-diferentes.html

    Espero te sirva alguna de las ideas... si no es así ponte en contacto en
    excelforo@gmail.com

    Slds

    ResponderEliminar
  22. Hola,

    muchas gracias por todas las opciones. Voy a probarlas y si tengo algún problema o duda, escribiré al correo.

    muchas gracias de nuevo.

    Un saludo,

    ResponderEliminar
  23. hola:
    necesito informacion acerca de como puedo ingresar u obtener el formulario para hacer que una macro sea transparente.


    por favor ayudenme en este caso..

    Gracias

    ResponderEliminar
  24. ¿¿hacer que una macro sea transparente??...
    Podrías aclarar este punto.
    Gracias

    ResponderEliminar
  25. Hola que tal

    Requiero su ayuda para lograr lo siguiente: quiero trasladar los datos de una celda a otra de manera programada cada 52 días, mas que nada es mover el día de descanso de una persona un día antes, si el descanso hoy lo tiene en martes, que de manera automática en 52 días sea en lunes.

    Copio dos lineas de una amplia lista de empleados que se maneja en la empresa., el tema es hacerlo de manera automática con cada empleado. ya que de manera manual es un problema. Los datos deben ser respetados o sustituir a los otros.

    Hoy
    L M Mi J V S D
    3 2 2 1 1 D 3

    1 D 3 3 2 2 1

    Contando en 52 dias

    L M Mi J V S D
    2 2 1 1 D 3 3

    D 3 3 2 2 1 1

    ESPERO SU GRAN AYUDA, GRACIAS DE ANTEMANO. SALUDOS

    ResponderEliminar
  26. No termino de ver tu problema, ya que no se si pretendes que varíe automáticamente sobre las mismas celdas o sobre otras.
    ¿Podrías enviarme el fichero resumido a
    excelforo@gmail.com??

    Gracias

    ResponderEliminar
  27. Hola, estoy haciendo un cuadro para calcular viaticos:
    se divide en: nivel1,nivel2,nivel3
    cada nivel tiene 2 zonas a y b, de ello depende el valor a pagar.
    nivel 1 zona a = $130
    nivel 1 zona b = $100
    nivel 2 zona a = $100
    nivel 2 zona b = $80 etc
    el pago se divide en horas de
    4a6 se paga el 25%
    6a8 se paga el 50%
    si pernoctan el 100%
    Lo que quiero es q al momento de calcular las horas y habiendo puesto el nivel y la zona, automáticamente me salga el valor a pagar

    ResponderEliminar
  28. Hola Pharaoh,
    para solucionar tu problema deberás anidar, por ejemplo, varias funciones SI condicionales:
    =SI(nivel=1;SI(zona="a";SI(Y(horas>=4;horas<6;130*0,25;etc))))

    o bien contruir una función personalizada
    http://excelforo.blogspot.com/2010/04/select-case-anidado.html
    Si no ves claro cómo emplearlo, envíame un ejemplo a
    excelforo@gmail.com
    Slds

    ResponderEliminar
  29. Gracias, ahora lo que necesito es que cuando sobrepase las 8 horas siga saliendo el resultado de 6 a 8
    excelente página!!!

    ResponderEliminar
  30. Hola de nuevo.
    se hace complicado seguirte si envías preguntas por email y vía comentarios sobre la misma cuestión.
    Revisa el fichero que te adjunté, realmente la estructura de lo que quieres ya está definida, sólo necesitas una ligera modificación de una de los argumentos de tu función SI anidada.
    Slds

    ResponderEliminar
  31. buenos días

    alguien me podría rsponder la siguiente duda?
    he realizado una macro que realiza unos cálculos en una hoja de mi archivo excel, en ese mismo archivo hay diversas hojas
    he creado un boton que ejecute esa macro,
    el problema es que quiero poner otro botón idéntico en la última hoja donde de muestran todos los resultados, pero si copio el botón y lo pego en otra hoja no ejecuta la macro, o por lo menos no se realizan los cálculos
    Muchas gracias

    ResponderEliminar
  32. Tengo un formulario como este, donde copia de la hoja1(WPR)las filas donde la aprobadas es =9.

    Private Sub CommandButton1_Click()

    Dim reclamacion As Double
    Dim clain As Double
    Dim importe As Double
    Dim aprobada As Double



    For i = 2 To 425

    reclamacion = Cells(i, 1)
    clain = Cells(i, 2)
    importe = Cells(i, 3)
    aprobada = Cells(i, 4)


    If aprobada = "9" Then
    Sheets("APROBADAS").Select

    Cells(i, 1) = reclamacion
    Cells(i, 2) = clain
    Cells(i, 3) = importe
    Cells(i, 4) = aprobada
    Sheets("WPR").Select
    End If
    Next i
    End Sub

    Lo que necesito es que las filas que copia en la hoja2(APROBADAS)las coloque una debajo de otra en la fila a13 de la hoja 2, ya que tal y como lo tengo las envia a la hoja 2 en la posicion que estan en la hoja 1.-

    Muchas gracias

    ResponderEliminar
  33. Hola, buenas tardes,
    respecto al copiado de un botón con una macro asignada en diferentes hojas, deberías por revisar que las referencias de la macro sean absolutas y no relativas, quiero decir, quizá la macro creada se refiera exclusivamente a datos de la Hoja1...
    En principio, si copias el botón con macro, se ejecuta de igual forma esté donde esté.
    Coméntame cómo lo ves.
    Slds

    ResponderEliminar
  34. Hola Marcos,
    creo que complicas demasiado la operación, ya que realmente lo que quieres es que se recojan sólo aquellas filas o registros donde el cuarto campo ('aprobada') cumpla un criterio (sea igual a 9); esto es, quieres aplicar un filtro sobre una base de datos.
    Por lo que tienes dos opciones aplciar un filtro normal (sin emplear código) o bien aplicar un filtro avanzado sobre la base de datos.
    Puedes construir una macro parecida a esta, donde realizará lo que quieras
    http://excelforo.blogspot.com/2009/10/macro-de-un-filtro-avanzado-en-excel.html
    filtrarás la base de datos que tengas (de 425 registros) y copiaras sólo los registros que cumplen la condición de aprobada = 9 donde tu quieras (desde la fila 13, por ejemplo).
    Slds

    ResponderEliminar
  35. TEMA DEL BOTON MACRO

    Muchas gracias por la ayuda, peor no entiendo lo de relativas...
    Mi macro es la siguiente (que esta en una hoja llamada 'Instantaneous losses'

    Sub SolverMacro()
    SolverReset
    SolverOk SetCell:="'Instantaneous losses'
    K40", _
    MaxMinVal:=3, _
    ValueOf:="0", _
    ByChange:="='Instantaneous losses'!J40"
    SolverSolve userFinish:=True
    End Sub

    Y asigno un boton a esa macro en esa misma hoja y funciona perfecto,

    pero yo quiero poner ese mismo boton en otra hoja llamada 'Final Results' para que cada vez que modifica algo que afecte a las celdas que emplea dicha macro no tenga que volver a la hoja
    'Instantaneous losses' y pulsar el boton

    No se si me he explicado correctamente, muchas gracias

    ResponderEliminar
  36. Hola,
    efectivamente tu macro apunta siempre a la hoja 'Instantaneous losses', es por tanto una referencia absoluta, esto es, siempre estés en la hoja que estés, siempre ejecutará sobre la hoja mencionada.
    Prueba cambiando:
    Instantaneous losses'!K40 por Activesheet.range("K40")
    y
    Instantaneous losses'!J40 por
    Activesheet.range("J40")

    De todas formas te comento que en general la ejecución de macros sobre Solver siempre son problemáticas...
    Slds

    ResponderEliminar
  37. Hola ExcelForo:

    Agradeceré si iluminas a este humilde "a lumni".
    Requiero hacer un formulario de tamaño A4 o Letter y que no se vean las líneas de división. Debo colorearlo en sus divisiones y contendrá varios ComboBox para ser llenados por el usuario.
    Favor tus indicaciones para mejor comienzo.

    Gracias.

    Anónimo

    ResponderEliminar
  38. Entiendo que por formulario quieres decir plantilla de datos; por lo que para diseñarlo y poder imprimirlo en tamaño A4 o Letter sólo deberás diseñar los diferentes campos y configurar el área de impresión a alguno de esos tamaños; desde la Ficha Diseño de página > Grupo Configurar página > Pestaña Página > Tamaño papel A4 (o Letter).
    Para que no te aparezcan lass líneas de división desde Diseño página > Opciones hoja > Líneas de la cuadrícula (desmarcada).
    Los distintos combobox los incluirias donde mejor consideraras.
    Slds

    ResponderEliminar
  39. Gracias por anticipado a quien me pueda ayudar:
    Tengo un libro con macros y necesito hacer un acceso directo para abrirlo sin tener que pasar por toda la rutina de aceptar abrirlo.

    Cómo puedo hacerlo?
    Muchas gracias

    Apa

    ResponderEliminar
  40. Hola,
    el problema que planteas es complicado, ya que el paso de aceptar abrir el fichero con macro, con la seguridad habilitada, es un proceso necesario para Excel. La opción que tendrías (y no se recomienda) es dejar la Seguridad de macros sin activar, de esta forma abrirías tus ficheros sin solicitud de confirmación... pero dejas abierta la puerta a cualquier fichero externo, con la posibilidad de virus...
    Saludos

    ResponderEliminar
  41. hola,hay alguien que me auxilie, estoy tratando de hacer un programa que calcule los dias de vacaciones de una persona que descansa dos dias en la semana (mar. mier.)sin contar estos y tomara 15 dias de descanso, que me diga el dia que debe presentarse al termino de estos.

    ResponderEliminar
  42. Hola,
    parece que lo que quieres es conocer el día de reincorporación al trabajo de una persona con unas vacaciones de 15 días, sin contar martes y miércoles, conociendo el primer día de vacaciones de dicha persona.
    Para eso podríamos crear la siguiente función personalizada:

    Function fechareincorporacion(fechainicio As Date)
    Dim dsemana As Date
    vacaciones = 15
    d = 0
    x = 1
    Do
    dsemana = Application.WorksheetFunction.Weekday(fechainicio + d, 2)
    If dsemana = 2 Or dsemana = 3 Then
    x = x + 0
    Else: x = x + 1
    End If
    d = d + 1
    Loop Until x = 15
    If Application.WorksheetFunction.Weekday(fechainicio + d, 2) = 2 Or Application.WorksheetFunction.Weekday(fechainicio + d, 2) = 3 Then
    fechareincorporacion = fechainicio + d + 2
    Else
    fechareincorporacion = fechainicio + d
    End If
    End Function


    Puébalo y me cuentas si te sirve... El código lo tienes que copiar en un módulo del editor de VBA de tu hoja de cálculo.
    De todas formas subiré en cuanto pueda un post explicando la función.
    Slds

    ResponderEliminar
  43. Hola a todos.

    Necesito vuestra ayuda con el siguiente macro y es que funciona sólo para una celda, pero yo necesito que funcione para un rango seleccionado de celdas.

    Les agradezco por anticipado vuestra valiosa ayuda.

    Function Variacion()
    x = Range("G9").Value
    If x <= -3.1 Then
    Range("H9").Value = "B.N"
    Else
    If x < 0.5 And x < -3.1 Then
    Range("H9").Value = "E.B"
    Else
    If x >= -0.5 And x <= 0.5 Then
    Range("H9").Value = "E"
    Else
    If x >= 0.5 And x < 3.1 Then
    Range("H9").Value = "E.A"
    Else
    If x >= 3.1 Then
    Range("H9").Value = "A.N"
    Else
    Range("H9").Value = ""
    End If
    End If
    End If
    End If
    End If
    End Function

    Muchas gracias.

    ResponderEliminar
  44. Hola Manuel,
    lo que buscas se puede hacer con el código: FOR EACH...NEXT
    Puedes ver como funciona en:
    http://excelforo.blogspot.com/2010/11/vba-for-each-next.html
    Basicamente tus condiciones IF serían las mismas...
    Un saludo

    ResponderEliminar
  45. Favor: tengo un archivo en excel 2007 con mas de 100000 filas, necesito grabarlo en 2003 sin perder ningun dato ya que esos me sirven para realizar un vloockup, no debe faltar ni uno.
    auxilioooooo urgenteeeee
    gracias

    oki

    ResponderEliminar
  46. Hola,
    pues lo primero que tendrás que hacer es partir tu listado en dos, ya que como sabemos cada hoja de Excel 2003 sólo llega hasta las 65.000 y pico filas.
    Supongamos que partimos tu listado en dos hojas con 50.000 datos en cada hoja (Hoja1 y Hoja2).
    Como quieres realizar un BUSCARV deberás modificar y adaptarlo a la nueva situación, mi propuesta sería si el elemento buscado estuviera en G1:
    =SI(ESERROR(BUSCARV(G1;A:B;2;0));SI(ESERROR(BUSCARV(G1;Hoja2!A:B;2;0));"FALTA ELEMENTO";BUSCARV(G1;Hoja2!A:B;2;0));BUSCARV(G1;A:B;2;0))
    Espero te sea de utilidad.
    Slds

    ResponderEliminar
  47. ---- Hola mi nombre es Oki, en mayo 17, 2011 , solicite la siguiente ayuda:

    mayo 17, 2011
    Anónimo dijo...

    Favor: tengo un archivo en excel 2007 con mas de 100000 filas, necesito grabarlo en 2003 sin perder ningun dato ya que esos me sirven para realizar un vloockup, no debe faltar ni uno.
    auxilioooooo urgenteeeee
    gracias

    oki
    mayo 17, 2011

    ---- A lo que uds me respondieron:

    ExcelForo dijo...

    Hola,
    pues lo primero que tendrás que hacer es partir tu listado en dos, ya que como sabemos cada hoja de Excel 2003 sólo llega hasta las 65.000 y pico filas.
    Supongamos que partimos tu listado en dos hojas con 50.000 datos en cada hoja (Hoja1 y Hoja2).
    Como quieres realizar un BUSCARV deberás modificar y adaptarlo a la nueva situación, mi propuesta sería si el elemento buscado estuviera en G1:
    =SI(ESERROR(BUSCARV(G1;A:B;2;0));SI(ESERROR(BUSCARV(G1;Hoja2!A:B;2;0));"FALTA ELEMENTO";BUSCARV(G1;Hoja2!A:B;2;0));BUSCARV(G1;A:B;2;0))
    Espero te sea de utilidad.
    Slds

    ---- Realmente buenisima la sugerencia, la puse en practica en una sola hoja pero en diferentes columnas y funciona con la formula que me dieron Uds modificandola un poquito, realiza la busqueda y todo bien, pero como es una busqueda laaaarguisima tarda una eternidad.

    ---- Podrian tal vez sugerirme algo para que apure dicha busqueda y no tarde una eternidad cada q meta un dato y busque?.

    Muchas Gracias y Saludos.

    Ah y perdon no se donde calificarlos,pero uds se merecen 100 puntos.

    Gracias nuevamente

    ResponderEliminar
  48. Hola Oki,
    probablemente una macro resolviera el problema de tiempo...
    Buscaré una solución y la colgaré en el blog.
    Un saludo

    P.D.: muchas gracias por tu palabras de apoyo a mi pequeña contribución personal.

    ResponderEliminar
  49. Hola nuevamente,acudo a Uds. por que son realmente buenisimos en darnos soluciones a nuestros problemas.
    Les molesto ahora con otro problemilla: Tengo la lista enorme que he metido (mas de 8000 datos), resulta que en la lista hay datos duplicados, triplicados e incluso tal vez mas, lo que debo hacer ahora es revisar si cada dato tiene su duplicado o mas y sumar la cantidad que tuviera dicho dato, ejm
    1S-2345 4
    1J-4577 8
    1S-2345 2
    5R-7865 1
    1S-2345 1

    En este caso 1S-2345 es el dato que se repite, pero en una lista de 8000 pudiera estar en cualquier lugar de la lista, como veran hay que buscar en toda la lista y sumar no se tal vez en otro lugar sus cantidades que se encuentran en otra columna, luego devolver el mismo dato con el total de sus cantidades, en este caso 1S-2345 tendria 7, luego deberia borrar los otros datos duplicados.
    Por favor les ruego me ayuden urgentemente con esta situación, se que se debe hacer una macro y cargarlos en vectores, pero soy tan nuevo en esto que lo de vectores todavia no me entra, Gracias nuevamente y felicidades por todos sus aportes.
    auxilioooooo

    ResponderEliminar
  50. Hola Oki,
    no veo necesario aplicar macros, ya que con la herramienta estándar de Tablas dinámicas obtendríamos lo que quieres.
    Se trata de generar una TD sobre esas dos columnas de 8000 registros, llevarnos el campo 'código' - primera columna- al área de filas, y el campo 'número' - segunda columna al área de datos, resumido por suma.
    Con esto conseguirías una tabla con los 'códigos' únicos (sin repetir) y al lado la suma acumulada del listado original para cada 'código'.
    Espero te sirva.
    Un saludo

    ResponderEliminar
  51. Hola buen día y gracias por la sugerencia, pero una TD me limita a no poder modificar los datos y lo que necesito es hacer lo anterior en la misma tabla, es decir unificar los datos repetidos sumando sus cantidades, para que cuando luego haga una busqueda mediante un formulario me muestre el unico dato con su total existente, en si el trabajo es para un pequeño almacen de donde tengo que buscar, si existe sacar algo, pero para eso no debe haber duplicados, sino el total de algo.
    De todas maneras gracias por la sugerencia me servirá para otras circunstancias, pero haber si pueden ayudarme con la situación anterior que les pedi.
    Muchas gracias nuevamente

    ResponderEliminar
  52. Hola probe lo de la tabla dinamica, y me funciono, una vez que unio todos los datos duplicados y sumo sus cantidades, lo copie como valor en los datos oficiales sin necesidad de hacer macros como me dijeron.
    Realmente Uds. son excelente ayuda (digo Uds. o solo Ud.).
    Muchas gracias nuvamente, felicidades y sigan adelante.

    ResponderEliminar
  53. sabes yo se lenguaje java, y en mi trabajo necesito utilizar mucho el excel así que el lenguaje java se me queda poco servible; como necesitaba aprender a crear funciones en las que se utilizaran ciclos,necesitaba aprender a crear macros, y tu pagina me ha sido de gran utilidad gracias

    ResponderEliminar
  54. ademas aprendi a traducir de lenguaje java a c++.

    ResponderEliminar
  55. Hola Norman,
    me alegro que mis pequeños apuntes de VBA te sirvieran de algo, la verdad es que por lo que sé, la estrucutura de programación es similar en todos los lenguajes, y que se diferencian principalmente en las instrucciones del código en concreto.
    Un saludo y suerte!!

    ResponderEliminar
  56. Hola soy Oki nuevamente, lei el comentario anterior y me parece fabulosa la utilidad que le dan muchos a sus enseñanzas prácticas, me gustaria aprender a hacer programas macros y mas que todo aprender estructuras de programación con macros en excel, quisiera pedirles por favor puedan facilitarme algunos ejemplos de pequeños programas y lo que hacen especialmente trabajando con listas, valores y matrices.
    Gracias

    ResponderEliminar
  57. Hola amigo Oki,
    la verdad es que el mundo de la programación es interminable, yo mismo estoy empezando a adentrarme en él... lo que voy descubriendo lo voy colgando en el blog para compartirlo.
    Lo tendré en cuenta y los nuevos post intentaré orientarlo hacia la temática que comentas... mientras podrías revisar la categoría de Macros.
    Un saludo

    ResponderEliminar
  58. Hola amigo me puedes ayudar a hacer un control de medicamentos controlados son como 200 y me lo exigen llevar un control de entrdas y saludas que me recomiendas

    ResponderEliminar
  59. Hola,
    sin tener más datos, y por intentar ayudar, te diría que llevaras un control de entradas y salidas por medicamento, en tablas distintas, y en una tercera resumieras sumando y restando por cad medicamento el stock restante...
    Poco más te puede decir con los datos que aportas.
    Slds

    ResponderEliminar
  60. Hola, ocupo crear un botón en excel, que cuando yo presione el botón el automáticamente me mande a imprimir la hoja de excel

    ResponderEliminar
  61. Hola Adrían,
    para crear una macro tan sencilla como es imprimir una hoja te recomiendo que emplees el asistente para macros, y que una vez creada simplemente sigas los pasos de este mismo post para asignar la macro a un botón, como quieres...

    Espero te sirva.
    Slds

    ResponderEliminar
  62. o0la, como puedo relacionar una hoja de excel con otra utilizando macros

    ResponderEliminar
  63. como puedo copiar unas formulas sin que se pierdan .

    ResponderEliminar
    Respuestas
    1. Hola,
      para copiar fórmulas, deberás seleccionar primero la celda que contenga dicha fórmula, y luego seleccionar la celda destino y Pegar especial > Fórmulas.
      Un saludo

      Eliminar
  64. Hola. Necesito hacer un macro donde me calcule volumenes de unos silos, donde conozco las dimensiones da la altura y todos los datos del contenido de éste silo. Lo que varían son las alturas del contenido de éstos contenedores, y que serían los datos que debería ingresar al macro.

    Además, quisiera agregarle más dinámica al macro, viendo si existe la posibilidad de representar con un dibujo éste silo con alguna especie de línea que me determine una altura del contenido.

    Siendo así, y comento que soy nuevo en ésto (en macros), ¿hay alguna forma en la que me puedan orientar?, algún buen tutorial, tanto de la misma programación de los cálculos (básicos) que debiera hacer, de cómo quede con estética alguna interfaz donde se deba ingresar los datos de medidas de altura (de los cuales se debe sacar un promedio), de cómo dibujar... etc.

    Muchas gracias. :)

    ResponderEliminar
    Respuestas
    1. Hola, por lo que leo, no creo necesario trabajar con macros, ya que según dices se trata sólo de calcular unos volumenes, esto es, de una fórmula tipo base por altura; datos que entiendo tendrás desplegados en alguna tabla.
      El asociar un gráfico que represente la altura sería lo más sencillo, bien con un gráfico de columnas, o incluso con los minigráficos de Excel 2010 (si es que trabajas con esta versión).
      Buenos tutoriales de VBA los hay, pero tendrías que buscar por la web.. es siempre más recomendable navegar y preguntar por foros o blogs.
      En resumen, te recomiendo plantees fórmulas, es más sencillo y rápido.
      Slds

      Eliminar
  65. Buenas

    No he podio agradecer vuestra ayuda en el link 'responder'. Por eso lo hago desde éste otro comentario. Gracias 'ExcelForo' por la respuesta. Pues tengo solucionado el problema de los silos, y ya he avanzado bastante teoricamente. Sólo he quedado 'pegado' en una duda.

    Resulta que la macro toma valores ingresados, los cuales son sumados para cumplir un sierto estandar en las mediciones (el resultado queda en números decimales). Cuando quiero sacar el promedio entre varios números decimales, al hacer la suma de éstos da como resultado un número entero (y necesito que me de el número exacto, NO aproximado) el cual es dividido por el total de números; un promedio, jeje.

    Básicamente mi duda es, ¿cómo hago para que la macro tome siempre los valores exactos en cálculos dentro de la misma macro?, ¿y no aproxime valores?...

    Agradezco tu tiempo y, disculparme si he posteado en un lado que no vaya con la pregunta.

    Saludos.

    ResponderEliminar
    Respuestas
    1. Hola de nuevo... me alegro te sirviera de algo mi consejo anterior.
      Sin ver tu macro es dificil decir algo, pero supongo que la cuestión está en la definición que hayas realizado dentro de tu código de las variables, quizá tipo Integer o Long ???, prueba con tipo Double (aunque es un tipo de varibale que consume más memoria del equipo).
      Un saludo

      Eliminar
  66. Hola, necesito crear una macro que abra un archivo de texto en la cual su nombre sea ingresado en una celda.
    Agradecere mucho su ayuda.

    Atte.
    ED:xcell

    ResponderEliminar
    Respuestas
    1. Hola ED:xcell,
      el código para abrir desde Excel un fichero tipo texto podría ser algo asi:
      Sub AbrirFileText()
      Dim NombreArchivo
      NombreArchivo = Application.GetOpenFilename
      If NombreArchivo = False Then Exit Sub
      Workbooks.OpenText Filename:=NombreArchivo, Origin:=xlWindows, _
      StartRow:=1, FieldInfo:=Array(1, 1)
      End sub


      Este abrirá un explorador para que indiques dónde está el fichero de texto...
      Slds

      Eliminar
  67. Hola.. Tengo un problema con una macro, me funciona en windows XP pero no funciona en Windows 7.

    Cual podria ser el problema??

    el error que muestra es el siguiente:

    Se ha producido el error '75' en tiempo de ejecucion

    ResponderEliminar
    Respuestas
    1. Hola Frank,
      en principio, salvo que estés utilizando en tu macro algún tipo de objeto muy especificio de Windows XP, no tendría que darte ningún problema.. y más cuando has cambiado a una versión superior de Windows.
      En todo caso, hasta donde sé, las incompatibilidades de VBA salen en los cambios de Office, y no tanto en Windows.
      Siento no poder ayudarte más.
      Un saludo y suerte

      Eliminar
  68. Hola Frank,

    Estoy coiando un rango de celdas ha otra hoja con una macro. En el punto que selecciona el rango en la segunda hoja se bloquea la macro.
    Esto se ejecuta con un botón en la primera hoja.
    Cual es el error?

    Private Sub CommandButton1_Click()
    '
    ' Macro1 Macro
    '

    '
    Range("B5:D36").Select
    Selection.Copy
    Sheets("Hoja3").Select
    Range("E2").Select
    ActiveSheet.Paste
    Range("A1").Select
    End Sub

    ResponderEliminar
    Respuestas
    1. Hola,
      si lo que queres es copiar y pegar valores de celdas en otras partes de tu Libro de trabajo, revisa primero esta entrada:
      http://excelforo.blogspot.com.es/2011/02/vba-formas-de-copiar-rangos-o-celdas.html
      Si sigues teniendo problemas házmelo saber.
      Slds
      P.D.: por cierto, quien es Frank??

      Eliminar
  69. hOLA NECESITO UN GRAN FAVOR, TENGO UNA COLUMNA CON CIERTOS DATOS Y REQUIERO ME MARQUE LA CELDA DE AMARILLO CUANDO SE DUPLIQUE Y DE ROJO CUANDO DICHO VALOR SE TRIPLIQUE, YA PUDE PONER EL DUPLICADO PERO NO SE COMO HACER PARA PONER EL TRIPLICADO.....MUCHAS GRACIAS, ESPERO SU RESPUESTA.

    ResponderEliminar
    Respuestas
    1. Hola,
      en esta entrada se explica cómo poder localizar los valores duplicados mediante una fórmula con el Formato condicional:
      http://excelforo.blogspot.com.es/2009/06/formato-condicional-con-formula.html
      esta fórmula modificada y adaptada a tu caso, servirá también para localizar los triplicados... (contar.si > 2)
      Un saludo

      Eliminar
  70. Hola,

    Quiero borrar todo el texto que está fuera de las comillas inclullendo estas y conservar el que está dentro con un reemplazar.

    MarkingTextBegin = 25, "14Q5:4", 1

    Como podría hacerlo?

    ResponderEliminar
    Respuestas
    1. Hola,
      supongo que estás hablando de hacerlo con funciones en la Hoja de cálculo...
      lo que ocurre es que con un REEMPLZAZAR se puede complicar bastante. Sería mucho más sencillo con una función EXTRAE
      =EXTRAE(A1;ENCONTRAR(CARACTER(34);A1)+1;6)
      siendo CARACTER(34) las comillas.
      Espero haberte orientado.
      Slds

      Eliminar
  71. buenas necito cargar datos en una planilla exel y luego con esos datos generar un archivo de texto, pense en utilizar una macro(con codigo en visual levantar los datos de la planilla, darle formato y crear el archivo). El caso es que no puedo crear el archivo y no se si es por un tema de librerias o que. Si me podrian ayudar seria de mucha ayuda. Gracias

    ResponderEliminar
    Respuestas
    1. Hola,
      quizá te pueda orientar lo publicado en esta entrada:
      http://excelforo.blogspot.com.es/2010/05/macro-para-guardar-como-texto.html
      Con algunas modificaciones podrías construir tu macro.
      Siento no poder ayudarte más, pero con los datos tan generales que aportas es complicado.
      Slds

      Eliminar
  72. Hola podrían apoyarme con una macro que tengo que importar información de un txt al excel y que se coloque en columnas de la A hasta la M, me ayudarían un montón.
    Gracias por tu tiempo, saludos cordiales
    Atte.
    Luiggi

    ResponderEliminar
    Respuestas
    1. Hola Luiggi,
      bueno para realizar una importación a Excel desde un fichero texto, puedes emplear este código:
      Sub ImportarDatosTexto()
      Open "C:\ArchivoTexto.txt" For Input As #1
      r = 0
      Do Until EOF(1)
      Line Input #1, Data
      ActiveCell.Offset(r, 0) = Data
      r = r + 1
      Loop
      Close #1
      End Sub

      con esta macro importas fila a fila los datos del fichero texto, independientemente de las columnas que tenga, en una sóla celda!!!, separando cada columna con algún caracter especial.
      Lo bueno es que de esta forma, con un código sencillo, luego es fácil tratar la información con el Asistente de Texto en columnas...
      El código para que la macro realice la separación por columnas es algo más complejo.

      Espero te sirva.
      Slds

      Eliminar
  73. bueno necesito ayuda en macros alguien me ayude es para mañana
    la preguntas son estas
    4.- Realizar una macro que permita llenar los datos para el servicio de identificacion(ci) y luego que sealmacene en una hoja llamada registro (REalizar el formulario con listas))
    5.- REalizar un formulario que permita capturar una transaccion finanaciera, una vez capturada determinar su itf
    6.- Realizar un formulario que permita transformar una temperatura en centigrados a grados farenheit y kelvin
    les agradeceria alguien q me pueda ayudar
    7.- Realizar un formulario que permita capturar los datos de una inscripcion de materias
    8.- Realizar un formulario que permita determinar el menor de cuatro salarios que se encuentran elas celdas (a1:a4)


    ResponderEliminar
  74. BUENAS TARDES... TENGO UN BOTON EN EXCEL CON UNA MACRO Y QUIERO QUE DICHO BOTON SEA TRASPARENTE... Y NO SE COMO HACERLO... ALGUIEN ME PUEDE AYUDAR...

    ResponderEliminar
    Respuestas
    1. Hola Willian David,
      entiendo que el botón es un Control de formulario...
      si es este el caso, no podrás formatearlo como pides. Sin embargo, en su lugar puedes insertar una autoforma de tipo rectángulo (por ejemplo) y desde formato de forma configurarla Sin relleno; igualmente podráss posteriormente asignarle una macro, con idéntica funcionalidad.

      Un saludo

      P.D.: por favor, evita escribir en mayúsculas... significa que estás gritando ;-)

      Eliminar
  75. christian.acero.guillen@gmail.comseptiembre 28, 2012

    hola tengo una consulta, quisiera saber si es posible crear un boton en excel macros, que al darle click me de el porcentaje de un monto determinado, es decir si tengo $100.00 en una celda , quiero darle click al boton creado y que me cacule el 50% automaticamente y me arroje el resultado en una celda adjunta, en este caso tendria que arrojar $50.00 parece simple pero no encuentro la manera de como hacerlo utilizando el macros

    ResponderEliminar
    Respuestas
    1. Hola Christian,
      bueno, claro es posible, la clave es el código de la macro que luego asignarás.

      El código podría ser así de sencillo:
      Sub mitad()
      If IsNumeric(ActiveCell.Value) = True Then
      ActiveCell.Offset(0, 1).Value = ActiveCell.Value / 2
      Else
      ActiveCell.Offset(0, 1).Value = ActiveCell.Value
      End If
      End Sub

      y luego y apuedes asignarlo en un botón.
      Este código te calculará la mitad del valor de cualquier celda activa que tengas al pulsar el botón; si el valor no es numérico te devuelve el mismo texto.
      Espero te sirva.
      Slds

      Eliminar
  76. Para controlar una bodega contrui una planilla Excel 2007 y tiene macros. Los item necesitan codigos alfanumericos y trabaja con centros de costo, proveedores y otros. No es demo, sin vencimientos ni compromisos. La comparto a verdaderos interesados, solo escribe a: apolopelao @hotmail.com y asi no dormira en mi equipo.

    ResponderEliminar
    Respuestas
    1. Muchas gracias por el ofrecimiento!!
      Te honra la aportación gratuita de tu trabajo.
      Un cordial saludo

      Eliminar
  77. Hola:

    Tengo una macro que abre una hoja oculta con un boton, pero quier que borre ciertas celdas al momento de abrir esta hoja. Por si dejaron datos en ella.
    Me podrían ayudar?

    ResponderEliminar
    Respuestas
    1. Hola,
      para borrar esas celdas, sólo tendrías que añadir el siguiente código en el Explorador de proyectos, en la Hoja en cuestión:

      Private Sub Worksheet_Activate()
      Range("A1").Clear
      End Sub

      al entrar en la Hoja en cuestión se borrará todo lo de la celda A1...

      Espero te sirva.
      Slds

      Eliminar
    2. Muchas Gracias por tu pronta respuesta, solo una pregunta el comando va despues del
      Private Sub CommandButton1_Click()

      Sub MostrarBalance()
      '
      ' MostrarBalance Macro

      '
      Sheets("Edo Resultados").Select
      Sheets("Balance General").Visible = True
      Range("D8").Select

      o antes.

      Gracias

      Eliminar
    3. Hola,
      supongo que ese evento click asociado al botón lo tendrás en la hoja, dentro del Explorador de proyectos, el código que te adjunté lo puedes añadir antes...
      Es decir, primero
      Private Sub Worksheet_Activate()
      Range("A1").Clear
      End Sub
      y a continuación tu código...

      aunque es indiferente.

      Date cuenta que son dos procedimientos distintos, el que adjunté se ejecuta siempre que se active la hoja en cuestión, el tuyo sólo al hacer click en el botón.
      Slds

      Eliminar
  78. Hola, soy nuevo en lo de macros, ojala me puedan ayudar, e creado un combobox y cuando estoy en la sentencia funciona muy bien, cuando cierro el excel y otra vez abro los combobox se quedan sin datos, a que se debe , espero me puedan ayudar.

    ResponderEliminar
    Respuestas
    1. Hola!!
      bueno, habría que ver las sentencias asociadas al ComboBox, y cómo cargas con elementos a éste.
      Podrías adjuntar el código o bien enviarmelo a excelforo@gmail.com???

      Un saludo

      Eliminar
  79. Hola Quisiera agregar a un boton, la opcion solver. Basicamente ya tengo configurado lo que quiero en solver, pero quisiera que los que van a utilizar dicha herramienta no se tengan que meter en solver y darle aceptar.... hay posibilidad de ejecutar esto?.... tengo excel 2010... mil gracias

    ResponderEliminar
    Respuestas
    1. Hola,
      si ya conoces las diferentes opciones de la configuración de Solver, puedes emplear el asistente de grabación de Macros, para luego asignar el código al botón.
      Es lo más sencillo, sin entrar en el detalle del código.
      Slds

      Eliminar
  80. Hola, necesito crear un boton en excel que copie y pegue a otra ubicacion, los datos de una fila determinada, pero que lo datos se peguen donde se coloque el cursor, los datos de la fila a copiar, varian de acuerdo a unos parametros asignados, si alguien pudiera ayudarme.

    ResponderEliminar
    Respuestas
    1. Hola,
      desconozco esos parámetros, pero una macro podría ser:
      Sub macro1()
      Range("A6:E6").Copy
      ActiveCell.PasteSpecial Paste:=xlPasteValues
      End Sub
      y luego asignarla a un botón.

      Esta macro te copiaría el rango A6:E6 a la celda que tengass activa...
      Slds

      Eliminar
  81. Gracias por la ayuda, la macro funciona, pero copia y pega en celdas activas de la misma hoja, ¿como haria para copiar datos de una hoja y pegarlos en otra?

    ResponderEliminar
    Respuestas
    1. Hola,
      bueno, indica que lo que hay que copiar está en otra hoja, por ejemplo
      Sub macro1()
      Sheets("Hoja1").Range("A6:E6").Copy
      ActiveCell.PasteSpecial Paste:=xlPasteValues
      End Sub
      y ejecuta la macro desde la hoja donde quieras pegar ese rango copiado.
      Slds

      Eliminar
  82. Gacias Ismael, me fue de gran ayuda, sobretodo la rapidez con que lo hiciste, exitos.
    Saludos

    ResponderEliminar
  83. Tengo una macro que se activa cuando en a1 se coloca un 1 pero quiero que mientras la celda tenga el 1 se siga ejecutando

    ResponderEliminar
    Respuestas
    1. Hola, que tal!
      espero estés bien.
      Yo dispondría de una macro en un Módulo, y un procedimiento en la hoja donde esté la celda A1 que comentas, con un procedimiento Change, de tal forma que cuando A1 cambie ejecute la macro.

      Slds cordiales

      Eliminar
  84. buenas noches tengo una factura en la que utilizo el comando
    Sub factura()
    Range("C8:C28").Clear
    End Sub
    estolo hice para no borrar celda tras celda pero no se como hacer par que no me borre el formato aplicado a C8:C28 ya que esta centrado y la darle clic me borra todo incluido formatos les pido orientacion o algun codigo fuente que ayude a no borrarme el formato gracias

    ResponderEliminar
    Respuestas
    1. Hola!!
      para borrar sólo el contenido y mantener formatos emplea
      Range("C8:C28").Clearcontents

      Slds

      Eliminar
  85. hola quien me ayudaria hacer una base de dato mi necesidad es esta vendo producto de cerveza toda laspresentaciones soyminorista yo tengo una en excel que me maneja ventas diarias y otra de existencias pero es que quiero hacer directamente que cuando meta las ventas diarias me haga el descuente en las existencias si hoy vendo 10 cajas de aguilita en existencias tengo 20 para el dia que siguiente deben de haber 10 , hya una hoja que tengo de creditos y otras de abonos tengo la base de datos en excel puedo enviar ejemplo de como la tengo este es mi correo enchovictoriano@hotmail.com

    ResponderEliminar
    Respuestas
    1. Hola Daedtecnologys,
      parece que lo que quieres es una base de datos completa que se configure como un Control de inventario.
      Esto queda fuera de una ayuda normal, lee las Normas de uso del blog.

      Si necesitas contactar en este sentido envíame un correo con el fichero y todas las explicaciones posibles a
      consultoria@excelforo.com
      y te enviaré presupuesto
      Slds cordiales

      Eliminar
  86. hola, una duda
    me puedes pasar algun link donde expliquen como o un archivo con un ejemplo de lo siguiente?

    se puede poner un boton que cree una nueva tabla o conjunto de celdas?

    Lo ideal es que los nuevos campos queden en la

    misma pestaña donde estén los indicadores.

    supongo es un boton para mostrar algo
    Es decir, cuando apreto una vez el boton quisiera que un conjunto de celdas fueran visibles. ¿Alguna idea de cómo hacerlo?

    Gracias

    ResponderEliminar
    Respuestas
    1. Hola...
      bueno, son cosas muy diferentes las que estás planteando, por lo que no me queda claro finalmente qué pretendes.
      Por supuesto es posible crear una Tabla con macros, pero ?crear un conjunto de celdas?... quizá te refieres a seleccionar un rango concreto?.
      Para Activar o seleccionar una rango de celdas sólo tienes que añadir una macro:
      Sub MostraCeldas()
      Range("B1:C5").Select
      End sub

      y luego insertar un Botón de fórmulario y asignarle esa macro... al presionar el botón, se jecuta la mcro, y se seleccionarán y verás ese rango B1:C5.

      Espero te oriente y aclare algo.
      Slds

      Eliminar
  87. Hola una duda...
    Cómo insertar filas en excel manteniendo las fórmulas y el formato?

    ResponderEliminar
    Respuestas
    1. Hola, que tal!
      en general la acción de Insertar (filas, columnas, celdas...) mantiene el formato de lo anexo arriba o a la izquierda.
      Mantener las fórmulas es diferente, para eso tendrías que construir sobre el rango una Tabla, así los campos formulados te los autorrellenará con la fórmula indicada (y el formato, claro).
      En próximos días subiré una entrada al blog explicando esta opción de la Tabla de Excel.
      Slds cordiales

      Eliminar
  88. Hola una duda.
    ¿como se puede copiar datos de una celda a otra hoja de excel al ingresar un valor?

    Tengo dos hojas de excel, en la hoja 1, tengo unos campos de la columna C a la G.
    alli voy a poner un nombre y dos fechas

    lo que quiero es que: Cuando yo ingrese los datos de nombres y fechas, ese mismo dato se ponga en la hoja dos a partir de determinada columna y fila.

    lo dificil es que, en la hoja 2 yo tengo mas datos abajo de estos campos, y lo que quiero es que al poner un dato en la hoja 1, se me agregue una nueva fila en la hoja dos ( que me recorra todos los datos que estan abajo sin modificarlos). y que si sigo llenando la hoja 1, se agreguen filas con esos datos en la hoja 2
    es posible de alguna forma?
    algun boton o algo asi?

    Espero de su pronta ayuda. Gracias =)

    ResponderEliminar
    Respuestas
    1. Hola,
      bueno lo que necesitas es una macro (que en todo caso podrías asignar a un botón... pero sólo el botón no haría nada).
      Para copiar celdas con macros puedes leer esta entrada
      http://excelforo.blogspot.com.es/2011/02/vba-formas-de-copiar-rangos-o-celdas.html
      ahí verás deiferentes maneras de realizar el copiado.

      En este caso que deseas copiar los valores de esas celdas a la Hoja2 al final de una Tabla (que además tienes más datos por debajo de ella-supongo no estarán juntos), podrías emplear el método .end(xldown) desde la parte de arriba de la tabla destino
      Range("A1").End(xlDown).Offset(1, 0).Select
      pero como quieres que te agregue una nueva fila, entonces primero deberás insertar una fila al final de la tabla, asi te quedaría algo de este estilo:
      Range("A1").End(xlDown).Offset(1, 0).EntireRow.Insert Shift:=xlDown
      Range("A1").End(xlDown).Offset(1, 0).Select

      sólo te queda realizar el copiado de las celdas de la hoja1 a la hoja2

      Sin más datos de situación y qué y dónde copiar no puedo concretar más.
      Espero te oriente
      Slds cordiales

      Eliminar
  89. hola
    copie lo que pusiste en el link que decias y le agregue lo que pusiste de que agregara una nueva fila asi:

    Sub copiados()
    Dim HojaOrigen As Worksheet, HojaDestino As Worksheet

    Set HojaOrigen = Sheets(1)
    Set HojaDestino = Sheets(2)

    'con el If compruebo las condiciones previas a la ejecución del copiado y pegado
    If HojaOrigen.Cells(2, 1).Value <> Empty And _
    HojaOrigen.Cells(3, 1).Value <> Empty Then
    Application.ScreenUpdating = False

    'También podemos vincular valores o fórmulas relacionando diferentes celdas.
    HojaDestino.Range("D2").Value = HojaOrigen.Range("D2").Value
    HojaDestino.Range("D3").Formula = HojaOrigen.Range("D3").Formula

    Application.ScreenUpdating = True
    Application.CutCopyMode = False

    Range("A1").End(xlDown).Offset(1, 0).EntireRow.Insert Shift:=xlDown
    Range("A1").End(xlDown).Offset(1, 0).Select

    End If
    Set HojaDestino = Nothing
    Set HojaOrigen = Nothing
    End Sub

    estoy viendo como funciona en un excel sin nada.. pero para que me copie algo tengo que poner datos en la columna a y d de la primer hoja... pero solo me copia lo que esta en la columna d.. ¿como hacer para que no me pida datos en la columna a?

    luego me agrega filas pero me las agrega en la hoja 1. y yo quiero que por ejemplo si pongo datos en la columna d y e ( nombre y fecha). me los copie en la hoja dos

    pongamos que en la fila 10 yo ya tengo datos en la hoja 2.. y quiero que se copien esos datos de nombre y fecha arriba de esos datos..
    pondré unos 20 datos por ejemplo. y quiero que al copiarse se agreguen en una nueva fila el la hoja 2

    ahorita lo que agrega es una fila en blanco en la hoja 1
    como que datos te puedo dar? o te paso un archivo?

    muchas gracias

    ResponderEliminar
    Respuestas
    1. Hola!
      mejor envíame el fichero a
      excelforo@gmail.com

      te veo demasiado perdido.
      ;-)
      Slds cordiales

      Eliminar
  90. Hola Isamel, después de días de revisar y revisar me decidí mismo a pedir ayuda; sucede que tengo la siguiente macros que encontré y la modifique a mi necesidad; más sucede que también quiero que se borre algunos datos subsiguientes en la misma fila insertada pero aun no entiendo como aplicar la sentencia de seleccionar el rango de una celda activa;
    mi macros es :

    Sub Insertar()
    ActiveSheet.Unprotect "123"
    Dim fila As Integer
    fila = ActiveCell.Row
    If fila < 5 Then
    MsgBox ("Ahi no se puede insertar")
    Exit Sub
    End If
    Rows(fila).Insert Shift:=xlDown
    If fila = 5 Then Rows(fila + 1).Copy Else Rows(fila - 1).Copy
    Rows(fila).PasteSpecial Paste:=xlPasteFormulas
    Rows(fila).Application.CutCopyMode = False
    ActiveCell.Offset(0, 1).Select
    Selection.ClearContents
    '(aqui es donde quiero que suceda que a partir de 5 columnas posteriores a mi celda activa que acabo de borrar su contenido, se borre el contenido de un rango de 31 columnas , teniendo en cuenta que tengo una columna entre las 31 columnas que se oculta dependiendo de determinado criterio(esa esta en otra macros) )

    Application.ScreenUpdating = True

    ActiveSheet.Protect "123"
    End Sub

    espero q me puedas ayudar o redirigirme a que lo entienda en algun link...
    gracias de antemano..
    besitos desde Ecuador
    Shaki

    ResponderEliminar
    Respuestas
    1. Hola Shakira,
      prueba insertando
      Range(ActiveCell, ActiveCell.Offset(0, 31)).SpecialCells(xlCellTypeVisible).ClearContents
      donde añadiste la explicación.
      Lo que hace es trabajar(borrar el contenido de celdas visibles -no ocultas-) de la fila activa, desde la celda activa hasta 31 columnas a la derecha.

      Espero te sirva
      Slds cordiales

      Eliminar
    2. Hola Ismael:
      muchas gracias por responder tan pronto, te cuento q no hallaba como volver a tu foro de hace dos días.. he estado muriéndome de la incertidumbre por q no sabia donde había dejado mi mensaje..., pero al fin..
      te cuento que ya ingrese el codigo ahi.. y le agregue lo siguiente.. no se si estara bien, ya que la linea que me diste
      me borraba todo incluyendo unas cuatro columnas que no queria q se borren ya q tengo formulas a partir de la celda activa,
      espero que este bien lo que agregue.. jejeje


      ActiveCell.Offset(0, 5).Select
      Range(Selection, ActiveCell.Offset(0, 31)).SpecialCells(xlCellTypeVisible).ClearContents


      y con eso me funciona perfectamente tal como queria...
      te agradezco enormemente tu ayuda, ahora puedo seguir envejeciendo trankila.. jejeje

      besitos desde ecuador

      Eliminar
    3. ;-)
      Me alegra dieras con ello con la ayuda que te pude facilitar.
      Cordiales saludos!!!

      Eliminar
  91. Hola Ismael,
    Buena Tarde ? como puedo crear un botón desde VBA Excel dando click en un commandbutton, y a su vez darle un nombre predeterminado anteriormente en una celda.

    ResponderEliminar
    Respuestas
    1. Hola!!
      Puedes añadir a tu CommandButton un código similar a este:
      ActiveSheet.Buttons.Add(200, 15, 125, 35).Characters.Text = "prueba"

      te añadirá un botón de comando con el texto "prueba".

      Slds cordiales

      Eliminar
    2. Buenos días Ismael agradezco tu colaboración, en realidad lo que necesito es poder ubicar un CommandButton dentro de un formulario al dar Click en otro CommandButton y asisgnar un nombre predeterminado Ej: Prueba...

      Agradezco tu colaboración ...

      Eliminar
    3. Hola,
      creo que lo más sencillo sería añadirlo manualmente, como cualquier otro control, y trabajar con la propiedad .Visible.

      No creo posible tal y como lo planteas. Investigaré al respecto.
      Slds

      Eliminar
    4. Hola, estuve investigando frente al tema propuesto y localicé la siguiente macro:
      Private Sub CommandButton1_Click()
      Dim Ctrl As Control
      Set Ctrl = Me.Controls.Add("forms.CommandButton.1", "Command1", Visible)
      Ctrl.Caption = "Prueba"
      End Sub
      pero en realidad no me es suficiente ya que necesito que el botón que me cree sea guardado y no temporal como lo da esta macro si es posible revísala y me das tu punto de vista...

      Eliminar
    5. Hola,
      sigo pensando y me reitero en mi comentrio anterior...
      tal y como expones en tu ejemplo, la idea es igual a la que te comenté, trabajar con la propiedad Visible.
      ...

      Slds

      Eliminar
  92. tengo una base de datos de 650 personas me piden calcular el flujo de sueldos para cada una ya cree mi hoja de calculo y lo fui probando y ya quedo el problema es que el flujo de cada persona lo pego en otra hoja pero hacerlo uno por uno no puedo como lo mecanizo ?

    ResponderEliminar
    Respuestas
    1. Hola Teresita,
      que tal estás? yo también deseo te encuntres bien.
      Desconozco tu estructura de informe, pero prueba seleccionando los diferentes rangos de celdas con los flujos, presionar Seleccionar celdas visibles y pegar en la otra hoja que comentas.
      Un cordial saludo y gracias!

      Eliminar
  93. hola perdon por las molestias pero me encantaria que me ayudes pasa que en un control de stock las claves de mi productos no son consecutivos y no comienzan con 0001. en la parte CLAVEENTRADA = ActiveCell.FormulaR1C1+4 pude hacer esto ya que las claves de los productos son consecutivos y suma cuantro xq justo en cuadro que introduce la clave esta 4cuadritos antes del primer producto que comienza con el numero 0001. me podrias ayudar en como puedo modificar esta parte para productos no consecutivos y que comiencen con cualquier numero no necesariamente 0001.desde ya me espero me disculpes las molestias y espero una pronta y exitosa respuesta. muchisimas gracias
    Sub ENTRADA()
    Range("A3").Select
    CLAVEENTRADA = ActiveCell.FormulaR1C1+4
    CLAVEENTRADA = "D" & CLAVEENTRADA
    Range("D3").Select
    ENTRADAPRODUCTO = ActiveCell.FormulaR1C1
    Range(CELDAENTRADA).Select
    ActiveCell.FormulaR1C1 = Val(ActiveCell.FormulaR1C1) + Val(ENTRADAPRODUCTO)
    Range("D3").Select
    ActiveCell.FormulaR1C1 = ""

    ResponderEliminar
    Respuestas
    1. Hola Gigu,
      lo siento pero no comprendo la distribución de datos y tampoco qué requieres exactamente...
      si pudieras exponer de manera más clara, quizá te podría ayudarte...
      Un cordial saludo

      Eliminar
  94. hola realicé todo los consejos y no puedo utilizar las macros en los libros nuevos en Excel 2007 en otras versiones no tuve ese problema. habilité todas las macros desde opciones, guardé en libro habilitado para macros, al crear la macro no me permite crearla en libro personal de macros, tengo derecho de administrador.
    un cordial saludo

    ResponderEliminar
    Respuestas
    1. Hola Silvia, supongo te refieres a que seguiste las explicaciones de este post...
      Te recomiendo si lo que pretendes es grabar una macro en el libro de macros personal, leas este otro post:
      http://excelforo.blogspot.com.es/2012/03/libro-de-macros-personal-en-excel.html
      un saludo

      Eliminar
  95. tenes razón perdón!...espero esta vez ser mas clara
    en este link vi un vídeo que explica justo lo que quiero: control de entradas y salida.
    http://www.youtube.com/watch?v=luFYHk-LCrs&feature=player_embedded
    http://www.youtube.com/watch?v=luFYHk-LCrs&feature=player_embedded
    el gran problema es que trabaja con claves consecutivas y la clave del primer producto comienza con 1.en cambio mis claves no son consecutivas te doy un ejemplo:
    CODIGO DESCRIPCION

    901001 SEGMENTO A ECO CUERO
    901002 SEGMENTO A ECO CUERO
    901003 SEGMENTO A ECO CUERO
    901004 SEGMENTO A ECO CUERO
    960001 SEGMENTO G CHENIL ROMA
    991006 SEGMENTO G CHENILLE CHUNKY
    en el video hace este codigo para las entradas
    Sub ENTRADA()
    Range("A3").Select
    CLAVEENTRADA = ActiveCell.FormulaR1C1+4
    CLAVEENTRADA = "D" & CLAVEENTRADA
    Range("D3").Select
    ENTRADAPRODUCTO = ActiveCell.FormulaR1C1
    Range(CELDAENTRADA).Select
    ActiveCell.FormulaR1C1 = Val(ActiveCell.FormulaR1C1) + Val(ENTRADAPRODUCTO)
    Range("D3").Select
    ActiveCell.FormulaR1C1 = ""
    Pero mi problema es que al no tener códigos consecutivos y que empiecen con clave 1 no funciona.Entonces quiero saber si podría modificar esta parte:
    CLAVEENTRADA = ActiveCell.FormulaR1C1+4
    para que funcione en mi caso particular o como podría hacerlo.
    Desde ya muchísimas gracias y discúlpame nuevamente por las molestias y por no haber sido clara.

    ResponderEliminar
    Respuestas
    1. Hola Gigu,
      Bueno, mucho mejor ahora...
      La solución más simple sería que añadieras (si te es posible) una columna auxiliar a tu tabla de datos, con un autonumérico, replicando el ejemplo del video,, a continuación el resto de tus campos (CÓDIGO, DESCRIPCIÓN, etc), situándolo preferiblemente en similar localización; de este modo la relación funcionaría sobre el autonumérico y no sobre tus códigos (que es lo que hace fallar la macro).
      Otra solución sería cambiar totalmente la macro y construir una búsqueda, con .Find que localice en la parte inferior directamente el CODIGO e inserte el valor de Entrada o Salida.
      Si quieres contáctame en
      excelforo@gmail.com
      adjunándome el fichero con los datos ya distribuidos, y le echo un vistazo.
      Slds

      Eliminar
  96. Hola, tengo un archivo en excel 2007 en el cual llevo el control de activos fijos con todos los items necesarios, mi pregunta es como hacer una macro para poder indicar que un activo se a trasladado de ubicaciòn, que quede indicada la nueva ubicaciòn y que dicha acciòn quede registrado en un historial de movimientos.

    No soy un conocedor en cuanto a programcion de macros.

    Gracias

    ResponderEliminar
    Respuestas
    1. Hola,
      bueno, una idea sería asociar un código de registro a un evento doubleclick, que al hacer doble clic en el activo, te realice algunas preguntas respecto al movimiento, para que realice en otra hoja (Historial de movimientos) los datos pertinentes, terminando el proceso en la hoja de control de activos, dejando la última ubicacon válida asociada al activo.

      De todas formas mejor lee primero las Normas de Uso, y en particular el punto 4.

      Cordiales saludos

      Eliminar
    2. Gracias por la luz que me brinda, ya di un vistazo ràpidamente a lo que me señala, le agradezco el brindarme un señalamiento en cuanto a esto y por donde empezar.

      Eliminar
    3. Espero te sirva...
      Slds cordiales

      Eliminar
  97. hola soy nuevo en macros y quisiera su ayuda.
    Encontré este macro, y funciona bien, pero lo que quiero es adaptarlo a mi trabajo; el cual consiste:
    Primero en crear solamente las hojas mostradas y no las ocultas, y
    Segundo en que los libros generados conteniendo solo una hoja de la hoja principal, están en la versión 2003, y quisiera que fuesen versión 2007 o más. Gracias

    Sub Crear_archivos_de_hojas()
    Dim strHoja, strStartHoja, strRuta As String
    Dim i As Integer
    Application.ScreenUpdating = False
    strStartHoja = ActiveCell.Worksheet.Name
    For i = 1 To Sheets.Count
    Sheets(i).Activate
    strHoja = ActiveCell.Worksheet.Name
    Sheets(strHoja).Copy
    strRuta = "C:\Users\JAITEF\Desktop"
    ActiveWorkbook.SaveAs Filename: =strRuta & "\" & strHoja, _
    FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
    ReadOnlyRecommended:=False, CreateBackup:=False
    ActiveWindow.Close Savechanges:=True
    Next
    Sheets(strStartHoja).Activate
    Application.ScreenUpdating=True

    End Sub

    Atentamente Jailui

    ResponderEliminar
    Respuestas
    1. Hola Jailui,
      te adjunto solución a tus dos problemas:

      Sub Crear_archivos_de_hojas()
      Dim strHoja As String, strStartHoja As String, strRuta As String
      Dim i As Integer
      Application.ScreenUpdating = False
      strStartHoja = ActiveCell.Worksheet.Name
      For i = 1 To Sheets.Count
      If Sheets(i).Visible = True Then
      Sheets(i).Activate
      strHoja = ActiveCell.Worksheet.Name
      Sheets(strHoja).Copy
      strRuta = "E:\Excelforo"

      ActiveWorkbook.SaveAs Filename:=strRuta & "\" & strHoja & ".xlsx", _
      FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
      ReadOnlyRecommended:=False, CreateBackup:=False
      ActiveWindow.Close Savechanges:=True
      End If
      Next i
      Sheets(strStartHoja).Activate
      Application.ScreenUpdating = True
      End Sub

      Como ves pra que te guarde los ficheros con extensión 2007+ basta con:
      Filename:=strRuta & "\" & strHoja & ".xlsx"

      Y para saltar las hojas ocultas añadir un IF ... THEN

      Espero te sirva
      Saludos cordiales

      Eliminar
  98. Excel ente aporte Ismael, te lo adradezco mucho, jamas se me hubiera ocurrido colocar & ".xlsx" y lo de las hojas ocultas, perfecto.

    Pero hay un pequeño inconveniente, que no se porque ocurre...
    Veras cuando lo quiero abrir el libro creado al haber sido copiado, no se puede abrir y me dice lo siguiente:
    Excel no puede abrir el archivo 'sssss.xlsx' porque el
    formato o la extensión de éste no son válidos. Compruebe que el
    archivo no se ha dañado y que la extensión del mismo coincide con el
    formato del archivo.

    Por lo demás, muchas gracias y como te envio el archivo que estoy utilizando, pero si no fuera mucha molestia paso por paso...GRACIAS ISMAEL.

    ResponderEliminar
    Respuestas
    1. Hola,
      reemplaza la línea de .SaveAs actual por
      ActiveWorkbook.SaveAs Filename:=strRuta & "\" & strHoja & ".xlsx"
      es decri, quita el resto de parametros...
      El resto del código se mantiene.

      Con eso te debería funcionar y permitirte abrirlo...
      Si no fuera el caso, envíame el fichero a
      excelforo@gmail.com

      Slds

      Eliminar
  99. hola disculpen soy novato en esto de crear macro, tengo un trabajo en la universidad sobre realizar un control de entradas, salidas y existencias a través de un botón de formulario el código esta en la fila A2 y las entradas están en la columna D y las salidas están en la columna E, la macro que pude recopilar es esta:
    ENTRADAS()
    Rango("A2").Select
    ClaveEntrada = ActiveCell.FormulaR1C1 + 4
    CeldaEntrada="D"&
    pero lo que pasa es que esta incompleta lo sustraje de este vídeo : https://www.youtube.com/watch?v=zncDngQ-Whc

    pero esta incompleto por favor ayúdenme es esto, lo necesito lo mas antes posible..
    se los agradesco mucho...

    ResponderEliminar
    Respuestas
    1. Hola Gerson,
      siendo para un trabajo de la Universidad, donde tu misión es aprender, no parece muy honrado por mi parte dártelo solucionado.

      En mi opinión deberías intentarlo por ti mismo.

      En todo caso, el autor del video seguro te proporciona el código completo.
      Un cordial saludo

      Eliminar
    2. Es que yo no estoy estudiando una carrera relacionada con la informática, estoy estudiando Administración de Empresas, y mi trabajo consiste en que realice un pequeño proyecto de entradas y salidas de nuestro productos, pero en computación no nos han enseñado un excel avanzado, solo formulas básicas, y es por eso que acudo a su ayuda, porque no tengo conocimientos del uso de excel en estas formulas, por favor ayúdenme.. se los agradecería mucho por favor.

      Eliminar
    3. Gerson, lee, por favor, las Normas de uso del blog...

      En tu caso, además, no creo que emplear programación (macros), que parece no te han explicado ni forme parte de tu formación, aporte a tu trabajo, una realidad... me permito darte mi opinión como profesor.

      Saludos

      Eliminar