Adjudicar un número a una celda de Excel en función de otros valores ya adjudicados a otras celdas.

El problema que planteo es el siguiente:

En una hoja de Excel tenemos en la columna A un listado de comerciales, al lado de cada comercial tenemos un Formato de control del tipo de los de verificación, de esos que cuando haces clic en ellos sale una marca de verificación parecida a una v. Pues lo que necesito es que cuando hacemos clic en uno de ellos, por ejemplo en el que corresponda al comercial que está en la celda A23, si el resto de formatos de control aún están en blanco y este va a ser el primero, pues que en la celda B23 tenga el valor 1, si luego p.e. Hacemos clic en la celda A11, como el valor 1 ya está asignado a la celda B23 pues que aparezca en la celda B11 el valor 2, si a continuación hacemos clic en la celda J8 pues al estar ya "ocupados" el 1 y el 2 pues que le asigne a la celda B8 el número 3, y así sucesivamente.

Un saludo a todos y gracias anticipadas por vuestras respuestas.

Jose

1 respuesta

Respuesta
2

[H o l a y bienvenido a TodoExpertos.

La siguiente macro hace lo que pides, al presionar una casilla de verificación, en la celda de la derecha escribe un número de secuencia.

Las casillas de verificación deben estar completamente dentro de la celda de la columna A, tal y como se muestra en la siguiente imagen:

Asigna la siguiente macro a cada formato:

Sub Contar_Casillas()
  Dim valor As Variant, celda As String
  valor = ActiveSheet.DrawingObjects(Application.Caller)
  If valor = 1 Then
    celda = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Address
    Range(celda).Offset(, 1).Value = WorksheetFunction.Max(Range("B2:B50")) + 1
  End If
End Sub

Para asignar una macro al formato de control: clic botón derecho del mouse sobre la casilla, de las opciones que aparecen selecciona la opción: Asignar macro. En la siguiente ventana, selecciona la macro "Contar_Casillas" y presiona Aceptar.


NOTA: Lo anterior es para contar la secuencia cuando vas activando casillas, pero no mencionaste qué sucede si desactivas una casilla.

Muchísimas gracias por tu rápida respuesta. Lo probaré de inmediato y te comentaré los resultados.

En respuesta a tu pregunta de qué debe pasar si desactivamos una casilla, lo ideal sería que si por ejemplo están marcadas de la 1 a la 50 y desactivamos la 36 la 37 pasaría a ser la 36, la 38 pasaría a ser la 37, etc., es decir correría el turno. Y si esto no fuera posible, al menos que a partir de la que desactivemos el resto también se queden en blanco.

Un saludo y muchas gracias de nuevo.

Jose

Lo ideal sería que si por ejemplo están marcadas de la 1 a la 50 y desactivamos la 36 la 37 pasaría a ser la 36, la 38 pasaría a ser la 37, etc., es decir correría el turno.

Prueba esto:

Sub Contar_Casillas()
  Dim valor As Variant, celda As String
  Dim lr As Long, n As Long, i As Long
  '
  lr = Range("B" & Rows.Count).End(3).Row
  valor = ActiveSheet.DrawingObjects(Application.Caller)
  celda = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Address
  If valor = 1 Then
    Range(celda).Offset(, 1).Value = WorksheetFunction.Max(Range("B2:B" & lr)) + 1
  Else
    n = Range(celda).Offset(, 1).Value
    Range(celda).Offset(, 1).Value = ""
    For i = 2 To lr
      If Range("B" & i).Value > n Then Range("B" & i).Value = Range("B" & i).Value - 1
    Next
  End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas