Excel Basics 1
WINDOWS-E abre el explorador de archivos
CTRL-SHIFT-N: Crea una nueva carpeta. en el explorador en vista se puede marcar que se vean los archivos con extensiones
Celdas con fòrmulas se ponen en verde
Títulos de columnas con DarkBlue y blanco
Datos que sirvan como input de fórmulas en Rojo con Blanco su título
Cell = intersaction between row and column
Conjunto de celdas es un Worksheet
Se puede colorear las etiquetas de las hojas(sheet). Amarillo datos informativos, Azul para los datos de trabajo, rojo para resultados o reportes
CTRL-S Guardar
F12 Guardar Como
Desplazarse entre hojas: Clic derecho sobre las flechas de desplazamiento y selecciono la hoja. CTRL-PgUp CTRL-PgDown Igual se desplaza entre las hojas
CTRL BackSpace: Regresa a la celda activa
CTRL DownArrow: Última celda con datos
CTRL Shift DownArrow: Selecciona todoas las celdas hacía abajo
CTRL-SCROLL para hacer Zoom IN, Zoom-Out
CTRL-ENTER Put something in the CELL and keep the CELL selected
Align numbers, fecha, horas to the right, text to the left, boolean centrados. Si los números son Texto no se suman
Fn-ESC: En la laptop nos permite accesar las teclas de función sin el Fn
TAB Desplazo hacia la derecha por las celdas
ENTERDesplazo hacía abajo en las celdas
#VALUE! Cuando un valor de la fórmula no es correcto "25+Jose"
table:Es el espacio que existe entre muchas columnas con encabezado hasta que no hay nada y un montòn de datos hacìa abajo hasta que no hay nada
CTRL - * (asterisk key)Selecciona datos en tabla
Celdas seleccionadas Me muevo con TAB y ENTER derecha y abajo por la selección
Mini toolbar Clic derecho sobre celdas seleccionadas
Angry Rabbit Cruz esquina inferior derecha, jalándola puedo generar consecutivos de meses, números
ALT = Se hace el SUM por teclado. Puedo colocarme en el rango correco y usar CTRL-Shift arrow para marcar
Bricklin and Frankstone Crearon el spreadsheet
=Primer carácter en una fórmula
Relative References Las que si copio la fórmula, cambiando dependiendo la posición
Absolute References No cambian y se crean con F4 que se pone antes de la celda que no debe cambiar
Number Formating Es diferente que Style Formating porque sólo afecta números
Number Formating Una cosa es el contenido de la celda y otra es como se muestra por el formato (facade-fachada)
Decrease decimals Redondea
General Format Elimina cualquier formato de número
CTRL-P Print Preview
Page LAYOUT Toolbar de impresión, vista-diseño de página
ALT Se aparecen las teclas rápidas de los menues principales, luego lo presiono y aparecen las de los sub menúes. Además muestra con número para accesar las opciones de la barra de herramientas
Configurar Página: Está en Ajustar área de impresión ALT-C-F, Se separan los rangos de las áreas de impresión por comas
Área de Impresión: Selecciono las celdas que quiera imprimir en una hoja. Puedo agregar áreas de impresión e irán en hojas separadas.
Margenes personalizados Encabezado y pie de página personalizados esto se puede ver en el Configurar Página. Se puede poner número de página, fecha, nombre
Sheet Se puede indicar el área de impresión, voy a ver todas las áreas de impresión que agregué. Puedo agregar separando por comas
Repetir filas en el extremo superior Si quiero que los mismos renglones se repitan en diferentes hojas de impresión
CTRL Se deja presionada para hacer diferentes selecciones, marcar celda con fórmulas Selecionar renglones y columnas arrastrando el mouse
Move or Copy Sheet Seleccionar el sheet, clic derecho y copiar o mover
CTRL Si se deja presionado y se arrastra la hoja, la copia sin el CTRL la mueve
F2 Revisa las celdas que componen una fòrmula
Con el nombre de la fòrmula, me desoliegan y puedo ver el help de cada una
Excel Basics 2
DEL Para borrar lo que pone el autocompletar cuando tecleo valores parecidos en una fila
CTRL-1 Abre el cuadro de diálogo para formatear celdas
Center Across Selection (CTRL-1) En lugar de hacer merge en celdas
Borde Outline - contorno Para el que se centra (Selecciono celdas y CTRL-1)
Charts Selecciono el rengón de títulos y luego el renglón de montos para cada título y luego la gráfica (abcisas y ordenadas)
Graph Lines Las puedo seleccionar para eliminarlas con DEL
Título de gráfica Seleccionarlo y se le puede capturar, arriba en las´fórmulas, una fórmula para igualarlo a una celda
Si muevo la gráfica presionando la tecla ALT, se alinea a una celda
Chart Elements Le hago clic una vez, y selecciona los de un tipo y los puedo borrar, dos veces selecciona solo uno
Colores CTRL-1 Seleccionamos una barra y CTRL-1 y podemos ver el seleccionar colores entre punto o multiple colors
Excel Basics 3
COUNT:Cuenta las celdas que tienen números y que no son vacías
COUNTA:Cuenta las celdas que no son vacías, o sea que hasta los títulos
Se deben utilizar las funciones CONJUNTO
COUNTIFS:(Conjunto) Se puede poner más de un criterio para que cuenta
SUMIFS:(Conjunto) Se puede poner más de un criterio para que sume. Rango de suma, rango de comparación y criterio
Si le pones espacios a los extremos, EXCEL no hace TRIM y no lo cuenta
En la ayuda que aparece cuando tecleo la fórmula, puedo hacer clic sobre el parámetro para que me lo seleccione
Excel Basics 4
Data Analysys or business Inteligence:Ir del Raw Data a Información Útil (acomodarla)
Double Click para que se copien hacía abajo las fórmulas
Tabla dinámica (Pivot Table):En el menú Insert-Tabla Dinámica. Antes puedo seleccionar una celda de la tabla RAW para que seleccione ese rango
Elijo el campo que le voy a hacer distinct o unique list a mi tabla dinámica
Aparece el cuadro de configuración de fields, ahí elijo los campos que son valores o filas o columnas
Si me pongo sobre alguna de las celdas de la tabla aparece el menú de "Herramientas de Tabla Dinámica" (Pivot Table tools)
En diseño-diseño de informe (Report Layout)
Clic derecho sobre la celda de la columna que quiero formatear y le doy Number-Formatting, no le doy formato de celda porque no es para una PIVOT TABLE
Los campos se van arrastrando (Dragging) para configurar la tabla
Los campos con fòrmula se actualizan en automàtico cuando cambia cosas en la tabla raw, pero las tablas dinàmicas, se les debe hacer clic derecho y actualizar
ALT-B-BA Teclas rápidas
Across Tab:Tabla cruzada poniendo títulos en filas y renglones
Puedo estar cambiando entre filas y columnas y se va actualizando. Incluso hace las agrupaciones
Al igual que el formato, dando clic derecho sobre una celda, puedo cambiar la funciòn de agregación de esa celda
Si poner un campo texto en valores, entonces hace COUNT
Seleccionando la tabla, la puedo copiar y pegar
CTRL-HOME:Se va a la celda inicial
CTRL-ARROW (cualquier): Se va a la última celda con valor en esa dirección. Me puedo poner enmedio de las funciones de agregación para señalar rangos
CTRL-Bakspace: Regreso a la primar celda de mi selección
Si agrego una columna de filtro, arriba se agrega un drop down
Insert Slicer (Insertar filtro visibles):En analizar, insertar segmentación de datos
Se les puede poner el diseño automático
Seleccionando el slicer, se pueden cambia el número de columnas
Excel Basics 6
CTRL-F1 Muestra la barra de herramientas
Customize Qucik Access Toolbar(QAT):Le puedo dar clic derecho a los íconos y las opciones y agregarlos a la barra de acceso rápido
Clic derecho hasta arriba y le digo si la quiero ver debajo o encima de la barra de herramientas la QAT
Le puedo dar restablecer
Pegar imagen vinculada
Escenario
Speak Cells on enter
Hay que quitar las que no sirven, como guardar, hacer y deshacer, porque ya sabemos las teclas rápidas
Puedo pegar la tabla como imagen vinculada y cuando cambio algo en la tabla origen la imagen se actualiza
Customiza Ribbon (Personalizar la cinta de opciones):Puedo agregar grupos
Excel Basics 6
En el grupo de estilos, clic derecho y puedo ver la definición, como si fuera su CSS
Por default:
Textos: Se alinean a la izquierda
Números: Se alinean a la derecha
Booleanos: Se alinean al centro
Errores: Se alinean al centro
Me pongo en la división entre los TAB de hojas y el SCROLL horizontal y puedo agrandar o reducir el SCROLL para que se vean más las hojas
La fórmulas no consideran como están formateados los números
Accounting Number format: Signo de pesos fijo, Negativos entre paréntesis, Ceros en guiones, los décimales alineados o sea que los números no necesariamente en la extrema derecha
Revisar como alinea Número, Moneda y contabilidad
El formato general de número elimina todos los formatos cuando se cambia
Redondear:Nos puede servir para cuadrar porcentajes. Y en cantidades siempre hay que redondear
Excel Macros
Activar opciones de programador:En la cinta de opciones elegir la de desarrollador y darle aceptar
Archivos con macros (xlsm) y sin marcos (xlsx)
Archivos xls en modo de compatibilidad (97 a 2003) en la opción archivo-convertir para pasarlo a xlsx. Importante recordar que con macros es xlsm
En la opción archivo-habilitar contenido-opciones avanzadas-Centro de confianza-Configuración de macros
Deshabilitar todas las macros con notificación (Default)
Deshabilitar todas las macros excepto las firmadas
Menú Vista - Macros o menú Programador:Grabar macros
Para meter la tecla abreviada apretar shift y luego la letra que quiera
Aparece el botón hasta abajo de que se está o no grabando la macro
En ese momento se empieza a grabar y cuando le doy detener ya queda
Grabadora de Macros
Activar la opciÓn de programador o desarrollador
Para grabar macros: Botón en desarrollador, Botón en Vista y esquina inferior izquierda el Í­cono grabar
Libro de macros personal es un documento que se carga de forma oculta cada vez que abrimos un EXCEL y podemos usar nuestras macros
Se detiene la macro al terminar de grabar y ya la podemos ejecutar
Habilitar el contenido de las macros, lo habilita para siempre, por eso ver el menú de opciones de EXCEL, ahí podemos habilitarlo solo para una sesión
Cuando se graba la macro se tiene que hacer en un documento nuevo, porque si ya he estado generando cosas, quizás al ejecutar va a tomar mal los nombres de los objetos porque se generarían con nombres nuevos
Seguridad de macros-macros de confianza, si se deshabilita siempre nos va a preguntar
Ejecutar macros desde la cinta de opciones: Personalizar la cinta, crear una nueva pestaña, nuevo grupo, y luego del lado izquierdo selecciono las macros
Siempre que habra EXCEL se va a mostrar el grupo
Personalizar la barra de herramientas superior para que solo funcione en ese documento: Más comandos - Elijo si para todos los libros o solo ese - Busco en macros la macro y la agrego
Desarrollador-Insertar-Controles de Formulario: Limitados para código
CTRL-SHIFT-(y una letra): Para asignar tecla rápida a la ejecución de la macro
Range("A1")[.Select][.Value] - Hace referencia absoluta
Sheets("Unidades Producidas").Select
Application.DisplayAlerts = False Para que no pida confirmaciones
ActiveWindow.SelectedSheets.Delete Elimina la hoja seleccionada
Application.DisplayAlerts = True. Para que pida confirmaciones
Columns("A:B").Select - Selecciona las columnas A y B
Selection.Delete Shift:=xlToLeft
Application.ScreenUpdating=False [TRUE - Para activalor al final de la macro]. Para que la macro no vaya actualizando la ventana mientras se ejecuta y así­ es más rápida. Puede quitar el parpadeo
Cuando se graba la macro, podemos indicar que se usen referencias relativas
A1 de la selección y A1 de la hoja, son cosas diferentes
ActiveCell.Offset(0,1).Range("A1").Select - Offset 0 filas hacia abajo y 1 fila a la derecha
ActiveCell.Offset(0,1).Select El Range lo pone la grabadora pero no es necesario
ActiveCell.FormulaR1C1="Fecha" escribe este título
Selection.EntireRow.Insert - Inserta un renglón en dónde estoy
ActiveCell.Offset(0,-3).Range("A1:D1").Select - Recordamos que es A1 de la selección
Selection.Font.Bold=True
With Selection.Interior
.Pattern=xlSolid
.PatternColorIndex=xlAutomatic
.ThemeColor=xlThemeColorLight1
End With
Range("F5,C8:C10,F10,B13:F30").Select - Permite seleccionavarios rangos o celdas
Selection.ClearContents - Borra el contenido de las celas seleccionadas
Programar en EXCEL (VBA)
ALT-F11 o botón de Visual Basic en desarrollador: Acceder al editor de código VB
Barra estandar y de edición
Los módulos son funciones o subrutinas generales
Si le hago doble clic sobre alguna hoja, es código solo de esa hoja o sobre el workbook, es el ámbito
en el menú Insertar, un userForm
Se pueden insertar módulos de clase para las clases
Las hojas de EXCEL tienen dos nombre, el interno y el externo. El interno es el que ve el objeto y el externo la descripción que le asignamos a la hoja
xlSheetVeryHidden, ni deja que se muestra la hoja ni con la opción de mostrar de EXCEL
Sub - End Sub
Option Explicit para que pida declaración
Existe el bloque con comentarios
Dim Celda as Range
For Each Celda In Selection - Recorre las celdas seleccionadas
Celda.Interior.Color
Insert un botón ActiveX y se muestra el modo diseño
Doble clic sobre el botón para ver su evento o en el editor de código, ponerme sobre la hoja y ahí­ aparecen los objetos incluyendo el botón
Para ver el código de ActiveX, pasamos en desarrollado a modo diseño
Range("F5:F8").ClearContents para borrar el contenido de las celdas
Con lo anterior no hacemos selecciones de más
Range("H6").Value=Range("H6").Value+1
Range("H6")=Range("H6")+1 Se puede así porque su propiedad de Default es Value
Range("H6")=Date, para la fecha actual
Condiciones
If ElseIf Then Else End If
Selecionando la hoja aparecen los eventos
change: Se produce al cambiar el valor de una celda
IsDate(Target.Value)
Target.Offset(0, 1).Value: 0 abajo 1 a la derecha. Puedo poner numeros negativos para que vaya arriba y a la izquierda
Format(Target.Value, "dddd"): Día de la semana
CTRL-G: Immedaite Windows
Range("B2"): contenido de esa celda
Target.Column = 1 And Target.Row >= 2, que sea columna 1 y después de la fila 1
MsgBox "El dato introducido no es fecha", vbCritical, "Error"
vbCritical, vbInformation, vbQuestion, vbExclamation
Target.Select
Target.Interior.Color=vbRed, pintar la celda de rojo
Weekday(Target)-Regresa el número de día (Domingo 1, Sábado 7)
Interior - Controla característica de la celda
Target.Interior.Color=xlNone Sin relleno
Con la immediate window, puedo poner ?ActiveCell.Interior.Color y me da el código de color
If Target.Address="$A$3" And (IsDate(Target)=False or Target>Date): Si capturo la A3 ya no es fecha o la fecha es mayor a hoy
Range("A1").Address, esto regresa $A$1
Target<>"" Vemos si es vacío
En el Target debemos tener cuidado porque pueden llegar varias celdas en el evento Change.
Por ejemplo si hago un Range("A0:A20").ClearContents
Application.EnableEvents = False, desactivo los eventos
Con esto desactivo los eventos mientras ejecuto instrucciones de rango
Application.EnableEvents = True, activo los eventos. En caso de que se queden desactivados por error, en la ventana immediate podemos ejecutar que se active y corregir el código
Select Case x
			   Case 2:
			   Case 3 to 5:
			   Case 8,10,12 to 15:
			   Case is >1000:
			   Case is <= Range("A1"):
			   Case Else:
		End Select
Cuando se cumple una de las condiciones ya no evalua el resto
Boton = MsgBox("Deseas continuar", vbCritical + vbYesNo, "Cuidado")
MsgBox "Hola " + CStr(Boton), vbCritical, "Prueba de Mensaje"
vbYes, vbNo: Constantes de respuestas
Worksheets("Hoja2").Select - Selecciona la hoja 2
Worksheets.Count - Número de hojas
Worksheets(ActiveCell.Value).Delete Le digo que elimine la hoja cuyo nombre esta en la celda activa
ActiveCell.Delete Elimina el contenigo de la celda activa
Requerir declaración de variables en opciones, marcar eso
Dim sPlanta as String * 10 De tamaño 10. Además va a rellenar de blancos al final cuando el string no tenga el tamaño
Resp = InputBox("Introduce la fecha", "Fecha de Consulta", Date) 'Date es el valor por default, Regresa un String
Cadena=Cadena & "Nueva Cadena" & vbCrLf
vbCrLf - Constante de saldo de línea
Fila = ActiveSheet.Cells(1048576, "A").End(xlUp).Row + 1 'Encuentra la Última celda que tiene datos sobre la A y dice que fila y le suma 1 Se posiciona en la Última fila de EXCEL. Con Worksheets("Hoja2") podrí­a indicar en que hoja se guarda
Cells(Fila, "A").Value = "José" 'en la fila que se obtuvo, agrega datos
Static Fila as Long - Con esto la variable no pierde su valor mientras no cerremos la hoja, ocurra un error o interrumpamos la ejecución
Ventana de Locales - Ver el contenido de las variables mientras se ejecuta el código
Dim a as String, b as String, r as Integer
Dim a, b, r as Integer -- a y b quedan como Variant
Al siguiente InputBox se le indica el tipo de dato que se quiere ingresar
prA = Application.InputBox("Introduce la fecha de la producción", "Fecha.", Date, , , , , 2)
Format(Date,"dd/mm/yyyy") - Mandar en valor por default para que aparezca la fecha en formato correcto
Argumentos por nombre
prA = Application.InputBox(Prompt:="Introduce la fecha de la producción", Title:="Fecha.", Type:=2)
Set arrCeldas = Application.InputBox(Prompt:="Seleccione festivo", Title:="Seleccionar Festivos", Type:=8)
0-Fórmula
1-Número
2-Texto
4-Boolean
8-Refeencias a Celdas
16-Error (#N/A por ejemplo)
64-Matriz
Las variables Object por default son nothing
		Dim arrCeldas As Range
		Dim rec As Range
		
		Set arrCeldas = Application.InputBox(Prompt:="Seleccione festivo", Title:="Seleccionar Festivos", Type:=8)
		
		For Each rec In arrCeldas
			If IsDate(rec) Then
				If Weekday(rec) = 7 Or Weekday(rec) = 1 Then
					rec.Interior.Color = vbGreen
				End If
			End If
		Next
		
Control de errores: On Error GoTo subError
subError:
Err.Number, Err.Description: Revisar los números de error
exit sub, exit function
Ambito de variables, locales y globales, constantes
Las variables de módulo son globales
Public y en el módulo para ser global
Public varGlobal as Interger. Si se utiliza Dim solo se usa dentro del módulo
Cells(fila,"A").Value
Workbook_BeforeClose - Método antes de cerrar el documento
public Const rojo As Long=8696052
public Const maxRen As Long=1048576
lastRen = ActiveSheet.Cells(maxRen, "A").End(xlUp).Row
			For fila 2 to 11 'Step 2
				Cells(fila,"A").Value:=(fila*2)
				Range("B"&fila+1&":C"&fila+1).Cut 'Corta celdas B y C de la siguiente fila
				Range("E"&fila).Select 'Selecciona la celda E de la fila actual
				ActiveSheet.Paste 'Pega el contenido
			Next
			
		
ActiveSheet.Rows(fila).Delete 'Elimina este renglón, si está entro del bucle, empezar de abajo hací­a arriba
ActiveSheet.Rows(fila).Hidden=True 'Para esconder una fila, sirve para hacer filtros
Propiedad .Enabled del botón para activar o desacticar
Formato de Control - Propiedades - Desactivar mover con las celdas para que al ocultar filas no deje de ser visible
Desactivar y activar parpadeo Application.ScreenUpdating=False [TRUE - Para activalor al final de la macro].
             Dim Celda as Range
		     Range("B:D").Insert 'Inserta tres columnas a partir de la B. Lo que este en B se desplaza hasta la E
			 Range("B1")="Número"
			 Range("C1")="Fecha"
			 Range("D1")="País"
		     Range("B1:D1").Interior.Color=vbBlack
			 Range("B1:D1").Font.Bold=True
			 Range("B1:D1").Font.Color=vbwhite
			 Range("B1:D1").HorizontalAlignment=xlCenter
			 Range(Range("A2"), Range("A2").End(xlDown)).Select 'De "A2" hacía la Última celda con datos en "A2" que encuentre una vací­a
			 For Each Celda in Selection 'Ya seleccionamos arriba
				 Celda.Offset(0,1) = "'" & Left(Celda,4)   'Parte izquierda
				 Celda.Offset(0,2) = "'" & Right(Celda,10) 'Parte derecha
			 Next
		
Mid(Celda,2,5) 'Extraer parte de una cadena
Len(Celda) 'Longitud de la cadena
Proteger hojas de EXCEL
			Dim Hoja as Worksheet
			Application.ScreenUpdating=false
			For Each Hoja in Worksheets
				Hoja.Select 'Para situarme en la hoja
				Hoja.Unprotect "MiPWD"
				Hoja.Protect "MiPWD"
			Next
			Worksheets(1).Select 'Se situa en la hoja inicial
			Worksheets("Hoja1").Select 'Puedo hacerlo por nombre
			'Activar y desactivar pantalla
			Application.ScreenUpdating=true
		
Fila=ActiveSheet.Cells(ActiveSheet.Rows.Count,"A").End(xlUp).row+1
ActiveSheet.Rows.Count:Número final de filas en lugar de poner una constante
Do Until (false) Loop
Do Loop Until (false)
Do While (true) Loop
Do Loop While (true)
CDate(expresión) para convertir a fecha
Exit For - Salimos del for
Y(B1>10,A2=20), usar O
Target.Address="$F$35" en el evento Worksheet_Change viene Target
Cuando cambio valores en eventos, los desactivo para no provocar acciones en cascada Application.EnableEvents=false[true]
Range(Target.Offset(0,1),Target.Offset(0,3)).ClearContents - borra el contenido en ese rango
Worksheets("Hoja1").Cells(fila,"A")=Target
ucase("cadena") - Convierte a mayúsculas
Usar funciones de EXCEL desde VB
Currency - tipo de dato de moneda
            'Hay que ver el tema de atributos que se ponen en las funciones viendo la ayuda de EXCEL y son en inglés
            Cells(2, "C") = Application.WorksheetFunction.Sum(Range("A:A"))
            Cells(3, "C") = Application.WorksheetFunction.Average(Range("A:A"))
            Cells(4, "C") = Application.WorksheetFunction.Max(Range("A:A"))
            Cells(5, "C") = Application.WorksheetFunction.Min(Range("A:A"))
            'Podemos seguir poniendo rango y criterio
            Cells(6, "D") = Application.WorksheetFunction.CountIfs(Range("A:A"), Cells(6, "C"))             
            Cells(7, "D") = Application.WorksheetFunction.Match(Cells(7, "C"), Range("A:A"), 0) 'Coincidir                        
            Cells(8, "D") = Application.WorksheetFunction.VLookup(Cells(7, "C"), Range("E:F"), 2, False) 'BuscarV - Valor que busco, columnas donde busco, columna que tiene el valor que regreso, falso coincidencia exacta, true conque contenga
            'vbCrLf - Salto de lí­nea en una cadenax
            'Format(monto,"#,##0.00"), no es necesario porque le puedo dar el formato en EXCEL
            '=CONTAR.SI.CONJUNTO(A:A,A1) Buscar duplicado en la misma columna
		
Procedimientos
IsNumeric()
Sub miproc(r1 as Range, r2 as Range, op as Integer) 
            exit sub 
            End Sub
miproc r1:=Range("A1"), op:=2, r2:=Range("B2") 'Aquí mandamos los argumentos en desorden
Recordar que los argumentos se pasan por referencia cuando son de tipo objeto. Definir ByVal para que se pase por valor
ByRef por referencia pero esí por defecto
Optional - Para definir un argumento como opcional. Los argumentos opcionales van al final de las declaraciones
           If Celda Is Nothing Then 'Si es nulo el opcional por ejemplo
              set Celda=Range("A1")
           End if

           numeroFile=Celfa.Row
            Fecha=Fecha+1 'Incrementa en un día la fecha
            Cells(NumeroFila, Celda. Column)=Fecha
        
Si no se indica nada, los procedimientos que se crean son públicos
En la ventana de macros, no se muestran los procedimiento privados ni tampoco los que tienen argumentos (Optional noSeUsa as String)
Cuando se tienen procedimientos con el mismo nombre, la prioridad la tendría la de la hora, después el módulo
Funciones
            
Private Sub btnContar_Click()

    Application.ScreenUpdating = False
    'Si no tiene valores, recorrer toda la columa se tarda
    Range("F3") = CONTARSICOLOR(Range(Range("A2"), Range("A2").End(xlDown)), Range("E3"))
    Range("F4") = CONTARSICOLOR(Range("A1:A100"), Range("E4"))
    Application.ScreenUpdating = True

End Sub

Option Explicit
Function CONTARSICOLOR(celdas As Range, CeldaColor As Range) As Long
On Error GoTo funError

    'La función se ve desde EXCEL
    Dim Celda As Range
    Dim numCeldas As Long

    numCeldas = 0

    For Each Celda In celdas
        If Celda.Interior.Color = CeldaColor.Interior.Color Then
            numCeldas = numCeldas + 1
        End If
    Next

    CONTARSICOLOR = numCeldas
    Exit Function
funError:
End Function
        
Archivo Guardar como ".xlsm"
Complementos COM
Colecciones Sheets, Worksheets y Charts
Application.ThisWorkbook.Worksheets("Marzo").Select
Application se refiere a EXCEL
ThisWorkbook - Libro abierto
Application.ThisWorkbook - Esta parte no hace falta a menos que quiera manejar varios libros abiertos
Sheets("Marzo").Select --También se puede e incluye lo que tiene gráficos
Charts("Ventas Enero").Select
Worksheets("Marzo").Select 'Solo accesa hojas con datos, no gráficos
Worksheets(1).Select 'Puedo acceder a las hojas por número
Sheets(Sheets.Count).Select 'Puedo acceder a la última hoja del documento
Worksheets(Worksheets.Count).Select 'Puedo acceder a la última hoja con datos
ActiveSheet.Name="Indice" 'Cambia el nombre de l hoja
Worksheets("Enero").Name="Enero 2021"
Cuando se añade una hoja es la activa, ahí le puedo cambiar el nombre con Activesheet
Método .Add -Agregar hojas Sheet.Add type:=[xlWorksheet/xlChart]
Worksheet.Add count=3 ' Crea tres hojas
            Worksheet.Add after:=Worksheets("Datos") 'Crea una hoja de trabajo después de la hoja Datos
            Activesheet.name="Despues Datos" 'Le pone este nombre a la hoja nueva
            Worksheet.Add after:=Sheets(Sheets.Count) 'Se crea después de la última hoja
        
Método .Delete -Eliminar hojas
Application.DisplayAlerts=False 'Quita los mensajes de confirmaciòn
             Sheets(Sheets.Count).Delete     'Elimina la última hoja
             Application.DisplayAlerts=False
        
For each HojaTrabajo in Worksheets
If Left(HojaTrabajo.Name,6)="Grafico" then
Sub MoverHoja()
On Error GoTo subError
    Worksheets("HojaAMover").Move After:=Sheets(Sheets.Count) 'La mueve a la última hoja
    Worksheets("HojaAMover").Move  'Sin argumentos mueve la hoja a un documento nuevo
    Worksheets("HojaAMover").Copy  'Sin argumentos genera un documento nuevo con una copia de mi hoja
    'Genera una copia al inicio y le pone el nombre de í­ndice
    Worksheets("HojaAMover").Copy before:=Sheets(1) 'Si no indico este nombre le pone la copia clásica numerada
    ActiveSheet.Name = "Indice"
    
    'En formato-visibilidad, la puedo ocultar o mostrar, si no es por código
    'Se debe dejar al menos una hoja visible
    Worksheets("Hoja1").Visible = xlSheetHidden 'Ocultar la hoja
    Worksheets("Hoja1").Visible = xlSheetVisible 'Mostrar la hoja la hoja
    Worksheets("Hoja1").Visible = xlSheetVeryHidden 'Solo se puede mostrar con codigo, no desde el menu de EXCEL
    
End Sub

		
		
		Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Celda As Range
    
    'Este método se elige seleccionando la hoja y arriba en el litado de objetos y eventos lo busco
    
    'Con esto valido que solo funcione cuando cambio una celda
    If Target.Count = 1 Then
    End If
    
    'Como trae todo el rango, tengo que programar para todas las celdas
    For Each Celda In Target
        If Celda.Column = 1 And Celda.Row = 2 Then
            Celda.Offset(0, 1) = Format(Celda, "dddd")
            Select Case Weekday(Celda)
                Case 2: Celda.Interior.Color = 11854022
                Case 3 To 4: Celda.Interior.Color = 15189684
                Case 5 To 6: Celda.Interior.Color = 4127996
                Case Else: Celda.Interior.Color = 8696052
            End Select
        End If
    Next

End Sub
Curso Pivot tables