macro para ordenar alfabéticamente en una matriz

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
Inmaculada
Mensajes: 3
Registrado: Mié Nov 23, 2016 1:52 pm

macro para ordenar alfabéticamente en una matriz

Mensaje por Inmaculada »

¡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

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
Avatar de Usuario
PepeOooSevilla
Mensajes: 1480
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: macro para ordenar alfabéticamente en una matriz

Mensaje por PepeOooSevilla »

Hola.

Una forma (bajada de internet):

Código: Seleccionar todo

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.
Responder