6 febrero, 2025

GENERAR ESPIRAL DE COLOR EN UNA HOJA EXCEL USANDO VBA

Hola a todos,

Estos días estoy profundizando en los fractales y cómo se pueden generar con código. Y aunque me interesa hacerlo en typescript estoy probando con VBA y la verdad es que estoy encontrando buenos resultados.

Este es el código que estoy trabajando y que por ahora es capaz de generar una espirar de varias vueltas y en función de la gradación del color cada n celdas.

Este es el código:

Sub CrearEspiral()
    'Declaramos variables
    Dim hoja As Worksheet
    Dim fila As Integer, col As Integer
    Dim pasos As Integer
    Dim color As Long
    Dim i As Integer, j As Integer
    Dim intensidad As Integer
    Dim gradacion As Integer
    Dim k As Integer
    Dim colorIndex As Integer
    'Inicializar el generador de números aleatorios
    Randomize
    'Obtener color aleatorio
    colorIndex = Int((4 * Rnd) + 1)
    Set hoja = ActiveSheet
    'Obtener fila y columna activas
    fila = ActiveCell.Row
    col = ActiveCell.Column
    'Inicializar variables
    pasos = 1
    intensidad = 255
    gradacion = 2
    'Número de vueltas de la espiral
    For i = 1 To 15
        'Pintar celdas en: derecha, abajo, izquierda, arriba
        For j = 1 To 4
            'Elegir el color en base al índice aleatorio
            Select Case colorIndex
                Case 1 'Rojo
                    color = RGB(intensidad, 0, 0)
                Case 2 'Verde
                    color = RGB(0, intensidad, 0)
                Case 3 'Azul
                    color = RGB(0, 0, intensidad)
                Case 4 'Amarillo
                    color = RGB(intensidad, intensidad, 0)
            End Select
            'Pintar celdas en una dirección
            For k = 1 To pasos
                If fila > 0 And col > 0 Then
                    hoja.Cells(fila, col).Interior.color = color
                End If
                Select Case j
                    Case 1 'Derecha
                        col = col + 1
                    Case 2 'Abajo
                        fila = fila + 1
                    Case 3 'Izquierda
                        col = col - 1
                    Case 4 'Arriba
                        fila = fila - 1
                End Select
                'Disminuir la intensidad del color para la siguiente celda
                'Cambiar la intensidad cada n celdas
                If k Mod 5 = 0 Then
                    If intensidad > gradacion Then
                        intensidad = intensidad - gradacion
                    End If
                End If
            Next k
            'Aumentar pasos cada dos direcciones
            If j Mod 2 = 0 Then
                pasos = pasos + 1
            End If
        Next j
    Next i
End Sub

Y este es el resultado:

He crear el código para que de forma aleatoria se cree una espiral de base color rojo, amarillo, verde o azul. Y realmente creo que es muy entretenido.

Os lo dejo a modo curiosidad o, si realmente os sirve, pues mejor.

El código está bastante comentado y básicamente se fundamenta en movimientos de celda y otorgar intensidad al color RGB modificando uno de sus componentes.

Y esto es todo, copiad el código pegadlo en el editor de VBA y ejecutadlo. Se genera en la celda activa donde tengáis el cursos, en caso de necesidad podéis indicar una celda específica.

Y esto es todo, disfrutad de lo que queda de domingo 🙂

¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡Muchas gracias!!

Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies

Comparte este post

Si te ha gustado o tienes alguna duda, puedes dejar aquí tu comentario.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies