Hojas de cálculo en Excel - página principal

Estreno del blog

Hola a todos/as.

A través de este blog, pretendo compartir con vosotros, mis experiencias con la hoja de cálculo de excel, esa poderosa herramienta de cálculo, que nos hace la vida más sencilla a todos los que trabajamos habitualmente haciendo cálculos numéricos.

No os hablaré de las excelencias de esta hoja de cálculo, pues muchos de vosotros ya las conocéis, pero desde este blog, pretendo compartir con vosotros, algunos de los modelos, hojas, y plantillas de excel, que utilizo en mi trabajo, así como otros que he compartido con los internautas a través de diversos foros en los que participo habitualmente.

Saludos a todos/as.



121 comentarios:

Unknown dijo...

Como recién visitante (y aprendiz) de de este blog, quiero agradecer esta buena y útil iniciativa, deseándole un exitoso futuro desde el que podamos aprender y compartir nuestras experiencias en el a veces intrincado mundo de Excel.

Suerte! somos todo OjOs..

Javier Marco dijo...

Gracias por tu comentario :-)

Unknown dijo...

Gracias, por darte el tiempo de hacer esto. Te lo agradecemos quienes saben lo que cuesta dedicar tiempo y esfuerzo.
Adelante y que sigas con ánimo.

José Luis Arellano

Javier Marco dijo...

Muchas gracias por tu comentario :-)

Anónimo dijo...

Felicidades, llevo unos dias con dudas sobre excel y esta pagina veo que tiene mucha informacion y lo mas importante: utilidad. Espero que tenga exito.

Javier Marco dijo...

Eso espero, que os sean de utilidad estas cosillas que voy colgando en el blog.

Muchas gracias por tu comentario :-)

Anónimo dijo...

Hola Javier,
realmente me maravilla todo lo que sabes y que tanta utilidad le estoy sacando porque lo estás compartiendo con todos los que de una forma u otra hemos llegado a tu blog.
Voy a plantearte una cuestión que, de tener solución, me ahorraría un montón de trabajo ya que tengo que operar cada mes con una hoja que contiene más de 4.000 líneas de datos.
Mi problema es el siguiente:
En una celda de cada línea vienen varios datos separados por espacios pero que no ocupan siempre la misma posición, también puede que en algunas celdas no esté ninguno de los datos que busco.
Mi pregunta es la siguiente: Teniendo una base de datos o lista de datos que tengo que buscar (siempre los mismos), ¿hay posibilidad de que en una celda de la misma fila mediante una función o fórmula o por una macro se extraiga el dato de la base de datos que esté en la celda?
Ejemplo.-
En celda
A1 enero 2008 blanco manzana
A2 2007 pera negro febrero
A3 manzana 2007 negro enero
A4 2008 blanco enero
Necesito que en B1, B2, B3 y B4 por ejemplo me ponga MANZANA o PERA o NULO por que en la A4 no está ni pera ni manzana.
Verás que no ocupan la misma posición pero los datos son siempre iguales o no existen

De antemano te agradezco el tiempo que le puedas dedicar -para que yo me pueda dedicar a otras cosas porque tratar más de 4.000 registros es laborioso-

Un saludo
Simito

Javier Marco dijo...

Vamos a ver si era esto lo que buscabas: http://www.megaupload.com/es/?d=K3HIB602

Saludos

Anónimo dijo...

¡¡¡GENIAL JAVIER!!!
Como mi JEFA no sabe que el trabajo ya me lleva menos tiempo, me podré dedicar a leer con detenimiento tu blog.
Un abrazo
simito

Javier Marco dijo...

Dame el email de tu jefa, que le contaré unas cuantas cosillas sobre tu productividad laboral ;-)

Me alegro que te funcionase. Como ves, si analizas el código, verás que no era excesivamente complicado, y que en un plis-plas, nos hemos creado nuestra propia función.

Salu2

David Hornero dijo...

Hola Javier

Me parece Estupendo todo lo que has publicado e incluso me esta enseñando ahacer macros gracias!!!

Aproveco la ocasion para plantearte un "problemilla" para ti, que me sera de gran utilidad...

Se trata de lo siguiente:

Voy a leer una columna que esta llena de caracteres con cierta logica, el asunto es que quiero que lea caracter a caracter y que cuando encuentre por ejemplo el codigo 010 en una determinada posicion de la linea, lea los siguientes 10 caracteres y los pege en otra celda, continue leyendo y en otra determinada posicion de la misma linea coga los 5 caractares, y los pege en la misma celda donde hemos pegado lo anterior pero dejando 5 espacios en blanco entre los dos datos.

Bueno mas o menos es esto, no se si me explico con suficiente claridad.

Muchas gracias de nuevo y espero que este problemilla suponga algun reto a tu sabiduria...

un saludo
David

Javier Marco dijo...

Sois un poco "pelotillas", pero lo comprendo, yo haría lo mismo, jajajajaja.

No he entendido esta parte: "en otra determinada posicion de la misma linea coga los 5 caractares, y los pege en la misma celda donde hemos pegado lo anterior pero dejando 5 espacios en blanco entre los dos datos".

¿En otra determinada posición?. ¿Qué posición?. Si te parece bien, coméntamelo con más detalle por email, y veremos que se puede hacer: mikorreo*gmail.com (sustituye * por @).

Salu2, y gracias por tu comentario.

Anónimo dijo...

excelente blog!

tengo una consulta que de seguro podras ayudarme.
tengo una base de datos con nombres de los empleados y diferente informacion que alimento mediante "Edit Box",la pregunta es como puedo buscar y elimar una linea que ya no ocupe, ej: un empleado que se fue.
grac

Javier Marco dijo...

Hola que tal...

Quizás te interese echarle un vistazo a este artículo donde explico como eliminar las filas vacías.

Salu2

Anónimo dijo...

Hola que tal...

Quizás te interese echarle un vistazo a este artículo donde explico como eliminar las filas vacías.

Salu2

eso me sirve una vez teniendo la linea en blanco, mi consulta es buscar alguna forma de eliminar la informacion de la celda sin necesidad de entrar a la base de datos, ejemplo: seleccionando el nombre de la persona desde una lista desplegable

gracias por la ayuda

Anónimo dijo...

buenas noches Javier

la verdad me a parecido muy bueno tu blog pues me a servido para implementar y agilizar mi trabajo con estas hojas de calculo, espero que sigas publicando y comentandonos tus experiencias, gracias

Mauricio Martin

Anónimo dijo...

Hola, tu blog me ha parecido tan bueno que me gustaria poder tenerlo entero para consultarlo en un ordenador offline.
¿hay alguna manera de descargarselo entero?

Un saludo y muchas gracias

Javier Marco dijo...

Muchas gracias por tu comentario.

Pues de momento no se puede consultar offline, porque no tengo pasados los artículos a PDF, ni a Word, pero quizás con el tiempo, todo se ande.

Un saludo.

Anónimo dijo...

hola quisiera felicitarlos por tan excelente pagina y pedirles su ayuda en la creacion de una hoja de excel para el cobro de cartera desde ya gracias,

Unknown dijo...

Hola Javier, he consultado el blog y me ha sido de gran utilidad, pero ahora tengo una duda que no se como resolver. quisiera saber como puedo hacer para que el valor que tengo registrando en un campo (textbox o combobox) de un formulario se siga inscribiendo (registrando) en la celda correspondiente que le he asignado de la hoja de excel cada vez que hago click en un botón.

Muchas gracias.


Jhony A.

Javier Marco dijo...

Gracias por tu comentario.

Lo que planteas se puede solucionar pasando a una variable, el valor del textbox, y luego poniendo algo como esto:

Range("A1") = variable

Juan Carlos dijo...

Hola Javier, tu blog me ha ayudado mucho en tareas de mi trabajo, tengo dos consultas para ti.

1. Existe la posibilidad de crear una macro que me permita que al guardar los cambios de un libro, el automáticamente quite los filtros del libro abierto?

2. Tengo un problema cuando utilizo la función buscarv, y es cuando busco una valor en una columna, siempre termina la busqueda en la primera coincidencia que encuentra, a veces se requiere que me busque todos los valores iguales. Ej cuando busco una cédula, que sé que en una columna la cédula está repetida. Lo he hecho con filtros avanzados. Existe algún código o algo que me pueda ayudar.
Gracias y de nuevo muy chevere tu blog.

Juan Carlos

Javier Marco dijo...

Hola Juan Carlos. El tema de los filtros es muy sencillo. Si usas la grabadora de macros, y miras el código que te genera al crear o quitar un filtro, te será más que suficiente para añadirlo a un auto_close(), por ejemplo.

Aquí tienes más info sobre la grabadora de macros, y sobre auto_close().

Para el tema de buscar más de 1 coincidencia, mírate este macro donde hablo de como crear nuestro propio buscador en excel.

Saludos.

Juan Carlos dijo...

Hola javier, gracias por tu colaboración, lo del buscador me ayudó mucho, lo del codigo del filtro no lo he podido hacer, será mucha molestia si te pido publique algún ejemplo, pues no he podido, dejame comentarte no soy experto más bien autodidacta y algunos aspectos me cuestan algo. Espero tus comentarios.

Juan carlos

Javier Marco dijo...

Pues mira, con este sencillo ejemplo puedes mostrar o quitar un autofiltro (con la grabadora de macros se obtiene este mismo código):

Sub poner_quitar_auto_filtro()
Selection.AutoFilter
End Sub

Pruébalo y verás sus efectos, tanto si tienes un filtro (pues te lo quitará), como si no lo tienes (pues te lo pondrá).

Saludos.

Juan Carlos dijo...

Gracias Javier me ha ayudado mucho tu consejo, se me ocurre algo este codigo se puede aplicar cuando cierro el libro, es decir que antes de guardar el libro la macro quite todos la información que tenga filtrada? Esto es posible? Existe alguna forma de hacerlo? Te explico por que yo estoy acostumbrado a elaborar macros a otras personas de aqui de la empresa, funcionalmente a ellos les sirve, lo malo es que a veces hacen cosas como colocarles filtros a las hojas, filtran información y dejan los filtros activados, cuando la macro se ejecuta no realiza los procedimientos como lo venía haciendo. Quedo en espera de tus comentarios y disculpa la molestia, es questos temas son cautivantes.

Javier Marco dijo...

Puedes incluir esa línea de macro dentro de un macro llamado Auto_close(), o bien dentro de ThisWorkbook, incluir el macro dentro del evento before close (el macro para quitar los filtros se ejecutaría antes de cerrar el libro). El macro debería llamarse así (dentro de ThisWorkbook, no dentro de un módulo):

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'bla, bla, bla
'aquí iría la línea aquella para quitar el filtro
'bla, bla, bla
End Sub

Juan Carlos dijo...

Gracias Javier, tu colaboración ha sido excelente, no sabes como me han ayudado tus conocimientos.

Juan K

Javier Marco dijo...

Muchas gracias por tu comentario. Me alegro que te haya servido.

Juan Carlos dijo...

Hola Javier:
Esto último en lo que me colaborastes, puede ser aplicado en todas las hojas donde haya filtros al mismo tiempo?, pues cuando hago el ejercicio, me lo hace únicamente en la hoja en la que cierro el archivo en otra donde tega tambien filtos no. Estos es posible? Y lo que dije de la execelncia de tus conocimientos es asi.

gracias

JK

Javier Marco dijo...

Tan solo tienes que meter esa línea para quitar el filtro, en un bucle que recorra todas las hojas del libro. Algo como esto:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
For i = 1 To Sheets.Count
Sheets(i).Select
'bla, bla, bla
'aquí va la línea para quitar los filtros
'bla, bla, bla
Next
End Sub

Juan Carlos dijo...

Gracias Javier, eres muy Gentil. Tu colaboración ha sido de mucha ayuda, espero poder seguir contando con tus asesorías.

Anónimo dijo...

Este Blog está genial, he aprendido mucho mas y en menos tiempo que leyendo 2 libro, gracias Javier

Javier Marco dijo...

Muchas gracias por tu comentario, Juan Carlos :-)

Anónimo dijo...

Muchas gracias por compartir tus conocimientos; excelente el blog.
Felicidades y mucho exito.
Atte.,

Javier Marco dijo...

Muchas gracias por tu comentario ;-)

Anónimo dijo...

HOLA A TODOS LOS COMPAÑEROS QUE AQUI NOS AYUDAN
QUSIERA SAVER COMO PUEDO HACER PARA QUE UN LIBRO U HOJA DE EXCEL AL BAJARLA DE INTERNET SOLO SE PUEDA ABRIR Y NO GUARDAR EN LA COMPUTADORA EN LA QUE SE BAJO SI SE PUEDES DESABILITAR ESAS FUNCION ESPERO RESPUESTA de antemano gracias

Rubio dijo...

hola atodos soy nuevo y quisiera saver si se puede
quitar la funcion de guardar al bajar un archivo exel de internet que solo se pueda abrir y ejecutarse pero sin poderse guardar en la computadora en la que se bajo

Anónimo dijo...

hola una consulta tu sabes como fijar el ancho de una celda ( 15 caracteres ) y al pasarlo a txt esta me lo respete??
gracias

Argenis Ch dijo...

Excelente blog, me gusta mucho la programación VBA con excel y he conseguido muchos tips muy útiles.

Muchas gracias y mucho éxito.

Anónimo dijo...

Hola primero decirte que estoy aprendiendo mucho de tu blog. Yo quisiera hacerte una consulta. Siguiendo los siguientes pasos se puede quitar la clave que protege donde has escrito el codigo de las macros. Yo lo que me gustaria es hacer una macro para proteger el archivo.Mira estos son los pasos:

Paso 1:
Haz clic en inicio y en ejecutar teclea la siguientes letras: cmd
PRESIONA ENTER.
Se abrirá una ventana del Símbolo de sistema
Paso 2:
Luego escribe o teclea lo siguiente: edit /70
PRESIONA ENTER
Se abrirá la ventana con menú del sistema.
Paso 3:
Desde esa venta selecciona tu archivo y lo abres. Nota importante: haz una copia del archivo original para mayor seguridad.
Paso 4:
En el menú BUSCAR, busca el texto “DPB”, asegúrate que existe inmediatamente atrás de las letras “GC=” y [Host Extender Info]
Paso 5:
Al texto “DPB” cámbialo por la siguiente escritura: “DBx”
Paso 6:
Selecciona Guardar y guarda el archivo el Archivo
Paso 7:
Ahora abre el archivo en Excel recibirás un mensaje de error, ignóralo y selecciona Si (Yes) o Aceptar
En este paso aun no podrás acceder al proyecto VBA
Paso 8:
Abre el Editor de Visual Basic
( Herramientas – Macro – Editor de Visual Basic )
Paso 9:
Abre las propiedades del proyecto eligiendo el menú Herramientas y luego la opción – Propiedades de VBA Project.
Selecciona la pestaña “Protección”
Ingresa una contraseña cualquiera y anótala
Paso 10:
Confírmala y pulsa OK ó bien en Aceptar. (La ventana se cerrará).
Paso 11:
Después vuelve a abrir Propiedades de VBA Project ubicado en el Menú Herramientas.
Allí desactivarás la casilla “Bloquear proyecto para la visualización” y borrarás TODOS los caracteres en la que hayas escrito en la contraseña así como en confirmar contraseña.
Paso 12:
Finalmente Guarda el proyecto (Boton Guardar); al abrirlo de nuevo
¡Listo tendrás tu archivo para poder ver el proyecto completo!

—————————————————–
A ver si se te ocurre como….yo he pensado que como al hacer esto, se genera un error al abri el archivo, se podria hacer una macro que capturara el error y se cargara el archivo, borrandolo por ejemplo. El problema es que no se cual es el error que da….
Gracias

Javier Marco dijo...

Gracias por el código, y por supuesto, por el comentario.

Un lector del blog, propuso una idea para desproteger el módulo VBA, que puedes leer entre los comentarios el hilo sobre omo desproteger una hoja de cálculo.

Respecto a lo que planteas, el 99% de los usuarios no sabrán desproteger el módulo, y aunque quieras un bloqueo del 100%, no lo vas a conseguir, pues hay soft que permite desproteger.

Lo de borrar el archivo capturando el error, no creo que te funcione. en cambio, borrando una hoja del libro, sí que te puede funcionar.

Para saber que error te tira, usa algo como esto:

Sub errores()
'si hay errores, que continúe
On Error Resume Next
'generamos un error intencionadamente,
'en este caso, un error 12
Error 12
'mostramos el número de error
mensaje = MsgBox("Error generado: " & Err)
End Sub

En el blog hay algunas ideas para proteger un trabajo, por ejemplo, impidiendo que se le cambie el nombre al fichero, permitiendo un numero de usos limitado en diferentes ordenadores, y cosillas por el estilo. Échale un vistazo, por si las encuentras interesantes.

Thiago dijo...

Hola Javier.. me crucé con este blog y la verdad q me parece sensacional, recien me inicio en el tema de las macros y tengo una duda.. necesito una macro para trabajar con deudas de proveedores.. en las cuales pueda, en una hoja cargar las facturas de cada proveedor y tildar algunas como "pendientes" y otras como "pagadas", pero que al clickear en una hoja de resumen solo aparezcan los datos de las facturas pendientes sin filas en blanco.. me pudiste entender???

Anónimo dijo...

Enhorabuena por el blog, me estoy iniciando en este mundillo de las macros y la verdad que aquí ya encontré varias soluciones a algún problemilla que tuve. Te quería preguntar acerca de algo que estoy intentando hacer a ver si me puedes decir por donde puedo tirar; te comento un poco mi problema. Hay algun tipo de macro que pueda eliminar que salgan los mensajes tipo: Error '9' en tiempo de ejecución?
Es que tengo con una macro que tengo abro varios archivos, pero en el momento que sale este error solo me abre uno.
Muchas gracias y un saludo

Javier Marco dijo...

Deberías saber porqué te tira ese error, para evitar tener que poner parches, pero si quieres omitir los errores, pon esta línea al principio de tu macro:

On Error Resume Next

Con esa línea le estamos diciendo que omita los errores, y que continue ejecutando el código sin parar, y hasta que llegue al final.

Un saludo.

Anónimo dijo...

Muchas gracias por la ayuda, pero no me funciona. Yo creo que es por lo siguiente: tengo una plantilla "A" donde hay que introducir datos,como es demasiado grande (por datos y macros que hay "detrás"), cuando se graba se hace una copia reducida, en la que se graban sólo los datos que se necesitan tener para crear una base de datos.Cuando se abre una de estas copias, es cuando da el error '9' en tiempo de ejecución, que me imagino que es por las macros y relaciones "que se borran" al crear la copia "B".Y claro, con la macro que tengo para abrir varios archivos, cuando abre el primero, sale el mensaje otra vez, y sólo abre un archivo.Probé como me dices el On Error Resume Next y nada.Si puede haber solución bien, si no tampoco pasa nada.
Saludos

Unknown dijo...

Javier, He utilizado una guía y realmente fue muy sencillo de entender. Muchas gracias.
Dejé una consulta en el tema Combinar Correspondencia, pero no estoy seguro de que sea muy clara. Cualquier cosa, cuando dispongas de tiempo, lo ves y me cuentas.
Gracias otra vez por este gran trabajo.
Fer.

Anónimo dijo...

Hola Javier. En primer lugar darte las gracias por los numerosos artículos que publicas en tu blog y que sirven de mucha ayuda a aquellos que nos iniciamos en este mundillo. Bueno y a los que ya llevan iniciados algun tiempo :-). A continuación te planteo un problema que se me presenta y dada mi escasa experiencia en hojas de cálculo no puedo llevar a cabo. Haber si me puedes ayudar.

Importo estos datos desde una Web. Los configuro para que se actualicen cada "x" tiempo.

22 36 45 22
65 56 45 00
00 22 45 44

La pregunta es, ¿que tendría que hacer para que cada vez que se actualicen esos datos se copien en celdas diferentes?. Es decir:

Sin actualizar
A partir de A1
22 36 45 22
65 56 45 00
00 22 45 44

Actualizo ...

A partir de A4

22 36 45 22
65 56 45 00
01 22 45 42

Vuelvo a actualizar ...

A partir de A7

23 36 45 22
65 56 45 00
00 22 44 44

Y así sucesivamente.

Gracias por adelantado.

Saludos
Josep

Javier Marco dijo...

Seguramente importarás los datos a través de un macro, ¿no?. Pues donde tienes el código, y le dices que empiece a escribir en A1 (debes tener algo como esto: Range("A1").select), tienes que cambiarlo, para que vaya a escribir a la primera fila vacía.

Aquí está explicado: recorrer una columna hasta encontrar una celda vacía.

Anónimo dijo...

Hola Javier. La verdad es que en esta ocasión utilizo una opción de open office calc(también utilizo Microsoft Office Excel como es obvio) que aparece en el menú insertar llamada "vincular datos externos". De todos modos voy a probar a hacer esto en Excel haber cual es el resultado. (utilizando lo que has mencionada arriba.) Aunque con lo "torpe" que soy se prevee algo parecido a un desastre. De nuevo gracias, Javier.

Saludos.
Josep

Anónimo dijo...

Hola de nuevo Javier. Te importaría darme un e-mail de contacto para enviarte lo que pretendo hacer detalladamente para ver si tu puedes hacerlo. Si es necesario te pago lo que me pidas (razonadamente claro):-) Es que si no fuera porque lo necesito y no hay manera de que me salga ... Espero tu respuesta.

Saludos
Josep

Anónimo dijo...

Ya no hace falta Javier. Afortunadamente ya he conseguido hacer lo que pretendía. Todo es ponerse y trastear un poco los recursos de los que uno dispone. Gracias de todos modos.

Saludos
Josep

Javier Marco dijo...

Me alegro que hayas podido resolver el asunto.

Un saludo.

Anónimo dijo...

Hola Javier:

Increible tu página. Uso excel y creía que sabía algo, ahora me doy cuenta de la realidad.
Además tengo una pregunta a la que no he encontrado respuesta y he dado vueltas. He visto como concatenar, separar cadenas de texto... pero no he encontrado como separar palabras. Mi problema es que tengo un cuadrante (compartido). En la fila 1 estan colocado los nombres de los empleados y en la columna a estan colocados los días del año.
Por ello por ejempl la fila 2 seria del primer día del año, la tres el segundo y así sucesivamente (lo mismo ocurre con las columnas). Cuando le hago el control de cambios me devuelve la celda que ha sido cambiada (AA21, B13, CD2) por la distribución del mismo para mí las letras (columnas) tienen un significado (empleados) y los numeros (filas) otro (fechas).
Mi pregunta es ¿como puedo separar el nombre de la celda (letras por un lado y numeros por otro) cambiada para que me diga a quien se ha cambiado y que día?, o me estoy complicando la existencia y exite un método más sencillo?

Muchas gracias

Javier Marco dijo...

Puedes probar algo como este ejemplo que acabo de hacer:

Sub columnayfila()
'celda donde estamos
celda = ActiveCell.Address
'quitamos los valores absolutos (si los hay)
celda = Replace(celda, "$", "")
celda_entera = celda
'eliminamos los números de la fila
numeros = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
For j = 0 To UBound(numeros)
celda = Replace(celda, numeros(j), "")
Next
'celda
MsgBox (celda_entera)
'fila
MsgBox (Range(celda_entera).Row)
'columna
MsgBox (celda)
End Sub

Saludos

Dae dijo...

Gracias por tu ayuda, me ha servido de mucho
Suerte con todo

Anónimo dijo...

muy buen trabajo, he hecho una pequeña hoja de calculo para calcular precios de coste de fabricacion en piezas de estampacion por prensas hasta 7 fases,podria enviartela para que la revises? seguro que se puede mejorar.
un saludo
Juan

Anónimo dijo...

Hola, me parece de mucha utilidad tu pagina, especialmente para los que estamos empezando a utilizar excel, bueno tengo un problema y quisiera saber como solucionarlo, mira tengo un libro de excel en donde vacio la informacion de varias bases de datos, utilizo diferentes formulas para ello, pero cuando cierro el libro y lo vuelvo abrir me arroja #valor, y debo abrir los libros de excel de donde obtengo los datos, esto resulta engorroso porque son varios libros que los utilizo como base de datos, necesito saber como remediarlo pero sin necesidad de abrir todos los libros. Desde ya espero una solucion por favor.

Anónimo dijo...

Hola, esta estupendo todo lo que publicas y muy bien explicado, Felicidades...
Tengo una pregunta se puede enviar informacion a una pagina web (search)desde excel?

Unknown dijo...

Hola Javier:
Me gustaria me ayudaras con un archivo de excel, me pasas tu correo para explicarte mis necesidades, mandarte una muestra del archivo y lo que busco ?
te agradeceria mucho me ayudes.
Salujdos desde Mexico.
Julio Cesar Perez:
JCPEREZ99@GMAIL.COM

Anónimo dijo...

Quisiera lo primero agradecerte tu gran trabajo con todos los ejemplos que has puesto para el uso de todo el mundo.

Y abusando de tu generosidad quisiera si es posible que a traves de una macro me solucionaras un problema que tengo para mover datos. Te explico:

En un libro tengo un monton de registros pertenecientes a un monton de clientes (la identificacion del me los mismos es númerica) y cada uno de estos clientes tienen un monton de registros mas o menos asi:

1 1000
2 500
3 5000
2 100
1 700

¿Como podría partiendo de esta hoja crear una hoja nueva dentro del mismo libro o en un libro nuevo para cada uno de los clientes y copiar o mover los registros de cada uno a su hoja?

Gracias de antemano por tu generosidad

Javier Marco dijo...

Algo como esto te podría servir:

Sub copiarypegar()
'Preguntamos el código del cliente
cliente = InputBox("Introducce el nº de cliente")
'Seleccionamos la hoja1 y la celda A1
Hoja1.Select
Range("A1").Select
'hasta que no encuente una celda vacía...
Do While Not IsEmpty(ActiveCell)
If ActiveCell = CSng(cliente) Then
'pasamos los datos a un array, separando
'cada elemento con #, y añadimos el dato
'de la celda de la derecha
datos = datos & "#" & ActiveCell.Offset(0, 1)
End If
'bajamos una fila
ActiveCell.Offset(1, 0).Select
Loop
'eliminamos el primer caracter
datos = Right(datos, Len(datos) - 1)
'escribimos los datos del array
dato = Split(Trim(datos), "#")
'Añadimos la hoja del cliente
Sheets.Add
ActiveSheet.Name = "Cliente " & cliente
'nos situamos en A1
Range("A1").Select
'mientras haya elementos
For i = 0 To UBound(dato)
'que los vaya escribiendo uno tras otro
ActiveCell = dato(i)
'bajamos una fila
ActiveCell.Offset(1, 0).Select
Next
End Sub

Si lo ejecutas varias veces para el mismo cliente, te dará error, porque intentará crear una hoja ya existente. Para evaluar la existencia o no de una hoja de cálculo, y crearla, te recomiendo que te leas esto: crear hojas con un clic

Anónimo dijo...

Javier:
Sencillamente fantastico, te agradezo enormemente tu trabajo, has sido perfecto y tu respuesta de una rapidez increibe.

Lo que ocurre es que no me explique bien y solo me copia los datos de la colunma de al lado (B) y realmente tengo mas colunmas con datos y quisiera que me las copiara todas, si fueras tan amable de decirme como hacerlo
Gracias anticipadas

Javier Marco dijo...

Te lo descontarán de la nómina de este mes, pues una parte de tu sueldo me lo ingresarán en mi cuenta :-)

Aquí lo tienes, con un ejemplo en el que hay 3 columnas con datos a la derecha del código del cliente. Si tienes más columnas, la técnica es muy sencilla, ...solo tienes que mirar el código, y adaptarlo para que te copie y pegue tantas columnas como necesites:

Sub copiarypegar()
'Ocultamos el procedimiento
Application.ScreenUpdating = False
'Preguntamos el código del cliente
cliente = InputBox("Introducce el nº de cliente")
'Seleccionamos la hoja1 y la celda A1
Hoja1.Select
Range("A1").Select
'hasta que no encuente una celda vacía...
Do While Not IsEmpty(ActiveCell)
If ActiveCell = CSng(cliente) Then
'pasamos los datos a un array, separando
'cada elemento con #, y añadimos el dato
'de la celda de la derecha
datos1 = datos1 & "#" & ActiveCell.Offset(0, 1)
datos2 = datos2 & "#" & ActiveCell.Offset(0, 2)
datos3 = datos3 & "#" & ActiveCell.Offset(0, 3)
datos4 = datos4 & "#" & ActiveCell.Offset(0, 4)
End If
'bajamos una fila
ActiveCell.Offset(1, 0).Select
Loop
'eliminamos el primer caracter
datos1 = Right(datos1, Len(datos1) - 1)
datos2 = Right(datos2, Len(datos2) - 1)
datos3 = Right(datos3, Len(datos3) - 1)
datos4 = Right(datos4, Len(datos4) - 1)
'escribimos los datos del array
dato1 = Split(Trim(datos1), "#")
dato2 = Split(Trim(datos2), "#")
dato3 = Split(Trim(datos3), "#")
dato4 = Split(Trim(datos4), "#")
'Añadimos la hoja del cliente
Sheets.Add
ActiveSheet.Name = "Cliente " & cliente
'nos situamos en A1
Range("A1").Select
'mientras haya elementos en la 1ª columna,
'es decir, códigos de cliente...
For i = 0 To UBound(dato1)
'que los vaya escribiendo uno tras otro
ActiveCell = dato1(i)
ActiveCell.Offset(0, 1) = dato2(i)
ActiveCell.Offset(0, 2) = dato3(i)
ActiveCell.Offset(0, 3) = dato4(i)
'bajamos una fila
ActiveCell.Offset(1, 0).Select
'Mostramos el procedimiento
Application.ScreenUpdating = True
Next
End Sub

Anónimo dijo...

Muchisimas gracias, eres un fenómeno.
Respecto a la parte del sueldo siento comunicarte que dada la crisis, ya tienes delante para cobrar al Juzgado, a Hacienda, al Banco, a .....

tendrás que esperar.

De nuevo muchas gracias

PauLito dijo...

HOLA QUE BUEN BLOG MAN NECESITO UNA AYUDA, YA QUE TRABAJO DIGITANDO FACTURAS Y OTRAS COSAS, COMO HAGO PARA QUE ME MUESTRE LA FECHA, POR EJEMPLO SI EN A1 COLOCO 03 QUE ME DEVUELVA 03/03/2010 EN B2 O SI ES POSIBLE EN A1, YA QUE TARDO DIGITANDO LO DEMAS.GRACIAS MASTER

Unknown dijo...

Javier, ante todo gracias por tu blog porque es impresionante.

Pretendo utilizar 2 de tus ejemplos, uno el de crear hoja con un click y otro el de copiar y pegar (el que se crean hojas pasando los datos de un cliente a una nueva hoja dentro del libro); pero al utilizar el crear ya existe la hoja por lo que la parte del segundo ejemplo en la que se crea la hoja 'Añadimos la hoja del cliente
Sheets.Add
ActiveSheet.Name = "Cliente " & cliente hay que modificarla para selecionar la hoja que se creo anteriormente y que se llama como el numero de cliente que introducimos en el segundo ejemplo a traves de inputbox.

No se si me explico muy bien pero basicamente es recordar el numero de cliente del inputbox para en lugar de crear la hoja seleccionarla porque ya la hemos creado con el primer ejemplo

Gracias de antemano

Javier Marco dijo...

Sustituye esto:

'Añadimos la hoja del cliente
Sheets.Add
ActiveSheet.Name = "Cliente " & cliente

Por esto otro:

'seleccionamos la hoja (si ya existe)
Sheets("Cliente " & cliente).Select
'si ya la tenemos, no tendremos errores
If Err = 0 Then
'borramos todo lo que haya
Cells.Select
Selection.Delete
Else
'Añadimos la hoja del cliente
Sheets.Add
ActiveSheet.Name = "Cliente " & cliente
End If

Unknown dijo...

Javier, he probado a sustituir el codigo tal como me decias, pero el problema es que despues de crear la hoja con un clic y ejecutar la macro copiarypegar, me creaba otro hoja con el nombre HOJA2(2), y en la creada con un click me copia los datos del primer registro y en la segunda fila el dato de la hoja2; despues de intentar encontrar el problema, utilize individualmente el ejemplo de crear hoja con un clic y cambié los nombres que tu usas (Joaquin Sabina, Fito, etc.)por numeros (1,2,3,4) y en este caso al hacer clic la primera vez en el numero crea la hoja, si haces de nuevo clic en el mismo numero en lugar de ir a la hoja ya creada es cuando crea otra nueva con el nombre HOJA2(2). Con los nombres no pasa, pero si con los números.

No se si es molestarte demasiado, pero bueno viendo tus rápidas y buenas respuestas entiendo que no.

De todas formas por no complicarlo mucho a lo mejor resulta más comodo explicarte exactamente lo que necesitaria.

La macro de "copiarypegar" me va bien, pero lo que me interesa es tomar una hoja de ejemplo como en "crear hoja con un clic" para que me tome el formato de esa hoja de ejemplo en la nueva que se cree añadiendo los datos de copiar y pegar.

No se si te lo estoy aclarando o liando más.

Muchas gracias

Anónimo dijo...

Hola Javier Marcos,

Me encanta tu blog, tiene un montón de trucos (y archivos con macros para los que no nos manejamos con el VBA) muy bueno.

Tengo una duda para ver si me la puedes aclarar. Me han pasado una macro del programa estadístico SAS, y como no tengo dicho programa ni sé manejarlo, me gustaría saber si es posible adaptar dicha macro para poder usarla en excel.

He intentado encontrar tu correo en el blog para enviarte el archivo y que lo veas para que me comentes. Si crees que es posible y me puedes ayudar hazmelo saber y díme como te hago llegar el archivo que contiene el código de la macro.

Gracias por adelantado y enhorabuena de nuevo por el blog.

Nanjiro dijo...

Wow uan excelente pagina, recien estoy ingresando al mundo de las macros y tu pagina me parece muy bien hecha, detallada y consisa, pero tengo algunas dudas ojala me puedas ayudar

quiero crear una macro donde cada vez que haga clic al inicio de la fila elimine las demas celdas de la fila (no la primera celda sino las demas), estoy k intento e intento y no me sale, como recien estoy en esto, podras ayudarme, espero k si pero igualmente FElciidades por la Pag. me sirvio de mucha ayuda ya k recien estoy aprendiendo

Sigue pa lante

roger_gv1@hot...

Javier Marco dijo...

Copia y pega esto en la hoja del libro donde quieras hacer eso:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'pasamos a una variable, la fila 1
datos = "1:1"
If Not Application.Intersect(Target, Range(datos)) Is Nothing Then
'eliminamos la columna
ActiveCell.EntireColumn.Delete
End If
End Sub

Eso lo que hace es que si te sitúas encima de cualquier celda de la fila 1, automáticamente, esa columna entera se elimina.

Saludos.

Nanjiro dijo...

Wow muchas gracias por el codigo ^^ elimina columnas, modificando logre elimar las filas pero enteras )pero ya estoy creando algoa pa solucionarlo, ahora solo falta acoplar para que cumpla su mision, eso ya lo hare yo. Domo Arigato!!! por su ayuda

Anónimo dijo...

Muchas gracias por tu colaboración. Nos ayuda a muchos. Aprovecho la oportunidad para plantearte una duda. Trabajo con varios de texto que al abrir una macro convierte las columnas y las filas, pero a la hora de quererlos guardar con XLS no puedo grabar eso en la macro. ¿Se te ocurre còmo hacerlo? Seguro que sí. Muchas gracias de nuevo

Javier Marco dijo...

Mírate estos artículos:

¿Cómo leer un fichero de texto desde Excel?
Ejemplo de importación de un fichero de texto
Grabar una hoja de cálculo en un fichero de texto

Saludos.

Monchu dijo...

Javier por casualidad he encontrado tu Blog trasteando por la red buscando ayuda sobre excel y me ha sorprendido gratísimamente todo lo que aqui publicas y la gran ayuda que prestas a la gente que te pregunta.
Abusando de tu disposición, y partiendo de un ejemplo que he encontrado "el que denominas copiarypegar" necesitaria que me dirigeras como adaptarlo para que en lugar de introducir el numero de cliente a través del inputbox, fuera automáticamente la macro la que examinara los clientes que existen y creara la hoja para cada uno de ellos y copiara los registros de cada uno en su hoja.
Resumiendo lo que hace pero que no preguntara el cliente sino que lo realice automáticamente por los existentes

Anónimo dijo...

Saludos, he observado con gran detenimiento tus ejemplos, y seguire estudiando otros, la verdad es que se entiende bien tanto la explicacion como los ejemplos .
¿no se te ha ocurrido hacer un manual y ponerlo en pdf?
cuanto mas se lee mas se aprende. sigue así, yo te conocí a traves de un foro que suelen ayudar mucho, se llama http://www.todoexcel.com
por si a alguien le interesa, y hay otro manual aunque ya tiene un par de años que explica bastante bien ejemplos de macros y te va introduciendo en el mundillo de la programación se llama "vba excel 2002/2000 49 ejercicios practicos/ fermí vila" a mi me gusto mucho.
un saludo y sigue así
anonimo

Javier Marco dijo...

Gracias tu comentario y las referencias a la web y al libro.

Se me ha ocurrido pasar todo, o gran parte del blog (al menos lo más interesante), a PDF, y algún día lo haré. El problema es que no tengo demasiado tiempo para ello, pero es algo que tengo en mente.

Saludos.

Monchu dijo...

Javier, el pasado día 13 te deje un mensaje agradeciendo tu blog y haciendote una consulta para modificar el ejemplo de COPIAR Y PEGAR", pero no has contestado y si lo has hecho con otros comentarios posteriores. Quisiera saber si existe algún problema o no he realizado algo de forma correcta

Javier Marco dijo...

Hola Monchu. No hay ningún problema en tu consulta.

Solo comentarte que no puedo estar adaptando todos los ejemplos a cada caso particular, pues creo que con lo que había contestado en la anterior consulta era una buena base para empezar a trastear con el tema. Puede haber cientos de variantes en ese tema, pero creo que la base está puesta, y que a partir de ahí acda uno debe ser quien lo adapte a sus necesidades.

Un saludo.

Salvador dijo...

Hola!!!
Acabo de encontrar este sitio casi de casualidad, porque ando buscando una solucion a un pequeño problema que me ha surgido con una pagina excel. si no es mucha molestia te comento haber que opinas....

Resulta de que se trata de archivo excel en el que yo manualmente le voy introduciendo datos y me gustaria saber como hacer una macro en la que me copie el texto o lo que hay desde la casilla A1 hasta la ultima que tenga texto, que logicamente a cada vez que yo introduzco un dato nuevo, cambia esa casilla.

Osea copiar desde la castilla A1 hasta la xxx??? como puedo hacer eso??
gracias, de antemano.

Javier Marco dijo...

Prueba esto:

Sub copypaste()
'nos situamos en la hoja1, celda 1
Hoja1.Select
Range("A1").Select
'seleccionamos el rango continuo hasta abajo
Range(Selection, Selection.End(xlDown)).Select
'copiamos el rango
Selection.Copy
'Nos vamos a la hoja2, celda 1, y pegamos
Hoja2.Select
Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub

Saludos

Salvador dijo...

Hola Javier.
Te comento. Muchas gracias por las molestias, lo he provado y no me a dado el resultado esperado. Te tengo que decir que yo de visual basic no se apenas nada, lo unico que se me hace algo comprensible gracias a mis comienzos desde el basic del spectrum jeje que tiempos, y es facil de entender, por eso no se plasmar en visual basic lo que necesito. Pero mira te pongo una instruccion que encontre que es casi lo mismo que necesito, solo que en vez de establecer el area de impresion lo que necesito es que esa area la copie y la pegue por ejemplo a partir de la casilla 100 en esa misma hoja.



Sub AreaImpresion()
'
' Macro grabada el 28/06/2003 por EMM.
Dim primera, ultima As Variant
Range("A1").Select
If ActiveCell.Value = "" Then
Selection.End(xlToRight).Select
End If
primera = ActiveCell.Address
ActiveCell.SpecialCells(xlLastCell).Select
ultima = ActiveCell.Address
ActiveSheet.PageSetup.PrintArea = (primera & ":" & ultima)
End Sub

He intentado modificar esa instruccion para conseguir lo que quiero, pero me da error.

A groso modo se trata de copiar desde la casilla A1 hasta la F5, pero luego introsuzco nuevos datos y ya cambia a la casilla F7 y luego si introduzo nuevos datos seria hasta la casilla F9... y asi hasta que esten todos los datos y por eso cada vez que indroduzco un nuevo dato el area a copia es diferente (A1:F¿?).

saludos y muchas gracias por todo, eres genial.

Salvador dijo...

Javier, perdona que te moleste otra vez, pero creo que he encontrado lo que buscaba. Me da el resultado que quiero pero me gustaria que lo mirases y me comentases si lo ves correcto ya que yo soy super principiante como ya te comente antes.


Sub Macro1()
'
' Macro1 Macro
' Macro grabada el 21/04/2010 por SPR
'

'
Dim filalibre As Integer
ActiveWorkbook.Sheets(1).Activate 'selecciona la Hoja 1
Range("A1").Select
'el control se hará sobre la columna A, a partir de la fila
While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Select
'si la celda contiene datos, pasa a la fila siguiente
Wend
filalibre = ActiveCell.Row
'guarda en la variable filalibre el número de la primer fila sin datos.
'muestra el valor en celda "B2"
Range("B2") = filalibre
Range("A1" & ":F" & filalibre - 1).Select
Range("F" & filalibre - 1).Activate
Selection.Copy
ActiveWindow.SmallScroll Down:=81
Range("A100").Select
ActiveSheet.Paste
End Sub


---------------------------



Saludos y gracias por todo. de verdad tu blog me va a ser de mucha utilidad.

Javier Marco dijo...

El código que te puse yo, hace exactamente lo que buscas. Deberías probarlo.

Un saludo.

Salvador dijo...

Javier, el codigo que me pusistes deberia de hacer lo que dices, pero seguramente no te explique todo correctamente o no supe usarlo bien porque me copia y pega solo en la casilla A1 y A2, entonces seguramente yo este haciendo algo mal, pero ya te digo que he podido al final hacer lo que buscaba, ahora paso al siguiente punto de mi proyecto, que es que me ponga una formula "=E2" en la casilla E3 y F3. luego eso mismo en la E5 y F5 y asi hasta las ultimas E y F que tengan datos.... esta tarde cuando llegue del trabajo me pondre con eso, no creo que sea dificil.
saludos Javier y que tengas un uen fin de semana.

Anónimo dijo...

Hola quisiera saber como calcular en el excel una TIR para un leasing donde solo tenes el valor de bien que queres comprar por leasing y los pagos de las cuotas del leasing

Javier Marco dijo...

Móntate una tabla con las fechas, como la que muestra el artículo llamado calcular la tir para periodos irregulares, y listo, así no tendrás problemas.

La inversión inicial sería el valor del bien (máquina, coche, etc.), a día de hoy, es decir, el valor del bien al contado.

Unknown dijo...

Excelente pagina, encontre varias cosas que tenia tiempo buscando.

Aprovechando el mensaje, me gustaria saber si se puede copiar informacion de otro libro segun seleccione el usuario, es decir si selecciona el libro 1, que pueda tomar informacion de dicho libro y si selecciona otro pues que sea del otro del que se tome la informacion.

De antemano muchas gracias.

Jose dijo...

Hola!
nada, buscando buscando he llegado hasta aquí, y quería preguntar una cosa que me pasa.
Resulta que he hecho una rutina en VB, para que calcule unos códigos, combinando varias celdas (vamos, todas las combinaciones que se puedan hacer entra varias celdas).
El resultado es que salen (bueno, saldrán xq lleva ya 3 o 4 horas calculando) 755.040 filas.
Esto para manejar con Excel es un coñazo, cada vez que hay que filtrar o modificar algo...
La pregunta es: ¿hay algún programa que no sea Excel, que esté más optimizado para este tipo de cosas?

Gracias!!!!

Javier Marco dijo...

Pues para almacenar gran cantidad de información, y acceder a ella fácilmente, están las bases de datos. Tienes un ejemplo, en los foros de internet, donde la mayoría utiliza bases de datos MySQL, y donde puede haber millones de mensajes de los usuarios (forosdelweb.com, forocoches.com, etc). Ahí se almacena la información, y se accede a ella mediante sentencias SQL. Si todo está bien hecho, las consultas devuelven resultados al instante, en el 99,99% de los casos.

Puedes utilizar una base de datos Access (probablemente la más sencilla de todas, pero aún así, suficientemente potente), o incluso también puedes hacerlo con una SQL server (ambas son de Microsoft).

Fabricio Maminote dijo...

Muchas gracias por compartir tanta info. Primero continuaré aprendiendo yo y también mis alumnos. A Favoritos y directo al blog del colegio! Un saludo Javier, desde Jujuy - Argentina.-

Javier Marco dijo...

Muchas gracias por el comentario :-)

Unknown dijo...

Estimado espero me puedas ayudar:

Estoy diseñando un formulario en VBa Excel 2007. Tengo el siguiente código para imprimir

Private Sub CommandButton2_Click()
Me.printform
End Sub

Lo que deseo es poder imprimir horizontalmente y poder agregar un texto en el pie de la página

Espero me puedas ayudar

Atte.

Cristián

Anónimo dijo...

Buenos dias sr javier me parece muy interesante su blog ya que he resolvido varios problemas con excel gracias a sus importantes publicaciones. Pero ultimamente tengo un problema que no lo he podido resolver y queria ver si usted me podia ayudar: estoy realizando una base de datos descargando informacion de uno de los add-ins de excel que es el aspen process explorer, y yo necesito que se descargue esa data rompa los vinculos pero que pueda seguir descargando informacion cada vez que abra la hoja excel de forma automatica sin yo volver a ponerme a descargar datos de formar manual.
Dichos datos para descargarse depende de una fecha inicial, una final, casilla de salida y un nombre de variable. de hay el realiza su trabajo. Me gustaria poder recibir su ayuda para este caso.
Sin mas que decir y deseandole el mayor de los exitos desde venezuela se despide carlos.

Anónimo dijo...

Soy novate pero me gusta programar.
Situación: intento hacer un formulario que lea a traves de un Listbox 9 columnas de cada hoja en mi libro. No se cómo traducir el ancho de las columnas de la hoja a pts para el rowsource del Listbox. Hice una Sub pero se me complica. Seguro que vos tenés alguna manera más sencilla. Gracias!!!

Anónimo dijo...

Hola!
Gracias Javier Marco por tus aportaciones, para los que somos novatos en el manejo del Excel y se nos complican los números, tus conocimientos son una excelente fuente de información ¡Te considero como un oasis en el desierto! para los que estamos sedientos de información con respecto a esta herramienta todo lo que nos presentas es oro molido.
Continúa con tu excelente trabajo!
Saludos desde México, recibe un cordial abrazo de Rafa Llamas.

Javier Marco dijo...

Mucha gracias por tu comentario Rafa. Solo intento compartir aquellas pocas cosas que sé, y que pueden ser de utilidad a los lectores del blog :-)

Anónimo dijo...

Hola javier...Primero felicitarte por tu exelenet blog...me ha ayudado mucho.
mi consulta es la siguiente
tengo una lista de productos que deseo distribuir estan en una tabla x con numeros o contadides...quiero que al elegir un elemento me lea esos datos y me los envie a una planilla y que a medida que vaya colocando los valores baje una fila...bueno y si no fuera mucho que en la hoja donde esta la lista me vaya diciendo que x producto ya ah sido seleccionado...de ante mano muchas gracias por la ayuda, y nueva mente felicitarte por lo bueno y completo de tu blog


Felipe.

Unknown dijo...

Fabuloso me ha encantado.
Os animo a seguir y os realizo una petición.
¿ Tenéis algo de como incorporar emoticonos en Excel?

Javier Marco dijo...

Gracias Jorge, pero de momento, pensaremos en cosillas que sean realmente útiles para el usuario ;-)

Un saludo.

Anónimo dijo...

holignieJavier

Acabo de conocer el blog, me parece excelente, por favor no lo dejes es una fuente de consultas imperdible para los que hablamos español.
Gracias

Javier Marco dijo...

Gracias por tu comentario. No os preocupéis que no voy a abandonar el blog :-)

Anónimo dijo...

MUCHAS GRACIAS POR COMPARTIR TUS CONOCIMIENTOS Y TU TIEMPO CON NOSOTROS,EN VERDAD QUE ESTAMOS EN DEUDA CONTIGO. QUE ESTES BIEN Y
QUE EL SEÑOR TE COLME DE BENDICIONES.UN ABRAZO.

Gustavo S. dijo...

Saludos Javier, soy Gustavo de Venezuela, he estado aprendiendo excel y haciendo algunas cosas con el, llevo el control de la administración del condominio del edificio donde vivo en hojas de excel y buscando algo para aprender macros y poder automatizar las hojas de calculo que he hecho me tope con tu blog, si tienes algo relativo a condominios, vale la ayuda y gracias, si no muchas gracias igual porque con el manual de las 33 funciones estoy aprendiendo

Miguel Ángel Ruiz dijo...

HOLA. TIENES UN BLOG EXCELENTE CON EL QUE ESTOY APRENDIENDO MUCHO. TE TENGO ENTRE LOS FAVORITOS Y SE LO HE RECOMENDADO A MIS AMIGOS. GRACIAS. UNA PREGUNTITA: ME GUSTARIA POR MEDIO DE UNA MACRO PODER PONER BORDES A UNA TABLA CON 5 COLUMNAS. ES DECIR, QUE BUSQUE LOS ELEMENTOS REPETIDOS DE LA PRIMERA COLUMNA NOMBRES, SI ENCUENTRA 5 ANTONIO DIAZ Y 4 PEDRO HERNANDEZPERO, POR EJEMPLO, ME SEPARE CON UN RECUADRO O CON UN BORDE CON ALGUN COLOR DE FONDO,CADA UNO DE LOS BLOQUES DE ELEMENTOS REPETIDOS POR CADA NOMBRE, PERO QUE EL BORDE NO SOLO SEA DE LA COLUMNA NOMRRE SINO DE LA COLUMNA A(NOMBRE) A LA 5 COLUMNA(ULTIMA, PARA ASI PODER DISTINGUIR CLARAMENTE LOS BLOQUES DE ELEMENTOS REPETIDOS DEL LISTADO ORDENADO ALFABETICAMENTE. GRACIAS POR TU AYUDA

Anónimo dijo...

Excelente Blog. Muchas gracias por tu ayuda. Esta consulta es parecida a la anterior que está en este blog, pero como no he visto respuesta, te hago mi pregunta. Es posible por medio de una macro o programación que me unifique y ordene alfabeticamente varias hojas en una sola y quede marcado de amarillo toda la fila(que tiene varias columnas) que tenga datos de elementos duplicados por un campo determinado(ejemplo por nombre). muchas Gracias por tu ayuda.

Anónimo dijo...

Hola:
Lo primero darte las gracias por lo mucho que compartes y el tiempo que eso supone.
Segundo si me puedes ayudar con esto te lo agradeceria

Sub Copia_resumen()
'
' Copia_resumen Macro
' Macro grabada el 24/06/2012 por UsuarioA
'

'
Dim StrArchivos As String
Dim StrCarpeta As String
StrCarpeta = "C:\Documents and Settings\usuario A\Mis documentos\Estudios\hechos a mano para control\"
ChDir StrCarpeta
StrArchivos = Dir("*.xls")

' ChDir _
"C:\Documents and Settings\usuario A\Mis documentos\Estudios\hechos a mano para control"
' Workbooks.Open Filename:= _
"C:\Documents and Settings\usuario A\Mis documentos\Estudios\\hechos a mano para control\180min W 2 3.xls"
Do While StrArchivos <> ""
Workbooks.Open Filename:=StrCarpeta & StrArchivos

ActiveCell.Offset(-4, -92).Range("A1").Select
Selection.Copy
Windows("Resumen 1998 2011 Suben Bajan.xls").Activate
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveCell.Offset(0, 1).Range("A1").Select
Windows(Filename:=StrCarpeta & StrArchivos).Activate
ActiveCell.Offset(0, 3).Range("A1").Select
Application.CutCopyMode = False
Selection.Copy
.......
....

Windows("Resumen 1998 2011 Suben Bajan.xls").Activate
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.End(xlToLeft).Select
Selection.End(xlToLeft).Select
Windows(Filename:=StrCarpeta & StrArchivos).Activate
ActiveWindow.Close
StrArchivos = Dir
Loop
End Sub
intento hacer un resumen de los resultados de muchas libros que tengo en el mismo directorio
Gracias de antemano
Manuel
PD he cortado la macro por que me ha dicho maximo 4.096

Anónimo dijo...

Hola:

Ya lo he solucionado he sustituido esta linea "Windows(Filename:=StrCarpeta & StrArchivos).Activate" por "Windows(StrArchivos).Activate" y ya me funciona.

Te voy a pedir ayuda, por si puedes decirme por que la macro que te pongo a continuacion, me genera archivos buenos que abro despues de haber guardado y al cerrar sin haber hecho nada, me vuelve a preguntar si guardar cambios.

(solo el final)

Range("G2").Select
ActiveCell.FormulaR1C1 = "=CELL(""nombrearchivo"",R[-1]C[-6])"
Range("I2").Select
ActiveCell.FormulaR1C1 = " "
Range("J2").Select
ActiveCell.FormulaR1C1 = "180min W "
Range("N4").Select
Selection.End(xlDown).Select




actual = Range("g2").Value
ruta = "C:\Documents and Settings\usuario A\Mis documentos\Estudios\180min w\180 3\"
nom = Range("j2").Value
medC = Range("k2").Value
espac = Range("i2").Value
medL = Range("n2").Value


ActiveWorkbook.SaveCopyAs ruta & nom & medC & espac & medL & ".xls"



End Sub

Gracias
Manuel

Javier Marco dijo...

Así a bote pronto, veo que estás modificando algunas celdas, como G2, I2 y J2 por ejemplo.

Para evitar la pregunta esa de si deseas guardar, mírate esta entrada del blog: omitir avisos al ejecutar un macro.
Saludos.

Anónimo dijo...

Hola Javier

Lo que hace la macro, lo hace bien y no me sale ningun mensaje.
La macro modifica un archivo y genera otro con otro nombre y me guarda el primero sin cambios y el segundo con los cambios, hasta aqui todo perfecto.
El problema es que creo le debe de faltar algun atributo al nuevo, por que si lo abres y lo cierras (no con macro, si con excel, el explorador de windows, etc) sin hacer nada en el siempre te pregunta si guardar canbios (incluso si lo has cerrado aceptando guardar y lo vuelves a abrir y cerrar sin hacer nada).
Salu2 y muchas gracias

Manuel

Unknown dijo...

Hola Javier, tengo un problema con respecto a los comentarios de celda, resulta que tengo algunas celdas comentadas en el lado derecho de la ventana,pero cuando aparece el comentario, este queda fuera de la pantalla y no encuentro la manera de modificar la posición en la que aparece para situarlo más a la izquierda. ¿Es posible modificar la ubicación, predeterminada, de los comentarios de celda?

Gracias de antemano por tu gran trabajo.

jorge dijo...

Ando loco con el siguiente tema, si alguien puede ayudarme, lo agradezco:

Restaurante | año | mes | producto | ventas

En esa estructura se almacenan los datos de varios restaurantes de comida rápida, a través de varios años con sus respectivos meses, indicando las ventas de los distintos productos.

A través de 2 tablas dinámicas visualizo los dato de dos años distintos o bien iguales pero de distintos restaurantes, para hacer una comparativa. La cuestión es la siguiente:
Es posible hacer una tercera tabla dinámica que muestre el incremento porcentual, o decremento, de los distintos productos, de los datos de la tabla dinamica 1 respecto de los datos de la tabla dinámica 2?. Ejemplo: si el producto HAMBURGUESA del año 2011 mes octubre vendió 10.000 euros, y en el año 2012 mes noviembre vendió 20.000 que la tabla dinámica 3 muestre el incremento de HAMBURGUESA, o sea muestre: 100%.

Gracias anticipadas. REalmente no sé si se puede hacer, pero si sé que llevo 2 semanas buscando y no encuentro la forma.

Anónimo dijo...

Acabo de descubrir esta página.
La verdad es que me estás ayudando un montón, pues después de varios añitos sin hacer nada en VBA de Excel, esta página me está sirviendo de recordatorio. Además de utilizar tus ejemplos para avanzar en cosas que no había tocado nunca.
Continua con este trabajo.
Un saludo

Yavir dijo...

Javier:
Para saludarle por estas fiestas de fin de año y desearle lo mejor en este nuevo que inicia, que todo sea prosperidad....
Nosotros sus seguidores, a la espera de su genialidad....
Abrazos desde Perú.

Hugo dijo...

Javier, para reconocer este valioso trabajo de tu parte, que biene a ser un aporte importante para todos los que trabajamos con excel... te agradesco y como siempre, a la espera de tu retorno con tus sabios y entretenidos articulos... que pases una feliz navidad en compañia de tu familia y que este año nuevo sea prospero para ti... Gracias y muchas felicidades.

Javier Marco dijo...

Muchas gracias Hugo. Igualmente, mis mejores deseos para 2014.

Yanina dijo...

Javier:
Siempre esperamos tu retorno, ojala que en el 2015 nos sigas sorprendiendo con tu sabiduría en Excel, nosotros que necesitamos aprender con tus enseñanzas estamos agradecidos por la ayuda y dedicación de tu parte. Te deseamos unas Felices Fiestas Navideñas y un venturoso año 2015.
Felicidades y que el 2015 estés con nosotros.

Javier Marco dijo...

Muchas gracias Yanina. Feliz Navidad para tí, y para todos los lectores del blog.

En 2015 intentaré sacar tiempo de donde no lo tengo para publicar alguna entrada nueva.

Saludos.

Juanca dijo...

Javier:
Que este año 2015 sea un año de logros y satisfacciones para usted y su familia. Yo como parte de esta gran familia que usted ha formado con el Excel, espero con satisfacción de seguir contando con sus enseñanzas que tanto bien hacen a nuestro desempeño laboral y aprendizaje.
Bendiciones y lo esperamos este 2015.

Javier Marco dijo...

Igualmente Juanca. Feliz 2015.