Archive

Archive for the ‘Fórmulas y funciones’ Category

Crear categoría y descripción para funciones personalizadas UDF en Excel

November 24, 2012 8 comments

En un artículo del 2010 explicaba cómo Crear funciones personalizadas en Excel y tener nuestras propias funciones escritas por nosotros mismos.

En esta ocasión comparto un código en vba que nos permitirá crear una categoría personalizada y agrupar nuestras UDF’s (User Define Function), así como darles una descripción a los argumentos que tendrán y a la misma función.

Tendremos 3 partes principales para tener la categoría y las descripciones de la función:

  1. Mandar llamar la función desde el evento Open del archivo.
  2. El código que asignará los elementos de la función.
  3. El código de la función.

Código

En el evento Open del objeto ThisWorkbook asignamos el código siguiente.

Private Sub Workbook_Open()
    Call DescribeFunctionEXCELeINFOCOLORCELDA
End Sub

En un módulo normal.

'El código que describe la categoría de la función y sus argumentos
Private Sub DescribeFunctionEXCELeINFOCOLORCELDA()
    Dim NombreFunc As String        'nombre de la función
    Dim DescFunc As String          'descrición de la función
    Dim Categoria As String         'categoría de la función
    Dim DescArg(1 To 3) As String   'descripción de los argumentos
    '
    NombreFunc = "EXCELeINFOCOLORCELDA"
    DescFunc = "Devuelve el índice de color de la celda seleccioada"
    Categoria = "EXCELeINFO"    'Text category
    DescArg(1) = "Es la celda de donde se obtendrá el índice de color"
    '
    Application.MacroOptions _
            Macro:=NombreFunc, _
            Description:=DescFunc, _
            Category:=Categoria, _
            ArgumentDescriptions:=DescArg
End Sub
'
'Función personalizada UDF
Function EXCELeINFOCOLORCELDA(celda As Range)
'
' EXCELeINFOCOLORCELDA Función
' Devuelve el color de la celda de la celda seleccionada
'
    EXCELeINFOCOLORCELDA = celda.Interior.ColorIndex
    '
End Function

Imágenes

image

image

Nuevas funciones Excel 2013: SI.ND combinada con BUSCARV

November 12, 2012 3 comments

Una de las funciones que vienen con el lanzamiento de Excel 2013 es SI.ND, cuya descripción es: “Devuelve el valor que especificas, si la expresión se convierte en #N/A. De lo contrario, devuelve el resultado de la expresión”.

La función SI.ERROR

Excel 2010 introdujo la función SI.ERROR para devolver un valor especificado, en caso de que la fórmula devuelva #N/A, #¡DIV/0!, #¿NOMBRE?, pero la cuestión es que arrojará un resultado sin detectar cuál fue el error devuelto.

Cómo funciona SI.ND con BUSCARV

La función con la cual se combinará es con la famosa BUSCARV. Dicha función devuelve precisamente #N/A cuando un valor no se encuentra en la lista, lo cual se vuelve de mucha utilidad sin tomamos en cuenta que dicha función es una de las más utilizadas entre los usuarios de Excel.

Animación de la función en ejecución

SI ND

Crear fórmulas Excel con macros independientemente del idioma o separador de argumentos, coma o punto y coma

November 8, 2012 2 comments

Cuando queremos insertar fórmulas en Excel mediante macros, nos encontramos con 2 disyuntivas:

  1. Usar el nombre de la función mdiante lenguaje vba, es decir, su parte en inglés que sea compatible con cualquier Excel en cualquier idioma.
  2. Escribir la fórmula en nuestro propio lenguaje, cual sea que este fuera, adecuando el separador de argumentos: coma (,) o punto y coma(;), pero sólo compatible con otro Excel en nuestro idioma

Insertar fórmulas mediante vba aplicables a Excel en cualquier idioma

Supongamos que necesitamos insertar en una celda la función BUSCARV desde vba. Si esta macro se utilizará en otras versiones de Excel con diferentes idiomas al que usamos, lo mejor será usar los nombres en inglés.

Desde vba usamos la propiedad FORMULA del objeto RANGE:

Range("F6").Formula = "=VLOOKUP(E6,A1:B12,2,0)"

Insertar fórmulas mediante vba aplicables a nuestro idioma

La misma función BUSCARV la deseamos escribir desde vba en nuestro mismo idioma. Para eso debemos hace uso de la propiedad FORMULALOCAL del objeto RANGE.

Range("F6").FormulaLocal = "=BUSCARV(E6,A1:B12,2,0)"

El caso del separador de argumentos cuando es coma o punto y coma

El separador de listas o argumentos varía dependiendo de la configuración regional de nuestro sistema. Por ejemplo, es coma cuando la cofiguración es el Español y punyo y coma cuando la configuración en el inglés. Pero como no nos interesa escribir fórmulas para cada tipo de región, mejor hacemos uso de la propiedad INTERNATIONAL del objecto APPLICATION, para meter a una variable el separador que nos detecte Excel.

Para obtener el separador de argumentos configurado en el Panel de control usamos la siguiente instrucción:

Application.International(xlListSeparator)

Y si dejamos el separador como variable, las instruccones quedarían así:

'Obtener el separador de argumentos
Separador = Application.International(xlListSeparator)
'Para fórmula multi idioma
Range("F6").Formula = "=VLOOKUP(E6" & Separador & "A1:B12" & Separador & _
    "2" & Separador & "0)"
'Para fórmula en nuestro idioma
Range("F6").FormulaLocal = "=BUSCARV(E6" & Separador & "A1:B12" & Separador & _
    "2" & Separador & "0)"

Separar nombres y apellidos en Excel 2013 con llenado rápido

November 1, 2012 1 comment

El un artículo anterior publiqué Separar nombre y apellidos en distintas celdas en Excel en el cual compartía 3 fórmulas donde podíamos obtener Nombres, Apellido paterno y apellido materno.

En Excel 2013 se introduce una nueva funcionalidad que es Llenado rápido (Flash fill) el cual nos facilita el proceso de extraer información de celdas, siempre y cuando éstas estén en columnas y tengan la misma estructura.

Cómo se hace

En la imagen de ejemplo tenemos una columna de Nombre completo, la cual vamos a extraer los datos de Nombre, Paterno y Materno.

En la columna de Nombre, ingresamos el nombre de la celda que está a la izquierda. Después en la siguiente fila tecleamos el nombre que está en la siguiente fila y vemos cómo se llena los datos hacia abajo.

Repetimos lo mismo en la siguiente columnas y obtendremos los datos deseados.

Separa nombres y apellidos en 2013

Eliminar filas en Excel que no cumplan una condición, largo, contenido, color

October 10, 2012 1 comment

Este tip me ha ayudado a depurar bases de datos donde, por ejemplo, necesito que en la columna Número telefónico sólo haya números con un largo de 10 caracteres.

Cómo funciona

En la imagen de ejemplo tenemos una tabla con 2 columnas: NOMBRE, TELEFONO. Elegimos la celda B2 y corremos la siguiente macro:

Sub EliminarFilas()
'Hacemos un bucle Do While el cual se ejecutará hasta que haya una celda vacía
Do While ActiveCell.Value <> ""
    'La condición es que si el largo es diferente a 10...
    If Len(ActiveCell) <> 10 Then
        '... elimina la fila
        ActiveCell.EntireRow.Delete
        ActiveCell.Offset(-1, 0).Select
    Else
    End If
    'Recorre una fila hacia abajo
    ActiveCell.Offset(1, 0).Select
Loop
End Sub

Resultado

Sólo quedarán las filas donde haya habido números a 10 dígitos

image

Otras condiciones

La macro anterior tiene la siguiente línea la cual es la que condiciona el largo de la celda.

If Len(ActiveCell) <> 10 Then

Pero también puede ser que queramos condicionar contenido o formato de la celda.

Ejemplos de otras codiciones:

'Eliminia diferente a largo de 10
If Len(ActiveCell) <> 10 Then

'Elimina diferentes a 1234567890
If ActiveCell.Value <> "1234567890" Then

'Eliminar los que tengan fondo rojo
If ActiveCell.Interior.ColorIndex = 3 Then

'Eliminar que comiencen con ABC""
If Mid(ActiveCell.Value, 1, 3) = "ABC" Then

Cambiar nombre de archivos desde Excel con macros

October 3, 2012 1 comment

Cuando he tenido la necesidad de realizar alguna labor, siempre pienso si en Excel es posible, y esta ocasión no fue la excepción.

Surge la necesidad de cambiarle el nombre a un grupo de archivos que están almacenados en el disco duro, pero por lotes, lo que implicaría cambiar el nombre uno por uno o conseguirse algún software que lo haga. Pero si ya tenemos Excel, lo hacemos en Excel.

Primeramente vamos a hacer uno de la última herramienta añadida al EXCELeINFO addin, que es la de Listar archivos, esto para tener la ruta completa y el nombre de los archivos a cambiar. Armamos el siguiente archivo:

En la columa D, vamos a introducir la siguiente fómula.

=IZQUIERDA(A2,ENCONTRAR(B2,A2)-1)&C2

image

 image

  • Colunma A: ruta completa del archivo a cambiar.
  • Columna B: nombre de archivo a cambiar.
  • Columna C: nombre del nuevo archivo (con extensión).
  • Columna D: fórmula que concatena la ruta del archivo anterior con el nombre nuevo.

Es indispensable o por lo menos es lo que recomiendo, que hagamos la consulta de los nombres de los archivos para tener el dato actualizado, aunque también podremos ingresar los datos manuales de ruta, nombres anterior y nuevo nombres.

Para el archivo armado en este ejemplo, utilizaremos la siguiente macro:

Sub CambiarNombre()
'Antes de correr la macro, elije las celdas que tengan la ruta
'del nombre actual, es decir a partir de A2
Dim NombreNuevo As String
Dim NombreAnterior As String
'Si no encuentra algún archivo, continuará con el siguiente
On Error Resume Next
For Each Celda In Selection
    NombreAnterior = Celda.Value
'El dato del nombre nuevo será la columna D, especificado con 3
    NombreNuevo = Celda.Offset(0, 3).Value
    Name NombreAnterior As NombreNuevo
Next Celda
On Error GoTo 0
End Sub

:: Descargar el ejemplo

Tienes comentarios, crees que te pueda servir en un futuro ?

Formulario para generar RFC en Excel

September 10, 2012 Leave a comment

Como dirían mis amigos Español, os traigo en esta ocasión un archivo de Excel con un formulario que permite ingrear el nombre y la fecha de  nacimiento para generar el RFC (Registro Federal de Contribuyentes) aplicable para México.

El código es atribuído al Ing. Salvador Garcia Velazquez, por lo que vale especificar que lo que yo sólo diseñé fue el formulario el cual usa la función GeneraRFC.

Nota: según comentarios recogidos de un foro, nos todos los RFC son correctos, por lo que recomiendo no confiar al 100% en los resultados o cualquiera es libre de corregir el código si encuentra alguna diferencia.

Formulario

image

:: Descarga el archivo