Marzo es el mes de la IA en Deztaca | Clase en vivo privada este sábado 21 de marzo de 2026. Clic aquí →

Respuestas 2

hace 1 mes
Muy buen trabajo, Osmani.
Se nota el empeño por practicar y probar distintas formas de resolverlo. 
Recorrer el rango de abajo hacia arriba fue una elección acertada, porque evita los desajustes al eliminar filas. 
Tu solución queda clara, ordenada y demuestra que estás experimentando y entendiendo cada paso.

Buen trabajo!
hace 2 semanas
Hola buenas noches. 

OsmaniPititi, Julia

Muy buena la macro, hice la prueba y funciona muy bien en la columna. ahora imagine mas datos "curso de vba" en un rango mas amplio osea con mas columnas y dentro de las columnas celdas en blanco al azar. En lo que va del curso aun no se como se realiza, asi que apoyandome de la AI. me entrego la siguiente macro.

Aclaro con la macro siguiente solo dan ganas de conocer y aprender mas, estoy seguro que con este curso de deztaca lograre realizar macros similares y mas avanzadas.

Sub ConvertirYReorganizar()

    Dim Opcion As Variant
    Dim Texto As String
    Dim Rango As Range
    Dim Col As Range
    Dim Celda As Range
    Dim i As Long
    Dim Valores() As Variant
    Dim Contador As Long
    
    Set Rango = Selection

     'Validacion de la seleccion de celdas
    
    If Rango.Cells.Count = 1 Then
        MsgBox "Debes seleccionar un rango de varias celdas.", vbExclamation, "Rango insuficiente"
        Exit Sub
    End If

    If Rango.Rows.Count = Rows.Count Then
        MsgBox "No selecciones toda la hoja. Selecciona solo el rango necesario.", vbExclamation
        Exit Sub
    End If

    Texto = "Elige una opción:" & vbNewLine & _
            vbNewLine & "1. MAYÚSCULAS" & _
            vbNewLine & "2. minúsculas"

    Opcion = InputBox(Texto, "Deztaca", 1)

    If Opcion <> 1 And Opcion <> 2 Then
        MsgBox "Debes elegir una opción válida", vbExclamation
        Exit Sub
    End If

    Application.ScreenUpdating = False

    ' Procesar cada columna por separado
    For Each Col In Rango.Columns
        
        ReDim Valores(1 To Col.Cells.Count)
        Contador = 0
        
        ' Guardar valores no vacíos
        For Each Celda In Col.Cells
            If Trim(Celda.Value) <> "" Then
                Contador = Contador + 1
                
                If Opcion = 1 Then
                    Valores(Contador) = UCase(Celda.Value)
                Else
                    Valores(Contador) = LCase(Celda.Value)
                End If
            End If
        Next Celda
        
        ' Limpiar columna
        Col.ClearContents
        
        ' Volver a escribir compactado hacia arriba
        For i = 1 To Contador
            Col.Cells(i, 1).Value = Valores(i)
        Next i
        
    Next Col

    Application.ScreenUpdating = True

    MsgBox "Proceso terminado correctamente.", vbInformation

End Sub