Hola a todos!.

El post de hoy es una petición que me ha realizado un lector pidéndome que publique un post en el que muestre la instrucción Select Case y al mismo tiempo cómo se puede seleccionar la última celda con datos de una columna.

Realmente en mis post siempre publico la forma de obtener la última celda con datos suponiendo que no existen filas vacías. En una base de datos no deben existir filas vacías, siempre existe algún campo que debe tener datos ej, ID. Pero puede darse el caso que estemos trabajando con columnas donde algunas celdas están vacías, si esto es así, este post os puede ser de utilidad.

Imaginad que tenéis varias celdas con números, así:

De forma que necesitamos llegar a la fila 24 y además utilizaremos la instrucción select case para hacer lo siguiente:

  • Los números de 0 a 4 se convierten en una A
  • Los números de 5 a 7 se convierte en una B
  • Los número de 7 a 9 se convierten en una C

Para programar estas acciones utilizaremos el siguiente código:

Option Explicit
Sub SELECT_CASE()
'Definimos variables
    Dim sDato As String, nItem As String, final As Long
    Dim i As Long, j As Long, sLargo As Long
    With Sheets("DATOS")
        'Obtenemos última fila
        final = .Range("A" & .Rows.Count).End(xlUp).Row
        'Iniciamos bucle por cada celda de la columna A
        For i = 2 To final
            sLargo = Len(.Cells(i, 1))
            'Si hay datos entonces iniciamos segundo bucle
            If sLargo > 0 Then
            'Extraemos cada número de la celda seleccionada
                For j = 1 To sLargo
                    nItem = Mid(.Cells(i, 1), j, 1)
                    'Iniciamos estructura select case
                    Select Case nItem
                    Case 0 To 4
                        nItem = "A"
                    Case 5 To 7
                        nItem = "B"
                    Case 8 To 9
                        nItem = "C"
                    End Select
                    'Agrupamos el resultado
                    sDato = sDato & nItem
                    Next j
                End If
                'Pasamos el dato a la columna B
                .Cells(i, 2) = sDato
                'Igualamos Sdato a ""
                sDato = vbNullString
                'Seguimos con el próximo item
                Next i
            End With
        End Sub

En efecto, con esta línea llegamos a la fila 24 en la columna A:

 final = .Range("A" & .Rows.Count).End(xlUp).Row

Y así ya tenemos un fin en nuestra instrucción For-next y podemos crear un bucle que recorra todas las filas.

Luego con el Select case transformamos los casos:

Select Case nItem
                    Case 0 To 4
                        nItem = "A"
                    Case 5 To 7
                        nItem = "B"
                    Case 8 To 9
                        nItem = "C"
                    End Select

Sin duda muy sencillo de hacer y que nos muestra que además podemos establecer rangos en el select case.

El resultado es el siguiente:

Y el resultado es el esperado según los requisitos definidos en el select case. Y con esto finalizo el post de hoy. Espero que os haya resultado interesante y os sea de utilidad en vuestros proyectos.

Descarga el archivo de ejemplo pulsando en:

¿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