Función para calificar una variable

Ahí les dejo otra función con múltiples aplicaciones

 

Public Function Calificar(calif As Double, pesos As Range, inferior As Range, superior As Range)

‘Función para calificar una variable desarrollada por Carlos Enrique Vázquez Moreno

‘Quito 20 / 8 / 2016

‘pesos es la calificación a asignarse

‘inferior es el límite inferior del rango
‘Superior es el límite superrior del rango
‘calif es el valor de la variable a calificar

Application.Volatile

‘Se declara variable auxiliar

Dim i As Integer

‘Se recore todo el rango de “pesos” usando un loops For

For i = 1 To pesos.Count

‘Se evalúa y califica usando la función Select case

Select Case calif
Case inferior(i) To superior(i)
Calificar = pesos(i)
End Select
Next i

End Function

Función para determinar si una placa es de un auto o de una moto

He desarrollado esta función para conocer si una placa es de un auto o de una moto.Sin embargo puede tener múltiples aplicaciones.

Public Function autoomoto(placa, carro, moto) As String

‘Función desarrollada por Carlos Enrique Vázquez Moreno

‘Quito 16/09/2016

‘Para conocer si una placa es de un auto o de una moto

Application.Volatile

‘Se declaran variables auxiliares

Dim r As Integer

Dim t As String

Dim f As String

‘Se estima el número de caracteres de la placa

r = Len(placa)

‘ Se define si los tres primeros caracteres de la placa son números

t = IsNumeric(Mid(placa, 1, 3)) ‘

Se define si los últimos caracteres de la placa son números

f = IsNumeric(Mid(placa, 4, r))

‘Se evalua si una placa es de un auto o de una moto

If r = 6 And t = False And f = True Then

autoomoto = carro

ElseIf r = 5 And t = False And f = True Then

autoomoto = moto

Else: r = 6 And t = False And f = False autoomoto = moto

End If

End Function

 

Espero sea útil

Crear y modificar gráficos con VBA

Crear y modificar gráficos con VBA

De la página excelyvba.com les dejo este interesante y útil artículo:

En el ejemplo de hoy vamos a enseñaros como crear gráficos con VBA y modificarlos usando también VBA. Las herramientas que ofrece Excel en cuanto a manipulación de gráficos son bastante completas. Sin embargo, mediante VBA, podemos sacar mucho más provecho a estos gráficos especialmente en cuanto a modificación dinámica se refiere.

En este artículo vamos a explicar cómo crear un gráfico mediante VBA, seleccionar el tipo de gráfico, añadir datos y modificar el formato.

Para demostrar estas posibilidades que nos ofrece VBA hemos creado un ejemplo con varias series de datos.

Contenido [Ocultar]

Datos iniciales:

A lo largo de todo este artículo vamos a usar los siguientes datos para nuestro gráfico:

 

Año 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015
Serie 1 265 105 25 45 155 133 196 10 128 249 289
Serie 2 90 249 186 98 211 121 231 170 220 64 2
Serie 3 12 117 222 71 262 224 250 188 1 28 84
Serie 4 193 136 262 88 168 132 5 228 14 68 57

Para entender mejor los ejemplos mostrados a lo largo del artículo destacar que la tabla se encuentra en el rango de “B7:M11”.

El link para descargar el ejemplo completo con todas las macros incluidas esta al final del articulo.

Crear gráficos con VBA

Como siempre lo primero abrimos el Editor de Visual Basic (VBE) e insertamos un módulo.

El código básico para crear un gráfico, elegir el tipo de gráfico y asignarle unos datos es el siguiente:

Sub crear_grafico()

Dim grafico As ChartObject

Dim wks As Worksheet

Set wks = ActiveWorkbook.Sheets(1)

Set grafico = wks.ChartObjects.Add(Left:=20, Width:=400, Top:=50, Height:=200)

grafico.Name = “Grafico_1”

grafico.Chart.ChartType = xlXYScatterLines

grafico.Chart.SetSourceData Source:=wks.Range(“C8:M11”)

End Sub

 

En la segunda línea de código hemos creado una colección de gráficos (ChartObject). Nuestro gráfico formará parte de esta colección de gráficos, que a su vez está englobado en la primera hoja del documento. Si en vez de eso hubiéramos escrito la siguiente línea de código “ActiveWorkbook.Charts.Add” Excel hubiera añadido una nueva pestaña a nuestro documento conteniendo únicamente un gráfico.

Las unidades usadas en la quinta linea del código (Left:=20, Width:=400, Top:=50, Height:=200) mostrado arriba corresponden a puntos. En una pulgada (25.4 mm) hay 72 puntos, es decir nuestro gráfico tendrá un tamaño de 7.05 cm de alto por 14.11 cm de ancho (para más información ver https://support.microsoft.com/en-us/kb/76388)

Left and Top indican el margen que dejamos en nuestro gráfico a la izquierda y arriba respectivamente.

A la hora de seleccionar el tipo de gráfico, una vez escrito el símbolo igual en esa línea de código, podemos pulsar “Ctrl + espacio” para que VBE nos muestre una lista con todas la opciones disponibles. Esta herramienta es muy útil y yo personalmente la uso de manera continua,  eligiendo entre las opciones disponibles en vez de tratar de averiguar el código correcto.

Seleccionar un gráfico existente

Mediante la macro mostrada a continuación seleccionamos el gráfico “Grafico_1”. También podríamos seleccionar este gráfico haciendo referencia al número de gráfico (“ChartObjects(1)”)

Sub seleccionar_grafico()

Dim wks As Worksheet

Set wks = ActiveWorkbook.Sheets(1)

wks.ChartObjects(“Grafico_1”).Select

End Sub

Añadir una serie de datos a un gráfico

Mediante el siguiente código vamos a añadir únicamente una serie de datos a nuestro gráfico:

Sub añadir_datos()

Dim cht As Chart

Set cht = ActiveWorkbook.Sheets(1).ChartObjects(“Grafico_1”).Chart

cht.SeriesCollection.NewSeries.Select

With Selection

.Name = Range(“B8”).Value

.XValues = Range(“C7:M7”)

.Values = Range(“C8:M8”)

End With

End Sub

Podríamos añadir todas la series de datos mediante un bucle:

Sub añadir_datos_2()

Dim cht As Chart

Dim i As Integer

Set cht = ActiveWorkbook.Sheets(1).ChartObjects(“Grafico_1”).Chart

For i = 1 To 4

cht.SeriesCollection.NewSeries.Select

With Selection

.Name = Cells(i + 7, 2).Value

.XValues = Range(“C7:M7”)

.Values = Range(“C8:M8”).Offset(i – 1, 0)

End With

Next i

End Sub

Seleccionar una serie de datos de un gráfico

Para seleccionar una serie de datos del gráfico debemos usar el siguiente código:

Sub seleccionar_serie()

Dim wks As Worksheet

Set wks = ActiveWorkbook.Sheets(1)

wks.ChartObjects(“Grafico_1”).Chart.SeriesCollection(1).Select

End Sub

También podemos escribir el código de la siguiente manera:

Sub seleccionar_serie()

Dim cht As Chart

Dim wks As Worksheet

Set wks = ActiveWorkbook.Sheets(1)

Set cht = wks.ChartObjects(“Grafico_1”).Chart

cht.SeriesCollection(“Series1”).Select

End Sub

Borrar series de datos de un gráfico mediante un bucle

Podemos borrar todas las series de datos de un gráfico de varias maneras, entre las cuales están las siguientes dos:

Método 1 – Bucle For / Next (link):

For i = cht.SeriesCollection.Count To 1 Step -1

cht.SeriesCollection(i).Delete

Next i

Método 2 – Bucle For / Each

Dim series As series

For Each series In cht.SeriesCollection

series.Delete

Next series

Editar el título del gráfico

En este ejemplo hemos creado el título del gráfico, lo hemos llamado “Grafico 1” y posteriormente hemos modificado la letra, tamaño y color del texto.

Sub editar_titulo()

Dim cht As Chart

Set cht = ActiveWorkbook.Sheets(1).ChartObjects(“Grafico_1”).Chart

cht.HasTitle = True

cht.ChartTitle.Text = “Grafico 1”

With cht.ChartTitle.Font

.Size = 16

.Bold = True

.Color = RGB(255, 0, 0)

End With

End Sub

Editar los ejes de un gráfico:

Mostrar / Ocultar los ejes:

cht.Axes(xlCategory, xlPrimary).Delete

cht.Axes(xlValue, xlPrimary).Delete

cht.HasAxis(xlCategory, xlPrimary) = True

cht.HasAxis(xlValue, xlPrimary) = True

Mostrar gridlines:

cht.Axes(xlCategory).HasMajorGridlines = True

cht.Axes(xlCategory).HasMinorGridlines = True

cht.Axes(xlValue).HasMajorGridlines = True

cht.Axes(xlValue).HasMinorGridlines = True

Editar los ejes horizontal  y vertical:

cht.Axes(xlCategory).MaximumScale = 2020

cht.Axes(xlCategory).MinimumScale = 2000

cht.Axes(xlCategory).MajorUnit = 2

cht.Axes(xlCategory).MinorUnit = 1

cht.Axes(xlCategory).MajorTickMark = xlTickMarkOutside

cht.Axes(xlCategory).MinorTickMark = xlTickMarkOutside

cht.Axes(xlCategory).ReversePlotOrder = True

cht.Axes(xlCategory).LogBase = 10

cht.Axes(xlCategory).DisplayUnit = xlHundreds

cht.Axes(xlCategory).TickLabelPosition = xlTickLabelPositionNextToAxis

cht.Axes(xlCategory).Crosses = xlMaximum

Editar el formato de una serie de datos

En este ejemplo vamos a modificar el formato de una serie de datos de nuestro gráfico:

Modificar la linea:

srs.Format.Line.ForeColor.RGB = RGB(255, 0, 0)

srs.Format.Line.Weight = xlThin

srs.Format.Line.Style = msoLineThinThick

srs.Format.Line.DashStyle = msoLineDashDot

srs.Format.Line.Transparency = 0.5

Modificar los puntos:

srs.MarkerSize = 10

srs.MarkerStyle = xlMarkerStyleDiamond

srs.MarkerBackgroundColor = RGB(0, 255, 0)

srs.MarkerForegroundColor = RGB(0, 0, 255)

Editar la leyenda del gráfico

Algunas de las opciones que tenemos para modificar la leyenda de un gráfico son las siguientes

cht.HasLegend = True

cht.Legend.Font.Color = RGB(150, 150, 0)

cht.Legend.Position = xlLegendPositionBottom

cht.Legend.Format.Fill.ForeColor.RGB = RGB(50, 50, 0)

 

Ejemplo 1

Usando muchos de los comandos mostrados en este artículo y lo explicado en el artículo “Diversas Maneras de ejecutar una macro”, hemos creado un ejemplo con un gráfico dinámico. En este ejemplo vamos a tener un gráfico con varias series de datos de manera que podamos seleccionar en cualquier momento que series de datos queremos mostrar y entre qué periodo de tiempo actualizándose automáticamente el gráfico.

Crear-y-Modificar-Graficos-con-VBA

 

 

Este es un procedimiento muy peligroso, sirve para realizar demos de aplicaciones en Excel con VBA, Autoelimina el libro

Autoeliminar Libro  (Super Peligrosa!!!)

 

Private Sub Workbook_Open()

Dim fecha As Date

Dim wb As Workbook

Dim diasfaltantes As Date

Const r = “día”

Const t = “días”

fecha = “25/04/2015”       ‘fecha de eliminacion del libro

Set wb = ThisWorkbook

 

If fecha <= Date Then

MsgBox “Se ha cumplido el periodo de prueba del libro!”, vbExclamation

 

With wb

.Saved = True ‘se establece como salvado

.ChangeFileAccess xlReadOnly ‘se pone el acceso al libro como de solo lectura

Kill .FullName ‘se elimina el libro

.Close ‘se cierra el libro

End With

Else

diasfaltantes = fecha – Date

k = CInt(diasfaltantes)

Select Case k

Case 1

MsgBox “Falta ” & k & ” ” & r & ” para cumplirse el periodo de prueba del libro!”, vbExclamation

Case Is > 1

MsgBox “Faltan ” & k & ” ” & t & ” para cumplirse el periodo de prueba del libro!”, vbExclamation

End Select

End If

End Sub

Ya dijeron: solo hace poesía, pues va una función para excel y les dejo el archivo adjunto

meses a años

‘Función para traducir el número de meses a años y meses en texto
‘Función creada por Carlos Vázquez Moreno
’05/11/2013

Public Function Mounthtoyear(meses1 As Double) As String

‘Se Define el argumento meses1 como variable de tipo doble y la función Mounthtoyear como texto (String)

Dim mesesalaño As Double
mesesalaño = 12
‘Se define la variable “mesesalaño” como doble y se da un valor de 12

years = meses1 / mesesalaño
‘Se calcula el número de años
year1 = Int(years)
‘Se convierte en números enteros la variable “years”

mounth1 = meses1 Mod mesesalaño
‘Se calcula el residuo para conocer el número de meses

año = CStr(year1)
mes = CStr(mounth1)
‘Se convierte a variables texto las variables “year1” y “mounth1” para poder usarlas en la función

‘Se usa el condicional If—>Elseif para que la función devuelva todas las combinaciones posibles

If mounth1 >= 2 And year1 >= 2 Then

Mounthtoyear = año & ” ” & “años” & ” ” & “y” & ” ” & mes & ” ” & “meses”

‘La función va a devolver plurales, ejemplo: 23 años y 3 meses

ElseIf mounth1 = 0 And year1 > 1 Then

Mounthtoyear = año & ” ” & “años”

‘La función va a devolver plural de años sin meses, ejemplo: 5 años

ElseIf year1 = 1 And mounth1 = 0 Then

Mounthtoyear = año & ” ” & “año”

‘La función va a devolver singular en años sin meses, ejemplo: 1 año

ElseIf year1 = 0 And mounth1 = 1 Then

Mounthtoyear = mes & ” ” & “mes”

‘La función va a devolver singular en meses sin años, ejemplo: 1 mes

ElseIf year1 = 0 And mounth1 > 1 Then

Mounthtoyear = mes & ” ” & “meses”

‘La función va a devolver plural en meses sin años, ejemplo: 3 meses

ElseIf year1 = 1 And mounth1 = 1 Then

Mounthtoyear = año & ” ” & “año” & ” ” & “y” & ” ” & mes & ” ” & “mes”

‘La función va a devolver singular en meses y años, ejemplo: 1 año y 1 mes

ElseIf year1 > 1 And mounth1 = 1 Then

Mounthtoyear = año & ” ” & “años” & ” ” & “y” & ” ” & mes & ” ” & “mes”

‘La función va a devolver plural en años y singular en meses, ejemplo: 2 años y 1 mes

ElseIf year1 = 1 And mounth1 > 1 Then

Mounthtoyear = año & ” ” & “año” & ” ” & “y” & ” ” & mes & ” ” & “meses”

‘La función va a devolver singular en años y plural en meses, ejemplo: 1 años y 11 meses

End If

End Function