macro para ordenar alfabéticamente en una matriz

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...

macro para ordenar alfabéticamente en una matriz

Notapor Inmaculada » Mié Nov 23, 2016 2:29 pm

¡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.
Código: Seleccionar todo   Expandir vistaContraer vista
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
windows 10 versi??n Open Office 4.1.3
Inmaculada
 
Mensajes: 3
Registrado: Mié Nov 23, 2016 1:52 pm

Re: macro para ordenar alfabéticamente en una matriz

Notapor PepeOooSevilla » Mié Nov 23, 2016 6:32 pm

Hola.

Una forma (bajada de internet):
Código: Seleccionar todo   Expandir vistaContraer vista
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.2.7 (64 bits, Still, Empresarial o Estable) en Windows 10. Java 9.0.4 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Avatar de Usuario
PepeOooSevilla
 
Mensajes: 1098
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)


Volver a Macros y API UNO

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados