** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Otros de Microsoft: Windows y Office > Excel
  Mensajes nuevos Mensajes nuevos RSS - Asignar un número según el orden
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Asignar un número según el orden

 Responder Responder
Autor
Mensaje
txino_2 Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 19/Diciembre/2020
Localización: Jaén
Estado: Sin conexión
Puntos: 5
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita txino_2 Cita  ResponderRespuesta Enlace directo a este mensaje Tema: Asignar un número según el orden
    Enviado: 19/Diciembre/2020 a las 11:18
Buenos días

Me salta una duda y estoy muy perdido, a ver si alguien me puede decir alguna función o formula.

Tengo una serie de datos, en la columna de la izquierda sería el orden de prelación, en las columnas de la derecha los números. Quiero asignar un valor de la columnas del 1 al 10, a la columna que se llama Nº.

Por ejemplo, el número 1 se le asignaría el 1003, por ser el número 1 el primero, al número 2 el 1010, al número 3, como el número 1 ya se le asigna el 1003, a este le correspondería el 1005. Al número 4 le correspondería el 1004, al número 5 como el 1010 ya lo tiene asignado el número 2 y el número 1003 lo tiene asignado el número 3, el número 1004 lo tiene asignado el número 4, entonces le correspondería el número 1002. Y así sucesivamente.

¿Es posible automatizarlo con excel con alguna formula o función?, muchas gracias


El saber no ocupa lugar
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14720
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita xavi Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 19/Diciembre/2020 a las 15:54
Hola txino_2 y bienvenido al foro,

He leído varias veces el mensaje (y , como yo, se supone que otra decena de personas) pero no soy capaz de entender la lógica de la secuencia de ordenación. Hasta he buscado que es el "orden de prelación".... y he acabado entendiendo menos que cuando he empezado a leer.

Dicho esto, si hay una lógica para decidir los números, hay una forma de programarlo. En tu caso es muy probable que sea con una macro.

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5970
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita AnSanVal Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 19/Diciembre/2020 a las 18:40

Yo tampoco encuentro un orden lógico para los números de orden de concurso.

Dicho eso, si  en el rango destino los números (Nº) están (siempre) ordenados, no habría necesidad de la tabla de 10 × 10, puesto  que los números de orden de concurso obtenidos la primera vez, serán los mismos que para la segunda y sucesivas.

       M

   N

       O

   2

Nombre

N.O.C.

   3

Nombre1

1

1003

   4

Nombre2

2

1010

   5

Nombre3

3

1005

   6

Nombre4

4

1004

   7

Nombre5

5

1002

   8

Nombre6

6

1009

   9

Nombre7

7

1001

   10

Nombre8

8

1008

   11

Nombre9

9

1007

   12

Nombre10

10

1006

 

Si por el contrario el orden de los números (Nº) va a ser variable/desordenado...

       M

   N

       O

   2

Nombre

N.O.C.

   3

Nombre1

1

1003

   4

Nombre2

4

1004

   5

Nombre3

6

1005

   6

Nombre4

2

1010

   7

Nombre5

3

1002

   8

Nombre6

9

1009

   9

Nombre7

7

1001

   10

Nombre8

8

1008

   11

Nombre9

10

1007

   12

Nombre10

5

1006

 

... podrías resolver (como indica Xavi [cada vez más sabio] con una macro), en mi ejemplo, con una función de usuario definida (UDF).

 

El código VBA variará dependiendo de en que rango este la  tabla de números de orden y de cual sea el rango de asignación (destino). Si no coinciden los rangos reales con los de la UDF ¡No funcionará!.

 

Suponiendo en B3 el número 1003, enB4 el número 1010,...  ... en K12 el número 1006 (B3:K12), 

En un módulo ordinario:

Function NOC(num&, fila&)

  Dim col&

  col = 2

  Application.Volatile

1

  NOC = Cells(num + 2, col)

  If WorksheetFunction.CountIf(Range("$O$2:O" & fila), NOC) > 0 Then

    col = col + 1

    If col > 11 Then Exit Function

    GoTo 1

  End If

End Function


La fórmula de la celda O3 es:  =noc(N3;FILA(A2))    (copia/pega hacia abajo)

La fórmula en la(s) celda(s) también  depende de los rangos reales.

 


Saludos desde Tenerife.
Arriba
txino_2 Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 19/Diciembre/2020
Localización: Jaén
Estado: Sin conexión
Puntos: 5
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita txino_2 Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 20/Diciembre/2020 a las 07:54
Perdón por no ser preciso.



La primera columna del 1 al 10, serían trabajadores colocados por antigüedad en la empresa.



Hay 10 puestos de trabajo y cada uno con una nomenclatura 1001, 1002, etc...



Cada trabajador, hace una petición para ocupar uno de esos puestos de trabajo.



Para asignar esos puestos de trabajo se utilizará la antigüedad en el empleo en la empresa. Y quisiera automatizar la asignación, para que por ejemplo el puesto 1003 se le asigne al trabajador 1, y al trabajador 3 que también había solicitado el 1003, al haberlo ocupado el trabajador 1 le asigne el siguiente que solicito que es el 1005.



Espero quede así más claro y disculpar.
El saber no ocupa lugar
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5970
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita AnSanVal Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 20/Diciembre/2020 a las 12:31
Sigues sin decir los rangos reales.

Entiendo la idea, aunque la mayoría de los trabajadores repiten el 1002 y no optan al 1001, supongo que la tabla es sólo un ejemplo.

«La primera columna del 1 al 10, serían trabajadores colocados por antigüedad en la empresa.»
- Si no son números la UDF (tal como está ahora) no te funciona, eso pasa cuando el ejemplo aportado no se ajusta a la realidad, deberías haber puesto (nunca aportes datos sensibles): nombre1, nombre2,... nombre10.

- Si no sabes adaptar la UDF a tus rangos reales, aporta los rangos reales de la tabla y del rango donde quieres los resultados y te la modifico (sin conocer los rangos es trabajar inútilmente).


Saludos desde Tenerife.
Arriba
txino_2 Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 19/Diciembre/2020
Localización: Jaén
Estado: Sin conexión
Puntos: 5
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita txino_2 Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 20/Diciembre/2020 a las 15:09
Muchas gracias AnSanVal por tu colaboración altruista.

Así es, en la columna de la izquierda serían los trabajadores colocados por antigüedad. (nombre_1, nombre_2, etc).

Es una petición, por lo cual cada trabajador pide el puesto de trabajo que quiera, por eso hay coincidencias en el número de puesto, y el día excel debería asignarle el puesto de forma automática con su antigüedad.

Pero como trabajador puede pedir varios puestos de trabajo, si no consigue el primer puesto, se le asigna el segundo que ha pedido, si tampoco lo alcanzase por haberlo pedido alguien más antiguo optaría al tercero y así sucesivamente.

No se si me explico bien, disculpa las molestias y de nuevo muchas gracias.
El saber no ocupa lugar
Arriba
Gladiador Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 22/Junio/2006
Localización: Venezuela
Estado: Sin conexión
Puntos: 220
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Gladiador Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 04/Abril/2021 a las 08:21
Hola a todos

Quisiera aporta esta alternativa de solución, pues me ha parecido muy interesante la pregunta.

Primero que nada debo hacer un par se suposiciones:
    1.- La columna N° se refieres al número de un Trabajador
    2.- Una vez que a un Trabajador se le ha asignado un Núm Orden del Concurso ya no se le asignará otro Núm. Por lo tanto, en el caso del Trabajador N°1, se le asigna el primer Núm de la lista, o sea el 1003 y así sucesivamente.


En la imagen que he cargado (espero haberlo hecho bien) está el resultado que he conseguido.

A continuación explico el procedimiento

  En la celda B16 he colocado el Núm 1003, para el trabajador N° 1
  En la celda B17 la siguiente fórmula
          =IF(COUNTIF($B$3:B4;B4)>1;;B4)   con esto verifico si no está repetido el Núm de la celda B4 en las celdas anteriores
 Luego copio esta fórmula hasta la celda B25, que contiene el N° 10
          =IF(COUNTIF($B$3:B12;B12)>1;;B12)

Pasamos a la columna C

   El la celda C16 va la siguiente fórmula:
            =IF(SUM($B16:B16)>0;;IF(COUNTIF($B$16:B$25;C3)>=1;;C3))
             Verifico si ya hay un Núm en la celda B16 y si el Núm de la celda C3, no ha sido ya tomado por alguna de las celdas que se encuentran en la columna B

   En la celda C17 va la fórmula
             =IF(SUM($B17:B17)>0;;IF(COUNTIF($B$16:B$25;C4)+COUNTIF(C$16:C16;C4)>=1;;C4))
             Verifico si en la celda de la izquierda B17 hay un Núm y si el Núm de la celda C4 no ha sido usado en la columna B o en la Celda C16
      Luego copio esta fórmula hasta la celda C25
      =IF(SUM($B25:B25)>0;;IF(COUNTIF($B$16:B$25;C12)+COUNTIF(C$16:C24;C12)>=1;;C12))

Estas fórmula se van copiando en las celdas subsiguiente, a la derecha. Como se observa el rango de cuenta se va ampliando de manera de poder verificar los rangos a la izquierda de la celda evaluada y las celdas que están por encima de ellas.

Por ejemplo, la formula de la celda J24 es:
     =IF(SUM($B24:I24)>0;;IF(COUNTIF($B$16:I$25;J11)+COUNTIF(J$16:J23;J11)>=1;;J11))
         SUM($B24:I24)>0 verifico si ya hay algún Núm en las celdas B24 a las I24
         COUNTIF($B$16:I$25;J11) Verifico si el Núm de la celda J11  está presente en el rango
         COUNTIF(J$16:J23;J11) Verifico si el Núm de la celda J11  está presente en las celdas anteriores


Espero haber sido de ayuda

Saludos a todos

Gladiador
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5970
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita AnSanVal Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 04/Abril/2021 a las 13:42
Yo me desentendí del tema, txino_2 no parecía dispuesto a aportar el rango real (para VBA es imprescindible), nunca pido datos sensibles, y si el consultante no se preocupa... ¿Por qué iba a hacerlo yo?

Yo completé el ejemplo como aprendizaje para mí...

Trabajador Puesto1 Puesto2 Puesto3 Puesto4 Puesto5 Puesto6 Puesto7 Puesto8 Puesto9 Puesto10 Asignado
Nombre1 1003 1005 1004 1002 1002 1010 1009 1008 1007 1006 1003
Nombre2 1010 1009 1008 1007 1006 1003 1005 1004 1002 1002 1010
Nombre3 1003 1005 1004 1002 1002 1010 1009 1008 1007 1006 1005
Nombre4 1004 1003 1001 1002 1005 1006 1007 1008 1009 1010 1004
Nombre5 1010 1005 1004 1002 1002 1003 1009 1008 1007 1006 1002
Nombre6 1004 1005 1003 1002 1002 1010 1009 1008 1007 1006 1009
Nombre7 1001 1003 1005 1004 1002 1010 1009 1008 1007 1006 1001
Nombre8 1010 1005 1004 1002 1002 1003 1009 1008 1007 1006 1008
Nombre9 1003 1005 1004 1002 1002 1010 1009 1008 1007 1006 1007
Nombre10 1004 1003 1005 1001 1002 1010 1009 1008 1007 1006 1006

... pero (visto lo visto) no me apetece publicar el código.  

 
Saludos desde Tenerife.
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: La Gloria
Estado: Sin conexión
Puntos: 3849
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita lbauluz Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 05/Abril/2021 a las 10:43
Puesss

No lo tengo tan claro debido a que hay códigos de puesto de trabajo repetidos para el mismo empleado, por ejemplo, el empleado 1 opta dos veces por el puesto de trabajo 1002...

De hecho, hay muchos empleados que repiten la solicitud del puesto 1002, pero los que lo hacen, no solicitan el 1001, de donde deduzco que en realidad una de las solicitudes es el puesto 1001 y que los datos no son correctos.

Luis
El Búho es un pajarraco
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5970
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita AnSanVal Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 05/Abril/2021 a las 15:36
El ejemplo (como casi siempre) no es real, seguramente hizo una línea la primera, en la cual puso 2 veces el 1002, y luego con el Copy/Paste (por trozos) cada vez que copiaba incluyendo el duplicado... pegaba también el duplicado y se replicaba el error.

Precisamente ayer retoqué el ejemplo, reparando el doble 1002, pero de todos modos (con el método que expone txino_2) las celdas que aquí dejo en blanco...

Trabajador Puesto1 Puesto2 Puesto3 Puesto4 Puesto5 Puesto6 Puesto7 Puesto8 Puesto9 Puesto10 Asignado
Nombre1 1003                   1003
Nombre2 1010 1009                 1010
Nombre3 1003 1005 1004               1005
Nombre4 1004 1003 1001 1002             1004
Nombre5 1010 1005 1004 1002 101           1002
Nombre6 1004 1005 1003 1002 1009 1010         1009
Nombre7 1005 1003 1001 1004 1002 1010 1009       1001
Nombre8 1010 1005 1004 1002 1001 1003 1009 1008     1008
Nombre9 1003 1005 1004 1002 1001 1010 1009 1008 1007   1007
Nombre10 1004 1003 1005 1001 1002 1010 1008 1006 1007 1009 1006

... nunca van a ser evaluadas, «Nombre1» tendrá el puesto que le apetezca, el que pone en B2, «Nombre2» si no obtiene su preferido (B3) tendrá seguro el que pone en C3,... etc. 

Vamos, es poco menos que nombramientos a dedo.




Saludos desde Tenerife.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable