Agrupar según valores

Hola! ¿Alguna idea para mi problema?
Imagina que tengo en la columna A una lista de validación con las posibilidades de "si" o "no", y en la B un nombre de chico o chica. Entonces en A elegiré "si" cuando sea un chico. Intento conseguir que en las celdas C y DE se me agrupen los valores de "si".
Es decir, si en un rango de A1:A5, tengo dos valores "si" (A1, A3 y A5) que me copie o me agrupe en C1 = A1, en C2 = A3, en C3 = A5,... En D1 = B1... D2=B2... No sé si me explico, a lo mejor me he enrredado.
Gracias por seguir mi problema, de antemano. Un saludo! Urge un poco...
1

1 respuesta

Respuesta
1
Vamos a ver si es esto:
A B C D
Si chico si no
No chica si
Si chico
Pero esto tan solo comprueba los Si que hay en el rango y vuelve a ponerlos en la columna C y los No en la columna D.
Aclarame esto no entiendo la misión
>Un saludo
>Julio
Hola! ¿Alguna idea para mi problema? (mejoro mi redacción...)
Imagina que tengo en la columna A una lista de validación con las posibilidades de "si" o "no", y en la B un nombre de chico o chica. Entonces en A elegiré "si" cuando sea un chico. Intento conseguir que en las columnas C y DE se me agrupen aquellas filas de A que tengas valores de "si" y, por consiguiente, su respectiva celda de B.
Es decir, si en un rango de A1:A5, tengo tres valores "si" (A1, A3 y A5) que me copie o me agrupe en C1 = A1, en C2 = A3, en C3 = A5,... en D1 = B1... D2=B2... No sé si me explico, a lo mejor me he enrredado.
Gracias por seguir mi problema, de antemano. Un saludo! Urge un poco...
Disculpa la mala explicación. La misión es la siguiente:
A B C D
Si juan si juan
No maría si pepe
Si pepe si jose
Si jose
No isabel
Intento que desaparezcan las filas de "no" y que las de sí salgan continuas y no haya filas en blanco entre ellas y que se actualice automáticamente. Los "No" no quiero hacer nada con ellos. ¿Me entiendes ahora?
Te valdría esta forma:
Si A(x) es no elimina la fila, o quieres mantener los datos de No
Aclarame esta pregunta
>Un saludo
>Julio
No, no. Sin eliminar nada. Te he dicho las columnas C y DE por decirte algo. Lo que quiero es en algún lado del libro que se me haga una lista automática de aquellas filas con valores "SI" y ya está.
Hoja 1:
A B
Si juan
No maría
Si pepe
Si jose
No Isabel
Hoja 2:
A B
Si juan
Si pepe
Si jose
Vale, mañana te lo miro, ahora a dormir que es tarde
Que descanses
¿Es posible? jeejeje. SaludoS!
Aquí esta la macro:
Private Sub Busca_Copia()
Dim cel As String
'Nos situamos en A1
Range("A1").Select
'Mientras la celda activa no este en blanco repite esto
Do While ActiveCell <> ""
'Si el valor de la celda activa es "SI"
If ActiveCell.Value = "SI" Then
'Copiamos el rango de la celda activa y la contigua de la derecha
Range(ActiveCell, ActiveCell.Offset(0, 1)).Copy
'Bajamos una fila
ActiveCell.Offset(1, 0).Select
'Nos posicionamos en la hoja 2
Sheets("Hoja2").Select
'En la celda activa pegamos los valores de SI
ActiveCell.PasteSpecial
'Dejamos activa la siguiente fila
ActiveCell.Offset(1, 0).Select
'Volvemos a la Hoja 1
Sheets("Hoja1").Select
'Si la celda activa no es "SI"
Else
'Bajamos una fila
ActiveCell.Offset(1, 0).Select
End If
Loop
'Fin de la macro
End Sub
Comprueba si te vale y si es así puntúa y finaliza la pregunta
>Un saludo
>Julio
La macro lo he puesto en VBA de la hoja 1. No actúa nada en la Hoja 2. Modifiqué la primera línea, creo que no se tecleó bien: Dim cell As String.
Si me quieres enviar algún archivo: [email protected] Un saludo Julio. Creo que estás apunto de conseguirlo :)
No es cel con 2 (eles) es cel con una (ele) solo, es el nombre que le di a la variable si has cambiado su nombre evidentemente ya no tiene valor en la macro.
Pon lo que te he dicho
>Un saludo
>Julio
Vale vale ! Prometo que no he tocado ni que voy a tocar nada más jajaj. Pero eso lo hice después de ver que no me hacía nada la hoja 2.. está todo en blanco y voy variando en la hoja 1.. pero no. Por eso lo cambié pensando que a lo mejor era por eso... ¿A ti te funciona bien? Saludos!
Pufffff de macros andas mal,(me parece) pues claro que no hace nada cuando quieras tienes que ejecutarla, tu pones datos en la hoja 1 y cuando quieras realizar lo que hace la macro pues pulsas Alt+F11 y arriba pulsas en la flechita de ejecutar (como el play de un reproductor)
Podemos poner un botón para que la ejecutes pero primero pruebalá.
>Un saludo
>Julio
Vale, si ponemos la macro que se este ejecutando permanentemente va a ser un engorro, porque si te equivocas al poner datos también los copiará, cada vez que tu pongas un si se copiara la linea y si te has equivocado y era no ya no tiene solución, por eso es mejor que introduzcas todos los datos y tu ejecutes la macro.
Para poner un botón hay dos formas o lo ponemos arriba en la barra de herramientas o en la misma hoja. Me voy a decidir en la misma hoja y así te haces el botón lo grande que quieras para que no falles al pinchar, ja ja.
Situate en tu hoja de datos, ahora pinchas arriba en Ver>Barra de herramientas>Cuadro de controles, apararecera una nueva barra de herramientas, busca un icono que es un botón y que te ayudará los mensajes que aparecen al poner el cursor sobre ellos. Pincha en él.
Ahora te sitúas en una parte llibre de tu hoja y pinchas y dibujas el botón como quieras de grande. Para cambiar el nombre al botón pincha encima de él con el derecho y elige Propiedades. En la ventana que sale localiza en la columna izquierda la propiedad Caption y en la columna izquierda estará el nombre CommandButton1, lo borras y escribe lo que quieras por ejemplo ejecutar macro. Cierra es ventana
Ahora pulsas Alt+F11 y copias la macro OJO si la primera linea  Private Sub.......
y sin la última End Sub
Cierra el editor de VBA ahora en tu hoja vuelves a pinchar con el derecho encima del botón que has dibujado y esta vez eliges ver código, en la ventana que aparece estará el cursor parpadeando pues ahí eliges pegar. Cierra el editor y ahora te sitúas en la hoja, y cierra la barra de herramientas, YA ESTA, tu botón funcionando para cuando quieras ejecutar la macro solo pulsa en él.
Saludos, y puntúa esta preguntita ya y disfruta de tu macro
>Julio
vaaaaaaaaaaaaaale lo admito! Soy un zoquete con las macros! jajajaj. Pues sí, sí que va ! Pero entonces hay que ejecutarla siempre que haya una modificación porque sino no hace nada... no hay algo cuya orden sea: si en el rango A1:B50 existe algún cambio.. ejecutar la macro X.. Y sino pues explicame el botón de macro brevemente y finalizamos. Muchiiiiiiiiiiiiiiisimas gracias jefe.
Joder macho, mira que he seguido todos los pasos tan básicos. ¿Por qué la Hoja 2 va acumulando celdas por abajo cada vez que le doy al botón? Me tiene mosca... jajaj VBA en Hoja 1. Queda así:
Private Sub Busca_Copia()
Dim cel As String
'Nos situamos en A1
Range("A1").Select
'Mientras la celda activa no este en blanco repite esto
Do While ActiveCell <> ""
'Si el valor de la celda activa es "SI"
If ActiveCell.Value = "SI" Then
'Copiamos el rango de la celda activa y la contigua de la derecha
Range(ActiveCell, ActiveCell.Offset(0, 1)).Copy
'Bajamos una fila
ActiveCell.Offset(1, 0).Select
'Nos posicionamos en la hoja 2
Sheets("Hoja2").Select
'En la celda activa pegamos los valores de SI
ActiveCell.PasteSpecial
'Dejamos activa la siguiente fila
ActiveCell.Offset(1, 0).Select
'Volvemos a la Hoja 1
Sheets("Hoja1").Select
'Si la celda activa no es "SI"
Else
'Bajamos una fila
ActiveCell.Offset(1, 0).Select
End If
Loop
'Fin de la macro
End Sub
Private Sub CommandButton1_Click()
Dim cel As String
'Nos situamos en A1
Range("A1").Select
'Mientras la celda activa no este en blanco repite esto
Do While ActiveCell <> ""
'Si el valor de la celda activa es "SI"
If ActiveCell.Value = "SI" Then
'Copiamos el rango de la celda activa y la contigua de la derecha
Range(ActiveCell, ActiveCell.Offset(0, 1)).Copy
'Bajamos una fila
ActiveCell.Offset(1, 0).Select
'Nos posicionamos en la hoja 2
Sheets("Hoja2").Select
'En la celda activa pegamos los valores de SI
ActiveCell.PasteSpecial
'Dejamos activa la siguiente fila
ActiveCell.Offset(1, 0).Select
'Volvemos a la Hoja 1
Sheets("Hoja1").Select
'Si la celda activa no es "SI"
Else
'Bajamos una fila
ActiveCell.Offset(1, 0).Select
End If
Loop
'Fin de la macro
End Sub
Pues bien lo que te he puesto yo, pero esto se lo tienes que asignar al botón, como te he explicado. La macro dice que mientras encuentre la palabra SI copiara y pegara la fila
Julio
En la Hoja 2 hay un gran revoltijo porque como no sustituye lo anterior.. se copia abajo, y así cada vez que le doy al botón. Lo ideal creo que sería que en la Hoja 2 siempre empezará a decirme la lista de los que tienen "SI" desde A1, como reseteando cada vez que le da clic. No sé si existirá alguna orden que diga: al dar clic, primero borra el contenido de Hoja 2 y después el código que me diste. De todas maneras si se tiene que quedar así pues lo finalizamos... Pienso que ahora tenemos que ir a descansar je je. Te agradezco mucho la paciencia conmigo y tu interés. Un abrazo. Hasta mañana Julio.
A ver tu mandas en la macro, lo que hace esta es buscar en la hoja 2 la primera celda vacía que hay en la columna A, si tú borras todo el contenido de la hoja 2 y pones la celda activa en A1 pues en esa celda empezará la macro a escribir, cuando pinches en el botón emepzará ahí, de esta manera si cuando sales de la hoja 2 dejas pulsada la celda por ejemplo J4 pues en esa celda escribirá, la instrucción dice
Sheets("Hoja2").Select
Vete a la hoja 2
ActiveCell. PasteSpecial
Lo que tienes copiado lo pegas en la celda activa
Como ves depende de ti como quieras tener tu hoja 2 de ordenada, borralá entera y pincha en A1, ahora te vas a hoja 1 y escribe lo que tu quieras, y cuando te parezca bien pulsas el botón.
A ver si ahora te has enterado.
>Un saludo
>Julio
Si, pero que yo me pregunto, ¿por qué en vez de Active.Cell.PasteSpecial, no hemos puesto A1? Para que siempre empiece ahí, porque también quiero tener esa hoja ordenada... si no vaya revoltijo. Intento que salga automático todo y no estar copiando y pegando luego.
Pues muy fácil, yo he entendido que repasaras toda tu columna A de tu hoja 1 y todos los "SI" que encuentre quieres llevarlo a la hoja 2. Si ponemos que pegue en A1, siempre sobrescribirá lo anterior, y la macro no se lleva todos los valores de una vez, como puedes ver hay una linea de código que empieza por Do While ( esto significa "Haz esto mientras que la celda activa no esté en blanco) y más abajo verás un Loop que significa Repite la accción desde el Do While. Osea baja leyendo instrucciones hasta el Loop y luego vuelve a la linea Do While para volver a bajar.
En esas lineas las instrucciones hacen esto:
1º Me sitúo en la hoja 1 en la celda activa, si esta es un SI copio esta celda y la contigua
2º Voy a la hoja 2 y en la celda activa pego el código
3º Vuelvo a la hoja 1 y bajo una fila hacia abajo y pongo esa celda activa y ahora repito el código desde la 1º instrucción.
Como ves no podemos poneer una celda fija A1 como tu dices porque siempre estaría pegando los valores en A1 y nunca verías todos los SI de la hoja 1.
Espero que te aclares ahora.
>Un saludo
>Julio
Sí Julio, pero si tengo 3 valores con "SI" en la Hoja 1, se copian en la "Hoja 2" cuando le haga clic al botón que dibujamos. Pero si en la siguiente fila de la Hoja 1 añado otro nombre con otro "SI", entonces habrá 4 "SI" y lo que hace es añadir en Hoja 2 los 3 de antes y los 4 actuales (los 3 de antes más el nuevo) y entonces me junto con 7 "SI", y así sucesivamente, es decir, cuanto más clic's le dé más me rellena, porque en efecto, lo que hace es copiar donde está la celda activa.
Esto hace que en la Hoja 2 no sólo me diga los "SI" actuales de la Hoja 1, sino que me agrupa toooooooodas las veces que le haya dado al botón dibujado.
Concluyo: repito que lo que quiero es que en la Hoja 2 sólo englobe los "SI" (y sus contiguos) ACTUALES. Sin ver tantas celdas :(
En el correo anterior, te dije que borres los que tienes en la hoja 2 cada vez que quieras actualizar todos, podemos poner una instrucción al principio para borrar todos y después que haga la copia, te la pongo en la macro que comienza por :
Private Sub Busca_Copia()
Busca la linea que te puse
'En la celda activa pegamos los valores de SI
Y justo encima de esta pegas estas instrucciones
Range("A1:A50").Select
Selection. Clear
Esto borrará todo antes de pegar nuevamente y siempre tendrás la hoja 2 actualizada.
>Un saludo
>Julio
Si te ha servido finaliza ya
Error 1004, en Range("A1:A50").Select.
¿Y por qué eso no se copiaría también en Private Sub CommandButton1_Click()?
Con tu respuesta cierro la pregunta, esto se ha alargado muchísimo. Discúlpame. Un saludo.
El botón para la macro no acepta la propiedad de Range cuando nos desplazamos a otra hoja, porque el botón esta en la hoja de origen, la macro hay que ponerla en un modulo y para poner un botón solo te queda otra solución, y es crearlo en la barra de herramientas, de paso aprendes y puedes utilizarlo para asignarle cualquier macro y poner tantos botones como quieras asignándoles macros diferentes. Vale empezamos:
1º Abres tu libro de Excel donde quieres poner la macro, borras el botón ( ya sabes en modo diseño lo seleccionas y supr)
2º Pinchas en Herramientas>Macro>Macros y en la ventana que aparece das nombre a la macro que en este caso es Busca_Copia, y pulsas en Crear.
3º En la ventana que aparece pegas esta macro ya tendrás el nombre y el cierre, estará el cursor parpadeando pues ahí pegas la macro:
Application.ScreenUpdating = False
Sheets("Hoja2").Select
Range("A1:B65536").Select
Selection.ClearContents
Sheets("Hoja1").Select
Range("A1").Select
If ActiveCell.Value = "SI" Then
Range(ActiveCell, ActiveCell.Offset(0, 1)).Copy
Sheets("Hoja2").Select
Hoja2.Range("A1").PasteSpecial
ActiveCell.Offset(1, 0).Select
Sheets("Hoja1").Select
ActiveCell.Offset(1, 0).Select
celd = ActiveCell.Address
Else
ActiveCell.Offset(1, 0).Select
celd = ActiveCell.Address
End If
Do While ActiveCell <> ""
Range(celd).Select
If ActiveCell.Value = "SI" Then
Range(ActiveCell, ActiveCell.Offset(0, 1)).Copy
Sheets("Hoja2").Select
ActiveCell.PasteSpecial
ActiveCell.Offset(1, 0).Select
Sheets("Hoja1").Select
celd = ActiveCell.Address
End If
ActiveCell.Offset(1, 0).Select
celd = ActiveCell.Address
Loop
Como ves no  te he puesto Private Sub Busca_Copia() ni tampoco el End Sub del final ya lo ha hecho el editor de VBA el solito.
Vale ahora cierras el editor y vuelves a tu hoja de Excel.
Ahora sigue los pasos sin perderte:
1º Pulsas en herramientas>Personalizar, en la ventana que aparece pulsas en la pestaña Comandos y bajas con la barra de desplazamiento hasta que veas en esa columna Macros, pulsa encima de la palabra Macros.
2º En la columna izquierda veras una carita en amarillo sonriente pulsas en ella y sin soltar la arrastras hasta arriba en la barra de herramientas entre los iconos que hay.
3º Abra aparecido en ella ahora sin cerrar nada pulsas encima de la carita de tu barra de herramientas con el derecho y en el apartado nombre le pones el de la macro Busca_Copia.
4º Abajo verás asignar macro pulsas en el y te aparece la ventana en la que antes pusiste el nombre, pulsas en aceptar.
5º Vuelves a pulsar con el derecho y ahora seleccionas el apartado Imagen y texto.
Ya lo tienes echo, si quieres cambiar la carita por otro icono pulsa otra vez con el derecho y elige cambiar icono.
Ya lo tienes, cierras todo y ahora pruebas a poner datos y cuando quieras ejecutar tu macro pulsas en la carita o en su defecto el icono que hayas puesto tú.
Pufffffffffffffffffffffffff
Ala a ver si ahora te funciona como quieres.
Maestro vas a salir de esta consulta
>Un saludo
>Julio

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas