Bienvenido a la mayor comunidad de usuarios EXCEL

Regístrate ahora y podrás: / 💪 Hacer preguntas a los expertos / ⬇️ Descargar ejemplos y plantillas / 🏅 Acceder a contenidos premium

Regístrate gratis

Macro mostrar personas que viajan juntas.

Palosa

New member
Hola, soy nuevo en el foro y me estoy iniciando en el mundo de las macros. Hasta ahora he realizado macros muy sencillas y me gustaría saber si es posible realizar la siguiente idea:

Tengo una lista de personas (Col.A) que han realizado una serie de viajes (Col. B) y me gustaría que al poner a una persona en la celda E1, me mostrase la lista de de acompañantes y el número de veces que ha viajado con cada uno (D4:E7).

En las columnas G, H e I he puesto la solución de las combinaciones. He estado probando con las funciones For e If pero no consigo que funcione.

1617747286451.png

No sé si será un problema demasiado complejo, en ese caso cualquier consejo que pueda ir probando será bien recibido.

En los próximos días intentaré aportar mi granito de arena y ayudar en lo que pueda en otros temas del foro.

Muchas gracias de antemano.
 

novirus

Active member
Buenas,

La respuesta es SI, se puede hacer.
Si estas aprendiendo, se puede hacer.
Consejo:
1) Debe utilizar el evento que cuando modifiques la Celda E1 (Fila 1, Columna 5) realice una acción.
Esto seria a traves de:
Código:
Private Sub Worksheet_Change(ByVal Target As Range)
...Codigo para leer Fila y Columna y almacenarlo
End Sub

2) Hacer un filtro de las columnas G, H y I del elemento almacenado, así tendrás menos registros que recorrer.
3) De ese filtro, entonces ir contándolo y almacenándolo.
Como almacenarlo, aquí es donde depende de tus conocimientos, pero para empezar crearía dos matrices, (Redim) una donde pondré el nombre del otro acompañante, y en la otra matriz (mismo elemento) el numero de veces que se repita + 1.
Para que no repitas los nombres deberías recorrer la matriz o utilizar Dictionary, pero es mas complejo pero si aprendes es muy potente.
4) Luego recorres ambas matrices y las muestras donde desees.
5) Quitas el filtro opción 2).

Así, que si, se puede hacer.
Empieza por algo así:
Código:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Row = 1 And Target.Column = 5 Then Call Contador(Target.Value)
End Sub

Private Sub Contador(ByRef Nombre As String)
    MsgBox "Recibido el empleado: " & Nombre
    'Aqui pon el codigo de filtrar segun Nombre
    'Luego recorrer ese filtro
    'Almacenar en Tablas
    'Luego poner el resultado
End Sub
Un saludo.
 

Palosa

New member
Buenas,

La respuesta es SI, se puede hacer.
Si estas aprendiendo, se puede hacer.
Consejo:
1) Debe utilizar el evento que cuando modifiques la Celda E1 (Fila 1, Columna 5) realice una acción.
Esto seria a traves de:
Código:
Private Sub Worksheet_Change(ByVal Target As Range)
...Codigo para leer Fila y Columna y almacenarlo
End Sub

2) Hacer un filtro de las columnas G, H y I del elemento almacenado, así tendrás menos registros que recorrer.
3) De ese filtro, entonces ir contándolo y almacenándolo.
Como almacenarlo, aquí es donde depende de tus conocimientos, pero para empezar crearía dos matrices, (Redim) una donde pondré el nombre del otro acompañante, y en la otra matriz (mismo elemento) el numero de veces que se repita + 1.
Para que no repitas los nombres deberías recorrer la matriz o utilizar Dictionary, pero es mas complejo pero si aprendes es muy potente.
4) Luego recorres ambas matrices y las muestras donde desees.
5) Quitas el filtro opción 2).

Así, que si, se puede hacer.
Empieza por algo así:
Código:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Row = 1 And Target.Column = 5 Then Call Contador(Target.Value)
End Sub

Private Sub Contador(ByRef Nombre As String)
    MsgBox "Recibido el empleado: " & Nombre
    'Aqui pon el codigo de filtrar segun Nombre
    'Luego recorrer ese filtro
    'Almacenar en Tablas
    'Luego poner el resultado
End Sub
Un saludo.
Muchas gracias! voy a intentar seguir tus pasos
 

Temas similares

Arriba