martes, 15 de marzo de 2022

Modificando color de fondo en celdas mediante VBA para Microsoft Excel

Hoy os muestro como cambiar el color de fondo (background) de una celda en una celda de Microsoft Excel mediante VBA.



Estas instrucciones serán muy útiles a la hora de usarlas en bucles, ya que harán muy visual la ejecución del bucle.

Para ello usaremos la instrucción Cells(n, m).Interior.Color, a la que asignaremos el color deseado.

Para definir el color usaremos el método RGB(rrr, ggg, bbb), que a partir de los valores de los tres colores primarios da como resultado el color elegido.

Podéis encontrar información sobre los componentes RGB en la wikipedia, por ejemplo en la siguiente url https://es.wikipedia.org/wiki/RGB

En este caso he usado el selector de color de Microsoft Paint para mostraros el color que se va a obtener.


El código usado en el ejemplo es el siguiente:


Y el resultado el que se muestra a continuación:



El código usado en el ejemplo es el siguiente (para copiar y pegar):


Option Explicit

Sub cambiarColorFondoCelda()

    Cells(4, 2).Interior.Color = RGB(0, 255, 255)

End Sub


lunes, 14 de marzo de 2022

Escribiendo en celdas mediante VBA para Microsoft Excel

Hoy os muestro como escribir un número o un texto en una celda de Microsoft Excel mediante VBA.

Estas instrucciones serán muy útiles a la hora de usarlas en bucles, para repetir el proceso.




El código usado en el ejemplo es el siguiente:


Y el resultado el siguiente. Los valores numéricos se asignan directamente o mediante variables, mientras que los textos se indican entre comillas.



Por si lo queréis copiar.

Option Explicit

Sub escribirEnCelda()

        Cells(2, 3).Value = 6

        Cells(3, 2).Value = "Hola"

End Sub


miércoles, 9 de marzo de 2022

Uso de Case 1,2,3 en VBA para Microsoft Excel

Para finalizar la introducción a la instrucción Selct Case en VBA, veremos la posibilidad de crear un Case que se aplique a varios casos aislados.

Para ello pondremos en el Case, separados por comas los valores para los que deseemos ejecutar las instrucciones.


La instrucción que usaremos es esta:



El  código completo del programa:



Option Explicit

Sub condicional()

    

    'Declaramos una variable numerica

    Dim dia As Integer

    Dim dato As Integer

    dato = Range("B2").Value

    Select Case dato

        Case 1, 3, 5, 7:

            MsgBox ("Dia impar")

        Case 2, 4, 6:

            MsgBox ("Dia par")

        Case Else:

            MsgBox ("Dato incorrecto introduzca un numero del uno al siete")

    End Select

End Sub


miércoles, 2 de marzo de 2022

Uso de Case N To M en VBA para Microsoft Excel

En un Select Case de VBA para Microsoft Excel es posible crear un Case que se ejecute entre dos valores, para ello usaremos la instrucción Select M To N.

Esto permite crear en una única instrucción una respuesta a varios valores de la variable de control.



La línea de código que hemos modificado es la siguiente:


El código completo es el siguiente:



El resultado es el mismo que el código que veíamos ayer con menos líneas.




El código completo a conticuación:

Option Explicit

Sub condicional()

    'Declaramos una variable numerica

    Dim dia As Integer

    Dim dato As Integer

    

    dato = Range("B2").Value

    Select Case dato

        Case 1 To 5:

            MsgBox ("Dia laborable")

        Case 6 To 7:

            MsgBox ("Fin de semana")

        Case Else:

            MsgBox ("Dato incorrecto introduzca un numero del uno al siete")

    End Select

End Sub




martes, 1 de marzo de 2022

Uso de Case Else en VBA para Microsoft Excel

En un Select Case de VBA para Microsoft Excel es posible crear un Case que se ejecute cuanto no se cumplan las condiciones de ninguno de los anteriores.




La instrucción concreta es la siguiente.




Esto sustituye en nuestro ejemplo con una sola instrucción a tres condicionales en nuestro ejemplo original.

Este es el código completo del ejemplo.





Sub condicional()

    'Declaramos una variable numerica

    Dim dia As Integer

    Dim dato As String

    

    dato = Range("B2").Value

    

    Select Case dato

        Case 1:

            MsgBox ("lunes")

            

        Case 2:

            MsgBox ("martes")

            

        Case 3:

            MsgBox ("miercoles")

            

        Case 4:

            MsgBox ("jueves")

            

        Case 5:

            MsgBox ("viernes")

            

        Case 6:

            MsgBox ("sabado")

            

        Case 7:

            MsgBox ("domingo")

        Case Else:

            MsgBox ("Dato incorrecto introduzca un numero del uno al siete")

            

    End Select

    

End Sub


sábado, 26 de febrero de 2022

Importando fichero SINLI LIBROS a Microsoft Excel (versión 3) usando lenguaje M

Para mejorar el proceso de importación a través de Power Query podemos hacer uso del lenguaje M. que aumenta las posibilidades que nos ofrece el entorno gráfico.

Por ejemplo, mediante una única instrucción Splitter.SplitTextByPositions, podemos separar todas las columnas que deseemos.



Nota:

Esta instrucción es la misma que utiliza el entorno gráfico, pero solo nos permite indicar una única división.


= Table.SplitColumn(Origen,"Column1",Splitter.SplitTextByPositions({0, 18}, false),{"Column1.1", "Column1.2"})

En el primer caso, se generan gran cantidad de pasos en la importación, en la imagen vemos los pasos para obtener 3 columnas.

Este es el aspecto del editor gráfico.



Utilizando la instrucción enditada en lenguaje M, podemos reducir todos esos pasos a solo uno.


Siendo el resultado una tabla con todos los campos del fichero plano divididos en columnas.



Aquí os dejo la instrucción completa para dividir en columnas el fichero SINLI LIBROS v8 mediante lenguaje M.

= Table.SplitColumn(Origen,"Column1",Splitter.SplitTextByPositions({0, 18, 35, 52, 69, 86, 101, 181, 261, 411, 413, 421, 461, 463, 466, 468, 474, 478, 482, 486, 506, 586, 587, 589, 599, 609, 614, 615, 655, 665, 669, 670, 820, 970, 975, 1125, 1128, 1131, 1137, 1140, 1141, 1156, 1236, 1316, 1352, 1607, 1610, 1660, 1668, 1676, 1875, 3000}, false),{"EAN ", "ISBN Con guiones Facturación ", "ISBN Con guiones Obra completa ", "ISBN Con guiones Tomo ", "ISBN Con guiones Fascículo ", "Referencia ", "Título completo ", "Subtítulo ", "Autor/es Apellidos Nombre ", "País de publicación ", "Editorial Código ISBN completado con ceros a la", "Editorial Nombre ", "Encuadernación ", "Lengua de publicación Código ", "Número de edición ", "Fecha de publicación Mes año ", "Número de páginas ", "Ancho en mm. ", "Alto en mm. ", "Tema Materia CDUmás de una separada ;", "Descriptores palabras clave ", "Situación en catálogo ", "Tipo de producto ", "PVP sin IVA en EUROS sin puntuación", "PV con IVA en EUROS sin puntuación", "Porcentaje de IVA 416... ", "Tipo de precio * Si el tipo de precio es “L” el precio sin IVA será el precio de cesión y el Precio con IVA será el precio de cesión más el IVA correspondiente a él.", "Colección ", "Nº de colección ", "Nº de volumen ", "Imagen de portada y/u otras ** El nombre del fichero a d j u nt o co n la /la s imágenes será el EAN13", "Ilustrador cubierta Apellidos Nombre", "Ilustrador interior Apellidos Nombre", "Nº de ilustraciones en Color ", "Traductor Apellidos Nombre ", "Idioma Original ", "Grosor en milímetros ", "Peso en gramos ", "Audiencia ", "Nivel de lectura ", "Solo para texto: Nivel Infantil- Primaria-Eso Bachillerato-FP- Universitaria", "Solo para texto: Curso. ", "Solo para texto: Asignatura ", "Solo para texto: Comunidad Autónoma", "Resumen ", "Tipo de versión de materia IBIC ", "Tema Materia IBIC más de una separada ;", "Fecha puesta en venta/lanzamiento ", "Fecha disponibilidad de existencias ", "Dirección URL ", "Resumen o sinopsis ampliados"})

jueves, 24 de febrero de 2022

Importando fichero SINLI LIBROS a Microsoft Excel (versión 2)

En este caso importaremos el fichero SINLI pero para ello usaremos el componente Power Query de Microsoft Excel.



Este componente nos va a permitir tratar el fichero e importar solo partes de él o crear campos adicionales a partir de lo existentes.