lunes, 21 de enero de 2013

25. TEXTO DE CELDA SELECCIONADA A MAYUSCULAS

Todos sabemos que en excel no existe el convertir a MAYÚSCULAS las celdas con textos en minúsculas, pero he aquí la solución.."siempre la solución mas simple es la correcta". Seria mas útil si instalamos esta macro en un botón en la cinta de opciones.


‘Método que devuelve el valor literal en mayúsculas de la celda (s) seleccionada E. hola ->HOLA
Option Explicit

Public Sub Mayusculas()
Dim c As Range
For Each c In Selection
  c.Value = StrConv(c.Value, vbUpperCase)
Next c
End Sub

viernes, 20 de julio de 2012

24. SUBNETING VLSM (MASCARA VARIABLE)

Archivo en Excel descargable para evaluación.. aun no esta terminado pero me gustaría ir solucionando los bugs y errores en el algoritmo..
Los datos deben ser introducidos en las celdas con el fondo o relleno verde. Espero sus comentarios y criticas para hacer correcciones. Gracias

Clic para descargar Archivo .XLSM

Para el procedimiento paso a paso clic aqui



viernes, 25 de noviembre de 2011

23. DATOS VINCULADOS PARA LA GESTIÓN DE ALUMNOS – Control Docente

INSTRUCCIONES
He desarrollado para demostración un sistema de control de Alumnos mal llamado “Control Docente”. Este Libro Gestiona la inscripción, inserta nuevos alumnos y controla la asistencia, prácticosexámenes y entrega la Nota Final. Ordena los alumnos por Curso, Apellido Paterno, Apellido Materno.
Private Sub CommandButton1_Click() ‘Boton Insertar Alumno Nuevo
  Application.ScreenUpdating = False
  Application.Calculation = xlCalculationManual
  Dim fil As Long: Dim col As Long: Dim nro As Integer
  Me.TextBox1.SetFocus
  nro = 1
  fil = [B8].Row
  col = [B8].Column
  If ([B8] <> "") Then
    Do While (Cells(fil, col).Value <> "")
      fil = fil + 1
      nro = nro + 1
    Loop
  End If
  Call copiarFila("asistencia", fil, 32, nro)
  Call copiarFila("practicos", fil, 33, nro)
  Call copiarFila("examenes", fil, 31, nro)
  Call copiarFila("notasFinales", fil, 11, nro)
  Call ordenar("notasFinales", fil, 9)
  Call ordenar("examenes", fil, 28)
  Call ordenar("practicos", fil, 28)
  Call ordenar("asistencia", fil, 28)
  UserForm1.Hide
  Call limpiarFormulario
  With Worksheets("notasFinales")
    .Range("G8").FormulaLocal = "=SIERROR(REDONDEAR(Asistencia!AE8*K$2;0);0)"
    .Range("H8").FormulaLocal = "=SIERROR(REDONDEAR(Practicos!AF8*K$3;0);0)"
    .Range("I8").FormulaLocal = "=SIERROR(REDONDEAR(Examenes!AC8*K$4;0);0)"
    .Range("G8:I8").AutoFill Destination:=Range(Cells(8, 7), Cells(fil + 1, 9)), Type:=xlFillDefault
  End With

  Worksheets("Asistencia").Select
  Application.Calculation = xlCalculationAutomatic
  Application.ScreenUpdating = True
End Sub
Private Sub copiarFila(hoja As String, fil As Long, col As Long, nro As Integer)
  Dim miRango As String
  Worksheets(hoja).Activate
  Worksheets(hoja).Range(Cells(fil, 2), Cells(fil, col)).Copy Destination:=Range(Cells(fil + 1, 2), Cells(fil + 1, col))
  Application.CutCopyMode = False
  Cells(fil, 2).Value = nro
  Cells(fil, 3).Value = StrConv(TextBox3.Text, vbProperCase)
  Cells(fil, 4).Value = StrConv(TextBox4.Text, vbProperCase)
  Cells(fil, 5).Value = StrConv(TextBox2.Text, vbProperCase)
  Cells(fil, 6).Value = StrConv(TextBox1.Text, vbProperCase)
End Sub
Private Sub limpiarFormulario()
  TextBox1.Text = ""
  TextBox2.Text = ""
  TextBox3.Text = ""
  TextBox4.Text = ""
End Sub
Private Sub CommandButton2_Click() ‘Boton de Cancelar
  Me.TextBox1.SetFocus
  Me.Hide
  Call limpiarFormulario
End Sub
Private Sub ordenar(hoja As String, fil As Long, col As Long)
  Application.ScreenUpdating = False
  Application.Calculation = xlCalculationManual
  Range(Cells(8, 3), Cells(fil, col)).Select
  With ActiveWorkbook.Worksheets(hoja).Sort
    .SortFields.Clear 'SortOn=xlSortOnValues ordena por valores
    .SortFields.Add Key:=Range("F8:F17"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .SortFields.Add Key:=Range("C8:C17"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .SortFields.Add Key:=Range("D8:D17"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .SortFields.Add Key:=Range("E8:E17"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .SetRange Range(Cells(8, 3), Cells(fil, col))
    .Header = xlNo 'sin encabezado
    .MatchCase = False 'no distingue entre mayusculas y minusculas
    .Orientation = xlTopToBottom
    '.SortMethod = xlPinYin
    .Apply
  End With
  'Worksheets(hoja).Range("AC4").Value = Application.WorksheetFunction.CountIf(Range("G8:AB8"), "")
  Application.Calculation = xlCalculationAutomatic
  Application.ScreenUpdating = True
End Sub


VIDEO DEMOSTRATIVO:

lunes, 14 de noviembre de 2011

22. ACTIVAR O INSTALAR COMPLEMENTOS EN EXCEL


El modulo estará disponible para cualquier libro de Excel.
INSTRUCCIONES
1. Clic en Archivo/Opciones/Complementos:

2. Clic en Ir y active Aliteral y Aceptar

3. Ahora la función aLiteral estará disponible para cualquier Libro de excel

21. CREAR COMPLEMENTOS VBA


INSTRUCCIONES
1. En la ventana VBA:
Archivo/Guardar
2. Guarde con el Tipo Complemento de Excel:


3. Clic en Guardar. Note que se guarda en la carpeta de Complementos pero deberá activar el complemento con los pasos indicados en tema siguiente 22. Activar o Instalar Complementos

20. FUNCIÓN QUE DEVUELVE EL LITERAL DE UN NUMERO


Función que devuelve el literal de un número entero entre 0 y 100
Ej. 98 -> Noventa y Ocho
INSTRUCCIONES
1. Cree un nuevo Libro y Modulo nuevo
2. Transcriba el siguiente código:

Function aLiteral(ByVal valor As Double) As String
  Dim literal As String
  valor = Round(valor, 0)
  valor = Abs(valor)
  Dim numeros(100) As String
  numeros(0) = "cero"
  numeros(1) = "uno"
  numeros(2) = "dos"
  numeros(3) = "tres"
  numeros(4) = "cuatro"
  numeros(5) = "cinco"
  numeros(6) = "seis"
  numeros(7) = "siete"
  numeros(8) = "ocho"
  numeros(9) = "nueve"
  numeros(10) = "diez"
  numeros(11) = "once"
  numeros(12) = "doce"
  numeros(13) = "trece"
  numeros(14) = "catorce"
  numeros(15) = "quince"
  numeros(20) = "veinte"
  numeros(30) = "treinta"
  numeros(40) = "cuarenta"
  numeros(50) = "cincuenta"
  numeros(60) = "sesenta"
  numeros(70) = "setenta"
  numeros(80) = "ochenta"
  numeros(90) = "noventa"
  numeros(100) = "cien"
  If (valor = 0) Then
    literal = numeros(valor)
  Else
    Do
      If (valor >= 100) Then
        If (valor = 100) Then
          literal = numeros(100)
          valor = valor - valor
        Else
          valor = 0
          On Error GoTo salir
        End If
      End If
      If (valor >= 10 And valor < 100) Then
        If (valor < 16) Then
          literal = literal & numeros(valor)
          valor = valor - valor
        Else
          literal = literal & numeros(Int(valor / 10) * 10)
          valor = valor - (Int(valor / 10) * 10)
          If (valor > 1) Then
            literal = literal & " y "
          End If
        End If
      End If
      If (valor > 0 And valor < 10) Then
        literal = literal & numeros(valor)
        valor = valor - valor
      End If
    Loop Until (valor = 0)
  End If
salir:
  aLiteral = literal
End Function

3. Guarde o siga con los siguientes temas (Crear un complemento e Instalarlo)
Nota.- Como puede verse esta función podría mejorarse para las centenas, unidades de mil, decenas de mil, etc. y podría agregarse soporte para decimales o usarse para otro tipo de literales.

VÍDEO DEMOSTRATIVO:

19. FUNCIONES VBA Y PARÁMETROS POR VALOR Y REFERENCIA


Las funciones son métodos que devuelven solo un tipo de resultado en contraste con los procedimientos que pueden devolver ningún o más de un resultado.
Ej.
Function nombreFuncion (ByVal [parámetros]) As tipoDato ‘función con parámetros por valor
[Sentencias]
nombreFuncion = [ResultadoDevuelto]
End Function

Sub nombreFuncion (ByRef [parámetros])  ‘procedimiento con parámetros por Referencia
[Sentencias]
End Function
LOS PARÁMETROS VBA
Pueden ser por valor o por referencia.
Por valor, quiere decir que se pasa una copia del valor original y cualquier cambio en esta no afecta a la original
Por referencia, se crea un apuntador a la variable original por lo que cualquier cambio en el valor de la variable local afectara a la variable original