Seleccionar aleatorio de ciertos números

Tengo la siguiente matriz

Ejecutivo Tema1 Tema 2 Tema3
Hugo            1            0                 1

Paco          0             1                0

Luis            1             1             1  

En resumen tengo 50 ejecutivos de los cuales tomaron una capacitación en 10 temas diferentes.
Necesito una macro o forma de elegir un ejecutivo de forma aleatoria para cada tema, la dificultad que tengo es que solo debe seleccionar entre los que si aprobaron la capacitaron. En este ejemplo puse un numero 1 a los que si estan certificados y 0 a los que no.

Respuesta
1

Asumiendo que tienes tus datos iniciando en la celda A1. Los resultados quedarán en las columnas AA y AB, de esa manera puedes tener Temas desde la columna B hasta la Z.

El número de ejecutivos puede crecer hacia abajo sin problema.


Casos de excepción:

1. Puede ser que un tema todos tenga 0, en ese caso en la columna AB parecerá el texto de la celda A1.

2. También puede ser, por ejemplo, que solamente 3 ejecutivos hayan aprobado el Tema8, pero los 3 ejecutivos ya fueron seleccionados previamente, eso significa que no podrán ser seleccionados nuevamente, entonces en la columna AB parecerá el texto de la celda A1.


Sub EjecTema()
  Dim n As New Collection, arr() As Variant
  Dim i As Long, j As Long, ale As Long, lr As Long, lc As Long, m As Long
  '
  lr = Range("A" & Rows.Count).End(3).Row - 1
  lc = Cells(1, Columns.Count).End(1).Column - 1
  '
  For i = 1 To lr
    n.Add i
  Next
  ReDim arr(1 To lr)
  Randomize
  DoEvents
  j = 2
  '
  For i = 1 To lc
    m = 1
    Do While True
      ale = Int(n.Count * Rnd + 1)
      If Cells(n(ale) + 1, j) = 1 Or m = lr Then
        j = j + 1
        Exit Do
      End If
      m = m + 1
    Loop
    If m < lr Then arr(i) = n(ale)
    n.remove ale
  Next
  '
  Range("AA2").Resize(lc).Value = Application.Transpose(Range("B1").Resize(1, lc))
  For i = 1 To lc
    Range("AB" & i + 1) = Cells(arr(i) + 1, 1)
  Next
End Sub

¡Gracias!  Quedo poca madre! jajajaja muchas gracias todo excelente

Ahí te encargo la valoración

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas