martes, 25 de diciembre de 2018

¡Felices Fiestas!

Quiero desearles a todos mis amigos y amigas que visitan este blog unas muy felices fiestas de fin de año, espero que lo reciban con su familia y/o con las personas que más quieran y espero que el año 2019 sea un año de mucha prosperidad.


¡UN ABRAZO EXCELIANO PARA TODOS/AS!


Abraham Valencia



(Imagen tomada de internet)

viernes, 14 de diciembre de 2018

Usando BUSCARV

Considero que la función “BUSCARV” es una de las más usadas por los usuarios/as de Excel. Esta función es útil cuando se necesita buscar elementos de una tabla o de una fila y aunque hay mucha información al respecto en internet, creo importante escribir un poco sobre ella. Dicha función tiene cuatro argumentos:


BUSCARV (Valor buscado, Matriz, Número de columna, Ordenado)

Argumento
Descripción
Valor buscado El valor que se desea buscar.
Matriz
Rango en donde se encuentra el valor buscado. Dicho valor debe estar siempre en la primera columna del rango (la de más a la izquierda) para que BUSCARV funcione correctamente.
Número de columna
Columna del rango/matriz que contiene el valor que deseamos sea devuelto.  La columna 1 es aquella en donde está el “Valor buscado”, la siguiente de la derecha es la 2 y así sucesivamente.
Ordenado
Es opcional, puede especificarse como “VERDADERO” (1) si se desea una coincidencia aproximada o “FALSO” (0) si se desea una coincidencia exacta del “Valor buscado”. Si no especifica el valor predeterminado siempre será VERDADERO (1).

Vamos con un ejemplo:

La matriz de datos está en el rango “B2:E7” y a través del uso de “BUSCARV” en “H2”, “I2” y “J2”, e ingresando un código de la primera columna de la matriz en la celda “G2”, se obtienen los valores deseados en las celdas con la fórmula respectiva:

Como se puede apreciar en el argumento “Ordenado” he usado cero (0) que es útil solo para coincidencias exactas, pero ¿qué ocurre si el código ingresado en “G2” no es exactamente igual a los de la matriz. Veamos:

Si usásemos uno (1) nos daría como resultado lo correspondiente al código “A1005” dado a que así se buscaría una coincidencia aproximada. Quizás en casos como este no sea tan importante, pero veamos un ejemplo en donde sería muy útil.

Vamos a suponer que tenemos que calificar alumnos/as y las notas son en base a rangos del 0 al 20.

Entonces, si “BUSCARV” no puede encontrar el “Valor buscado” y el cuarto argumento (Ordenado) es “VERDADERO” (1), la función de la fórmula buscará una coincidencia aproximada, es decir utilizará el valor más alto que sea menor o igual al “Valor buscado” dentro de la columna 1 de la matriz. Para que se entienda mejor usaremos lo de las notas de la tabla anterior solo que como ahí son rangos, para poder usar “BUSCARV” colocaremos valores del siguiente modo:

Entonces, al aplicar las fórmulas podemos tener algo así:

En donde la columna “E” es netamente decorativa, en la columna “F” sí ingresamos la supuesta nota y en la columna “G” está la fórmula que necesitamos y que nos da el resultado esperado.

Y esa, amigos, es la forma de usar "BUSCARV". Hasta la próxima.

Abraham Valencia

domingo, 25 de noviembre de 2018

Insertar fórmulas con macros

En muchas ocasiones los usuarios/as de Excel desean insertar fórmulas a través de VBA; para este fin hay varias propiedades del objeto “Range” que nos pueden ayudar. Aunque hay más, vamos a centrarnos, en esta ocasión, en cuatro:

- Formula

- FormulaLocal

- FormulaR1C1

- FormulaR1C1Local

En el caso de la propiedad “Formula”, toma como base el idioma primigenio del VBA, es decir, el inglés; además de eso toma como separador de lista la coma (,). Estos detalles son muy importantes a tomar en cuenta cuando insertemos una fórmula en una celda ya que significa que, sea cual sea el idioma de nuestro Office, debemos colocar la función en inglés. Asimismo, aunque nuestro separador de lista sea el punto y coma (;) deberemos usar la coma (,) en la macro. En todos los casos, el VBA detectará el idioma del Office y el separador de lista del sistema operativo, y en la celda colocará el adecuado. Podríamos decir que el inglés y la coma (,) son “universales” cuando de la propiedad “Formula” hablamos. Esto se entenderá mejor con un ejemplo. En mi portátil tengo el Office en Castellano y mi separador de lista es el punto y coma (;) pero insertaré fórmulas del siguiente modo:

Range(“A11”).Formula="=Sum(A1:A10)"
Range("G16").Formula = "=VlookUp(F16,B25:C29,2,1)" 

En las respectivas celdas tendremos las siguientes fórmulas:

=Suma(A1:A10)
=BuscarV(F16;B25:C29;2;1) 

Cuando usamos la propiedad “FormulaLocal”, al contrario, debemos usar las funciones en el idioma de nuestro Office y el separado de lista de nuestro sistema operativo. Por ejemplo, en mi portátil tendría que colocar así:

Range(“A11”).FormulaLocal="=Suma(A1:A10)"
Range("G16").FormulaLocal = "=BuscarV(F16;B25:C29;2;1)" 
La desventaja, para mí, es que solo será útil en computadoras con Office en nuestro mismo idioma y con el mismo separador de lista; en otros casos insertará las fórmulas con errores.

En el caso de la propiedad “FormulaR1C1”, vamos a explicar su uso con uno de los ejemplos que ya hemos usado. Insertaremos en la celda “A11” la fórmula "=Suma(A1:A10)" del siguiente modo:

 Range("A11").FormulaR1C1 ="=SUM(R[-10]C:R[-1]C)"

Tal como con la propiedad “Formula”, en el caso de “FormulaR1C1” también se usan las funciones en inglés y el separador de lista debe ser la coma (,). Las referencias R1C1 deben ser entendidas del siguiente modo, para este caso:

- La celda de referencia sería en este caso la “A11”

- “R[-10]” hace referencia a 10 filas arriba de “A11”, es decir la fila 1

- “C” hace referencia a la misma columna, es decir a la “A”

- “R[-1]” hace referencia a una fila arriba de “A11”, es decir la fila 10

- “C”, nuevamente, hace referencia a la misma columna, es decir a la “A”

Con la propiedad “FormulaR1C1Local”, se usa la función en el idioma del Office y el separador de lista del sistema operativo y las referencia a filas cambia de “R” a “F”. Para insertar la misma fórmula del ejemplo anterior sería así:

Range("A11").FormulaR1C1Local ="=Suma(F[-10]C:F[-1]C)"

Y eso es todo en esta ocasión, espero se haya entendido.. Hasta la próxima.

Abraham Valencia

martes, 30 de octubre de 2018

Exportar rangos como archivos de imagen

En los foros, en mucha ocasiones, los usuarios desean convertir algún rango de sus hojas en un archivo de imagen por diversos motivos. Si bien Excel no tiene una herramienta propia que logre convertir un rango y exportarlo como archivo de imagen de modo automático, a través de VBA podemos lograrlo.


Para lograrlo vamos a comentar que es lo que haremos al estilo herramientas de Excel. Primero vamos a copiar el rango que deseamos tener como imagen y aprovecharemos que a través de “Pegado especial” dicho rango copiado se puede pegar justamente como imagen pero ello lo haremos dentro de un objeto “Chart” ¿por qué? Pues los objetos “Chart” tienen el método “Export” que nos permitirá exportar el nuevo objeto como un archivo de imagen propiamente dicho. Entonces, manos a la obra.
Vamos a suponer que el rango que necesitamos exportar va de la celda “A1” a la “D5”:


Para obtener la imagen de ese rango, vamos a usar las propiedades Top (Límite superior), Left (límite izquierdo), Width (Ancho) y Height (Alto) del rango que necesitamos. Previamente declararemos las variables, obtendremos los datos requeridos y usaremos el método “CopyPicture” para copiar el rango deseado.
Dim Izquierda As Single, Arriba As Single, Ancho As Single, Alto As Single 
Application.DisplayAlerts = False
Application.ScreenUpdating= False 
With Worksheets("Hoja1").Range("A1:D5")
  Izquierda = .Left
  Arriba = .Top
  Ancho = .Width
  Alto = .Height
       .CopyPicture 
End With  
Para evitar las alertas del Excel las hemos desactivado así como hemos desactivado las actualizaciones de pantalla.
Luego lo que haremos es crear un objeto “Chart” cuyas características de tamaño serán similares al rango de nuestro interés (lo lograremos a través de las variables usadas), pegaremos en él la imagen y con el método “Export” exportaremos la imagen hacia la ruta y con el nombre que deseemos. Por último con el método “Delete” borraremos el gráfico una vez ya exportado.
With Worksheets("Hoja1").ChartObjects.Add(Izquierda, Arriba, Ancho, Alto)
  .Chart.Paste
   .Chart.Export "D:\Temporal.jpg"
  .Delete 
End With 
No olvides reemplazar el rango por el tuyo, los nombres de la hoja por las tuyas y por supuesto la ruta y nombre del archivo también tienes que adaptarlas. Eso es todo por hoy.
Abraham Valencia