¡Hola!, tengo un problema, estoy aprendiendo a realizar macros sencillas y me he encontrado con una dificultad. El caso es el siguiente: realizar una macro que pida 10 nombres y los almacene en una matriz, hasta ahí no hay ningún problema. Ahora lo que tengo que realizar es que se ordenen los nombres en orden alfabéticamente inverso.
Option Explicit
Sub DiezNombres
Dim M(10) As String
Dim I As Integer
Dim Mensaje As String
Dim Nombre As String
'Los datos introducidos en la matriz son:
For I = 1 to 10
M(Nombre) = InputBox ("Introduce el" & " " & I & " " & "nombre en minúscula" & Nombre)
Mensaje = Mensaje & " el orden en la matriz es: " & I & " " & M(Nombre)
Mensaje = Mensaje & Chr(13)
Next I
MsgBox Mensaje
'Para ordenar de forma inversa alfabéticamente
End Sub
¿Cómo puedo realizar ese orden de forma inversa?
Un saludo
Última edición por mauricio el Mié Nov 23, 2016 4:22 pm, editado 1 vez en total.
Razón:Usar etiquetas CODE
REM ***** BASIC *****
Option Explicit
Option Base 1
Sub DiezNombres
Dim M(10) As String
Dim I As Integer
Dim Mensaje As String
Dim Nombre As String
'Los datos introducidos en la matriz son:
For I = 1 to 10
M(I) = InputBox ("Introduce el" & " " & I & " " & "nombre en minúscula" & Nombre)
Mensaje = Mensaje & " el orden en la matriz es: " & I & " " & M(I)
Mensaje = Mensaje & Chr(13)
Next I
MsgBox Mensaje
'Para ordenar de forma inversa alfabéticamente
Call BubbleSortDescendingOrder(M())
'Datos ordenados de forma descendente
MsgBox Join(M(), Chr(13))
End Sub
Sub BubbleSortDescendingOrder(List() As Variant)
'Sorts the List array in descending order
Dim First As Long, Last As Long
Dim i As Long, j As Long
Dim Temp As String
First = LBound(List)
Last = UBound(List)
For i = First To Last - 1
For j = i + 1 To Last
If List(i) < List(j) Then
Temp = List(i)
List(i) = List(j)
List(j) = Temp
End If
Next j
Next i
End Sub
También, en el apartado "6.1.3 Moviendo hojas" del libro Aprendiendo OOo Basic nuestro compañero mauricio nos muestra una forma de personalizar esta ordenación. Este libro te resultará de mucha ayuda.
¡Atención! De manera predeterminada el índice inferior de las matrices es el 0. Si queremos comenzar en 1 entonces debemos escribir al principio del módulo "Option Base 1" (no es recomendable).
Saludos cordiales.
LibreOffice 6.4.6. Windows 10. Java 8 rev. 261 (64 bits) Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.