viernes, 22 de diciembre de 2017
Casos prácticos
Veamos una serie de aplicaciones de macros de Excel programadas en VBA (Visual Basic para Aplicaciones).
martes, 5 de diciembre de 2017
Ciudades elegidas
Puede descargar el archivo ciudadesElegidas.xlsm
Los métodos empleados son los siguientes.
Y en la Hoja2 tenemos el siguiente código.
Hoja1
Disponemos de una lista de ciudades, son en total 735 ciudades, y deseamos elegir aleatoriamente unas cuantas de ellas. La elección se realizará por dos métodos, ambos con la posibilidad de que salgan ciudades repetidas. Si obtenemos ciudades repetidas las detectaremos con Formato condicional.Los métodos empleados son los siguientes.
- Método 1: con la función INDICE
- Método 2: con la función DESREF
Hoja2
Disponemos de una lista de ciudades en la columna A y de ellas deseamos elegir aleatoriamente y sin repetición un cierto número de ellas. Vamos a resolver este caso con la ayuda de una macro de Excel. Sub EligeNombresAleatorios()
Borra
Dim numElegidas As Integer
Dim numNombres As Long
Dim numAlea As Integer
Dim Nombres() As String
Dim i As Byte, j As Byte
Dim Fila As Long
Dim Repe As Boolean 'para ver si está repetida la ciudad seleccionada
numElegidas = Range("C3").Value
Fila = 6
ReDim Nombres(1 To numElegidas)
numNombres = Application.CountA(Range("A:A")) - 1
For i = 1 To numElegidas
Do
Repe = False 'inicialmente supondremos que no está repetida la ciudad
numAlea = Application.RandBetween(1, numNombres)
'veamos si la ciudad seleccionada ya ha sido elegida
For j = LBound(Nombres) To UBound(Nombres)
If Nombres(j) = Cells(numAlea + 1, 1).Value Then Repe = True: Exit For
Next j
Loop While Repe
Nombres(i) = Cells(numAlea + 1, 1).Value ' Assign random name to the array
Next i
'Escribe las ciudades elegidas
For j = LBound(Nombres) To UBound(Nombres)
Cells(Fila, 3) = Nombres(j)
Fila = Fila + 1
Next j
End Sub
Sub Borra()
Range("C6").Select
Range(Selection, Selection.End(xlDown)).ClearContents
Range("C3").Select
End Sub
Y en la Hoja2 tenemos el siguiente código.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$3" Then
Call EligeNombresAleatorios
End If
End Sub
Suscribirse a:
Entradas (Atom)