🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →

Excel AI Blog: VBA Tutorials, Formula Tips & Automation Guides

Expert guides on Excel formulas, VBA automation, data processing, and AI-powered productivity. Learn to master Excel with AI.

VBA ThisWorkbook en Excel — por qué no es lo mismo que ActiveWorkbook

VBA ThisWorkbook en Excel — por qué no es lo mismo que ActiveWorkbook

ThisWorkbook siempre significa el único libro que contiene tu código, y no cambia nunca aunque el usuario haga clic en otra ventana, mientras que ActiveWorkbook es el que está al frente en este momento. Esta guía explica la distinción entre lo fijo y lo voluble que decide si una macro edita el archivo correcto, por qué un Range sin calificar es la primera causa de que una macro corrompa el libro equivocado, cómo referenciar otro libro abierto por su nombre y por qué ThisWorkbook debería ser tu ancla por defecto.

Henry
VBA ActiveWorkbook y ActiveSheet en Excel — el objeto que toca el archivo equivocado

VBA ActiveWorkbook y ActiveSheet en Excel — el objeto que toca el archivo equivocado

ActiveWorkbook y ActiveSheet apuntan a lo que el usuario haya clicado por última vez, lo que los hace cómodos y a la vez la mayor causa de que una macro toque el archivo equivocado. Esta guía explica por qué el objeto activo es un blanco móvil, el antipatrón de Select y Activate que dejan las macros grabadas, cuándo actuar sobre el objeto activo es de verdad correcto, cómo leer el objeto activo una sola vez en una variable en lugar de recurrir a él una y otra vez, y por qué las referencias directas le ganan a seleccionar cada vez.

Henry
VBA Worksheets en Excel — referencia una hoja para que renombrar una pestaña no pueda romperla

VBA Worksheets en Excel — referencia una hoja para que renombrar una pestaña no pueda romperla

La colección Worksheets es la forma de nombrar una hoja en código, y puedes direccionarla de tres maneras: por cadena de nombre, por número de índice o por CodeName. Esta guía explica por qué el nombre se rompe en cuanto un usuario renombra una pestaña, por qué el índice se rompe cuando alguien reordena las pestañas, por qué el CodeName no se rompe con ninguna de las dos, la diferencia real entre Worksheets y Sheets, y cómo asignar una vez una variable de hoja calificada para que el resto de tu macro no vuelva a tocar una referencia frágil.

Henry
VBA Comment en Excel — comentar código, la regla del apóstrofo y por qué nunca se ejecuta

VBA Comment en Excel — comentar código, la regla del apóstrofo y por qué nunca se ejecuta

Un comentario de VBA es la única línea que el compilador tiene garantizado ignorar, lo que lo convierte en tu maniobra de depuración más segura y en tu hábito de documentación más peligroso. Esta guía cubre el apóstrofo frente a Rem, cómo comentar un bloque entero con la Edit toolbar oculta, por qué un comentario no puede vivir dentro de una continuación de línea, la diferencia entre un comentario de código y un objeto Comment de celda, y los únicos comentarios que de verdad merece la pena escribir.

Henry
VBA Option Explicit en Excel — convierte una errata silenciosa en un ruidoso error de compilación

VBA Option Explicit en Excel — convierte una errata silenciosa en un ruidoso error de compilación

Option Explicit es la línea de mayor rentabilidad de todo VBA, porque sin ella un nombre de variable mal escrito no es un error, sino una variable nueva y vacía que devuelve cero sin avisar. Esta guía muestra el bug de la errata silenciosa que elimina, por qué es por módulo y cómo el ajuste Require Variable Declaration lo añade por ti, qué hacer cuando Variable not defined aparece en código antiguo, y por qué obliga a declarar pero no a fijar tipos de datos.

Henry
VBA Line Continuation en Excel — el guion bajo, sus reglas y la trampa de las cadenas

VBA Line Continuation en Excel — el guion bajo, sus reglas y la trampa de las cadenas

La continuación de línea de VBA es un espacio seguido de un guion bajo que deja que una instrucción larga abarque varias líneas físicas, y el parser lo borra antes de compilar, así que solo cambia cómo se lee el código. Esta guía cubre el espacio obligatorio antes del guion bajo, por qué no puedes partir dentro de una cadena literal, por qué un comentario mata una continuación, cómo los dos puntos hacen lo contrario al unir instrucciones, y cuándo recurrir a ella.

Henry
VBA Debug.Print en Excel — por qué tu salida va a una ventana que no puedes ver

VBA Debug.Print en Excel — por qué tu salida va a una ventana que no puedes ver

Debug.Print escribe una línea en la Immediate Window y deja seguir la macro, así que es la forma no bloqueante de ver un bucle transmitir sus valores en vez de ahogarte en ventanas de MsgBox. Esta guía explica por qué Debug.Print parece no hacer nada hasta que abres la Immediate Window con Ctrl+G, por qué el búfer de unas 200 líneas descarta en silencio la salida más temprana, por qué imprimir una expresión puede disparar efectos secundarios reales, en qué se diferencia de MsgBox, y cuándo dejar de registrar en la ventana y escribir en un archivo.

Henry
VBA Immediate Window en Excel — la consola que ejecuta código cuando se lo pides

VBA Immediate Window en Excel — la consola que ejecuta código cuando se lo pides

La Immediate Window son dos herramientas en una: el lugar donde aterriza la salida de Debug.Print y una consola en vivo donde tecleas una línea de VBA y la ejecutas al instante. Esta guía muestra cómo el atajo ? evalúa cualquier expresión, por qué escribir ? delante de una función la ejecuta de verdad con sus efectos secundarios, por qué tus variables locales se leen vacías salvo que la macro esté pausada en break mode, cómo llamar a un Sub o un bucle de una línea a mano, y cuándo la consola ya ha hecho su trabajo y la lógica pertenece a un módulo.

Henry
VBA Breakpoint en Excel — congela una macro y recórrela línea a línea

VBA Breakpoint en Excel — congela una macro y recórrela línea a línea

Un breakpoint congela una macro en una línea antes de que se ejecute y te deja en break mode, donde puedes leer cada valor en vivo y luego recorrer el código línea a línea con F8. Esta guía cubre cómo poner breakpoints con F9, la diferencia entre Step Into y Step Over, por qué los breakpoints desaparecen al cerrar el libro, por qué una instrucción Stop nunca debe llegar a los usuarios, cómo Debug.Assert te da un breakpoint condicional que se ignora en tiempo de ejecución, y cuándo recorrer paso a paso le gana a salpicar Debug.Print por el código.

Henry
VBA IsNumeric en Excel — por qué dice que sí a cosas que no son números

VBA IsNumeric en Excel — por qué dice que sí a cosas que no son números

IsNumeric no pregunta si una cadena es un número: pregunta si VBA podría convertirla en uno, y VBA lo intenta con ganas. Esta guía muestra por qué IsNumeric devuelve True con la notación científica, un literal hexadecimal, un separador de miles, una cadena rellena de espacios e incluso un valor con signo final, por qué eso cuela datos malos por tu validación, por qué depende de la configuración regional lo bastante como para corromper datos entre equipos, y cuándo dejar de fiarte de él y fijar la forma con el operador Like en su lugar.

Henry
El operador Like de VBA en Excel — coincidencia con comodines y la trampa de la cadena entera

El operador Like de VBA en Excel — coincidencia con comodines y la trampa de la cadena entera

El operador Like de VBA responde una sola pregunta booleana: ¿encaja toda la cadena en esta forma con comodines? Esta guía cubre los cinco comodines (asterisco, interrogación, almohadilla y las formas [list] y [!list]), por qué Like comprueba la cadena entera y por eso necesitas asteriscos alrededor de una subcadena, por qué su distinción de mayúsculas es un interruptor Option Compare de todo el módulo sin anulación por llamada, cómo coincidir con un asterisco literal usando corchetes, y cuándo Like le gana tanto a InStr como a una expresión regular completa.

Henry
VBA Regex en Excel — el objeto RegExp y por qué tu coincidencia vuelve vacía

VBA Regex en Excel — el objeto RegExp y por qué tu coincidencia vuelve vacía

Regex en VBA no es una palabra clave: es el objeto VBScript RegExp que tú creas, y no hace nada útil hasta que fijas tres interruptores y eliges la salida correcta. Esta guía cubre el enlace tardío frente a añadir la referencia, por qué Global vale False por defecto y así solo obtienes la primera coincidencia, la diferencia entre Test, Replace y Execute, por qué extraer implica ir más allá de Match.Value hasta SubMatches, y el sabor de patrones de VBScript con sus retrorreferencias con signo de dólar.

Henry
VBA Filter en Excel — subconjunto de un array en una sola llamada, y por qué no es AutoFilter

VBA Filter en Excel — subconjunto de un array en una sola llamada, y por qué no es AutoFilter

La función Filter de VBA toma un array de cadenas unidimensional y devuelve un array nuevo y más pequeño que contiene solo los elementos que incluyen la subcadena que nombras — es la prima en arrays de InStr, y nunca toca una celda. Esta guía deshace la confusión constante con AutoFilter (un método de hoja que oculta filas) y luego cubre las tres trampas que hacen que Filter parezca roto: coincide con subcadenas y no con valores enteros, distingue mayúsculas por defecto hasta que pasas vbTextCompare, y devuelve un array de base cero cuyo UBound es menos uno cuando nada coincide.

Henry
VBA Join en Excel — de array a cadena, el inverso exacto de Split

VBA Join en Excel — de array a cadena, el inverso exacto de Split

La función Join de VBA pega un array unidimensional de vuelta en una sola cadena, colocando un delimitador entre cada elemento — es el inverso exacto de Split, y la cura en una línea para el bucle de concatenación que siempre deja un separador de más al final. Esta guía muestra por qué Join solo acepta un array de 1 dimensión (así que Range.Value falla hasta que lo aplanas), por qué el delimitador es un espacio por defecto en vez de nada, cómo cada elemento se convierte a texto, y la tubería Split-Filter-Join que reemplaza un bucle de quince líneas con una sola expresión.

Henry
VBA Transpose en Excel — remodela un array y aplana una columna a 1-D

VBA Transpose en Excel — remodela un array y aplana una columna a 1-D

Application.Transpose intercambia las filas y las columnas de un array, pero su verdadero trabajo cotidiano en VBA es más discreto: transponer un rango de una sola columna lo colapsa en el array unidimensional que Join y Filter necesitan ambos. Esta guía cubre el truco de aplanar, por qué es Application.Transpose y nunca un Transpose a secas, el techo silencioso de 65 536 elementos que te traiciona con datos grandes, y los errores que lanza con cadenas de más de 255 caracteres o arrays que contienen un valor de error — para que sepas exactamente dónde se detiene la remodelación y empieza un bucle de verdad.

Henry
VBA Pivot Table en Excel — crear, refrescar, y por qué muestra números viejos

VBA Pivot Table en Excel — crear, refrescar, y por qué muestra números viejos

Una tabla dinámica en Excel VBA no lee tus celdas; lee un PivotCache, una instantánea congelada del origen tomada cuando se construyó la tabla, y ese único hecho explica la queja número uno sobre tablas dinámicas: cambias los datos y la tabla sigue mostrando los totales de ayer hasta que llamas a RefreshTable. Esta guía cubre la construcción moderna en dos pasos con PivotCaches.Create y CreatePivotTable, la distribución de campos con los cuatro valores de Orientation, añadir campos de datos con la función de resumen correcta, la trampa del refresco, y la trampa del rango de origen que resuelves apuntando el caché a una Table para que la tabla crezca sola.

Henry
VBA Table (ListObject) en Excel — añade filas y deja de perseguir la última fila

VBA Table (ListObject) en Excel — añade filas y deja de perseguir la última fila

Una tabla de Excel en VBA es un ListObject, un rango que conoce su propio encabezado, su cuerpo de datos y sus bordes, y se autoexpande cuando escribes en él, que es justo por lo que acaba con la tarea de macro más común: buscar la última fila con End(xlUp). Esta guía cubre convertir un rango con ListObjects.Add, direccionar las partes por nombre (HeaderRowRange, DataBodyRange, ListColumns), añadir filas de la forma fiable con ListRows.Add, la trampa de que DataBodyRange es Nothing en una tabla vacía, y escribir fórmulas con referencias estructuradas que sobreviven a las inserciones.

Henry
VBA Chart en Excel — crea un gráfico en código y por qué dibuja los datos equivocados

VBA Chart en Excel — crea un gráfico en código y por qué dibuja los datos equivocados

Un gráfico en Excel VBA no guarda datos; guarda una referencia a un Range, porque cada serie almacena sus valores como una fórmula del tipo =Sheet1!$B$2:$B$13, y ese único hecho explica por qué un gráfico dibuja en silencio las celdas equivocadas en cuanto su origen se mueve. Esta guía cubre la división en dos contenedores con la que tropieza toda macro de gráficos (los ChartObjects incrustados frente a las hojas de gráfico), crear un gráfico y enlazar los datos de una sola vez con SetSourceData, añadir series a mano con SeriesCollection.NewSeries, la trampa del gráfico duplicado al reejecutar, y enlazar el origen a una Table para que el gráfico siga a los datos en lugar de a una dirección congelada.

Henry
VBA Named Range en Excel — Names.Add, RefersTo, y por qué tu referencia se desvía

VBA Named Range en Excel — Names.Add, RefersTo, y por qué tu referencia se desvía

Un named range en Excel VBA no es un apodo para una celda, es una fórmula almacenada que Excel resuelve cada vez que usas el nombre, y ese único hecho explica todas las sorpresas con nombres que te vas a encontrar. Es la razón de que RefersTo necesite un signo igual inicial, de que los signos de dólar decidan si el nombre es absoluto o se desvía con la celda activa, de que un nombre tenga un ámbito que es o bien todo el libro o bien una sola hoja, y de que borrar las celdas bajo un nombre lo deje apuntando a un error #REF! permanente. Esta guía cubre Names.Add y el atajo de una línea Range.Name, el ámbito de libro frente al de hoja, cómo leer el valor al que apunta un nombre, y cómo limpiar los nombres rotos que inflan un libro.

Henry
VBA AutoFill en Excel — rellena una serie o una fórmula sin la trampa de Destination

VBA AutoFill en Excel — rellena una serie o una fórmula sin la trampa de Destination

AutoFill en Excel VBA es un motor de patrones, no un comando de copia, y tener clara esa distinción es lo que evita que te sorprenda. Range.AutoFill toma una pequeña semilla y la extiende por un destino más grande, continuando una serie como 1, 2, 3 o los meses del año en lugar de solo repetir la semilla, que es a la vez todo el objetivo y toda la trampa. Esta guía cubre la regla del destino que provoca el error de tiempo de ejecución 1004 con el que todos tropiezan, el Type que decide si obtienes una serie o una copia, cómo rellenar una fórmula hacia abajo por una columna para que sus referencias se ajusten por fila, y por qué los más sencillos FillDown y FillRight suelen ser la mejor herramienta cuando solo quieres una copia simple.

Henry
VBA Clear en Excel — ClearContents vs Clear vs Delete, y la trampa de la cadena vacía

VBA Clear en Excel — ClearContents vs Clear vs Delete, y la trampa de la cadena vacía

Borrar una celda en Excel VBA es un menú, no un único comando, y elegir la opción equivocada es como las macros destrozan en silencio una plantilla o desplazan las celdas de las que dependen otras fórmulas. Una celda es una pila de capas: el valor y la fórmula, el formato de número, la fuente y el relleno, los bordes, la validación y los comentarios, y cada método de borrado limpia un subconjunto elegido mientras el resto sobrevive. Esta guía cubre ClearContents frente a Clear frente a ClearFormats, por qué poner una celda a una cadena vacía no es lo mismo que dejarla en blanco, la diferencia crucial entre Clear y Delete que cambia cada dirección por debajo de ella, y cómo borrar todo un rango usado en una sola llamada rápida.

Henry
VBA Cell Value en Excel — leer y escribir .Value y el truco de rango a matriz

VBA Cell Value en Excel — leer y escribir .Value y el truco de rango a matriz

Leer y escribir una celda en Excel VBA pasa por la propiedad .Value de Range, y lo más importante es lo que ocurre con más de una celda: un rango de varias celdas te devuelve una matriz Variant bidimensional de base 1, y asignar una matriz de vuelta escribe todo el bloque en una sola llamada. Esa es la diferencia entre una macro que termina al instante y otra que se arrastra, porque cada acceso a Cells(i, j).Value cruza la frontera de VBA a Excel. Esta guía cubre .Value en una celda frente a un rango, el viaje de ida y vuelta con matrices que acelera las lecturas y escrituras masivas, por qué la matriz es 2D incluso para una sola columna, y el atajo de la propiedad por defecto en el que no deberías apoyarte.

Henry
VBA Formula en Excel — escribe fórmulas en código con .Formula y .FormulaR1C1

VBA Formula en Excel — escribe fórmulas en código con .Formula y .FormulaR1C1

Escribir una fórmula desde Excel VBA significa asignar una cadena a la propiedad .Formula de Range, y la regla que sorprende a todos es que .Formula habla un único dialecto fijo: nombres de función en inglés de EE. UU. y comas como separador, sin importar el idioma ni la configuración regional del usuario. Asignar =SUM(A1:A10) funciona en cualquier máquina y Excel localiza la visualización; asignar el alemán =SUMME(A1;A10) lanza el error de tiempo de ejecución 1004. Esta guía cubre .Formula frente a la versión localizada .FormulaLocal, .FormulaR1C1 para estampar fórmulas relativas por todo un rango, por qué el signo igual inicial es obligatorio, cómo duplicar las comillas dentro de una fórmula, y cómo leer una fórmula de vuelta con .HasFormula.

Henry
VBA Value vs Value2 vs Text en Excel — cuál lee la celda correctamente

VBA Value vs Value2 vs Text en Excel — cuál lee la celda correctamente

Una celda en Excel VBA tiene más de una cara, y leer la equivocada es un error silencioso: .Value2 te da el número guardado en bruto, .Value te da ese número convertido al tipo de VBA que corresponde (una celda con formato de fecha devuelve un Date, una de moneda devuelve un Currency), y .Text te da la cadena con formato que se ve en pantalla, de solo lectura. Leer .Text para hacer cuentas te devuelve una cadena como $1,235 o incluso ### cuando la columna es estrecha; leer .Value en una celda de moneda puede redondear un número grande; .Value2 es el valor por defecto rápido y sin pérdidas. Esta guía explica las tres caras de lectura, cuándo la conversión a Currency y Date pierde precisión, por qué .Text es de solo visualización y no se le puede asignar, y qué cara elegir en cada caso.

Henry
VBA Shell en Excel — ejecuta un programa externo, y por qué tu código no espera

VBA Shell en Excel — ejecuta un programa externo, y por qué tu código no espera

La función Shell de VBA lanza un programa externo y se marcha al instante — es fire-and-forget, dispara y se olvida. Shell devuelve un ID de tarea, no el código de salida del programa, ni su salida de texto, ni una señal de éxito, y la siguiente línea de tu macro se ejecuta mientras el programa todavía está arrancando. Ese es el bug detrás de casi todo el código con Shell: lanzas un conversor con Shell y luego intentas abrir un archivo que aún no ha escrito. Esta guía explica por qué Shell no espera, cómo entrecomillar rutas que contienen espacios, por qué Shell lanza ejecutables pero no puede abrir por sí solo un PDF ni una URL, y cuándo abandonar Shell por WScript.Shell Run o Exec para poder de verdad esperar al programa y leer lo que produjo.

Henry
VBA Environ en Excel — lee rutas de Windows sin codificar a fuego una carpeta de usuario

VBA Environ en Excel — lee rutas de Windows sin codificar a fuego una carpeta de usuario

La función Environ de VBA lee las variables de entorno que Windows entrega a cada programa — USERPROFILE, TEMP, USERNAME, APPDATA — para que construyas rutas específicas del usuario sin codificar a fuego C:\Users\John, que se rompe en cualquier otra máquina. Su trampa característica es silenciosa: una variable que falta o está mal escrita devuelve una cadena vacía, no un error, así que Environ de TMEP entrega calladamente una cadena vacía y tu ruta acaba en la raíz del disco. Esta guía cubre por qué Environ es la herramienta de rutas portables, por qué debes tratar cada resultado como posiblemente vacío, las dos formas de llamada (por nombre frente a por índice numérico), la instantánea que Environ toma cuando Excel arranca, y lo que Environ no puede hacer — fijar variables o leer las que cambiaron después del arranque.

Henry
VBA CreateObject en Excel — enlace tardío, GetObject y por qué Outlook se queda abierto

VBA CreateObject en Excel — enlace tardío, GetObject y por qué Outlook se queda abierto

CreateObject es la llave maestra de VBA a todo lo que está fuera de Excel — inicia cualquier aplicación COM por su cadena ProgID: Scripting.FileSystemObject, Scripting.Dictionary, Outlook.Application, WScript.Shell, Word.Application. Esa búsqueda por cadena es enlace tardío: el compilador no sabe nada del objeto, así que un ProgID equivocado o una app que no está instalada falla solo en tiempo de ejecución con el error 429. Esta guía explica la decisión de verdad entre enlace tardío y enlace temprano (portabilidad frente a IntelliSense), por qué CreateObject siempre inicia una instancia nueva mientras que GetObject se engancha a una que ya se ejecuta, y por qué un proceso headless de Outlook o Excel se queda colgado en el Administrador de tareas cuando olvidas hacer Quit de la app y poner el objeto a Nothing.

Henry
VBA Now, Date y Time en Excel — leer el reloj, y por qué Date también es una instrucción

VBA Now, Date y Time en Excel — leer el reloj, y por qué Date también es una instrucción

Una fecha de VBA es un Double — la parte entera cuenta los días desde el 30/12/1899 y la fracción es la hora del día, así que Now, Date y Time son tres lecturas del mismo reloj. Now devuelve fecha y hora, Date devuelve hoy a medianoche, Time devuelve solo la hora. El bug que rompe la mayoría del código es comparar un valor guardado de Now con Date y no coincidir nunca, porque Now arrastra una fracción de hora que Date no tiene. Peor aún, Date y Time también son instrucciones que reajustan el reloj del sistema. Esta guía muestra qué es de verdad ese Double, por qué falla la igualdad, cómo quitar la hora con Int o DateValue, y por qué Now es hora local y no UTC.

Henry
VBA DateAdd y DateDiff en Excel — aritmética de fechas sin el bug de la longitud del mes

VBA DateAdd y DateDiff en Excel — aritmética de fechas sin el bug de la longitud del mes

Como una fecha de VBA es un Double, sumar 1 avanza un día y la aritmética simple es correcta — para días. Se rompe en cuanto tratas un mes como 30 días o un año como 365, porque los meses y los años bisiestos no tienen longitud fija. DateAdd conoce el calendario, así que sumar un mes al 31 de enero devuelve el 28 de febrero en lugar de un imposible día 31. DateDiff cuenta las fronteras cruzadas, no el tiempo transcurrido, así que del 31 de diciembre al 1 de enero hay un año aunque solo pase un día. DateSerial construye una fecha a partir del año, el mes y el día sin ambigüedad regional y normaliza el desbordamiento, lo que da el idiom limpio del último día del mes. Esta guía muestra cuándo basta con el más simple, los códigos de intervalo que hacen tropezar, y por qué DateDiff es un conteo de fronteras.

Henry
VBA Weekday y DatePart en Excel — extraer partes de una fecha, y por qué el lunes no es 1

VBA Weekday y DatePart en Excel — extraer partes de una fecha, y por qué el lunes no es 1

Year, Month, Day, Hour, Minute y Second sacan cada uno un entero de una fecha — ese Double en el que ya puedes ver dentro — y son tan simples como parecen. Weekday es la que muerde — devuelve de 1 a 7, pero la numeración depende de un segundo argumento que por defecto es domingo igual a 1, así que en una llamada normal el lunes es 2, no 1, y toda prueba de fin de semana construida sobre un número fijo está silenciosamente mal. DatePart es el extractor general con los mismos códigos de intervalo que DateAdd, y alcanza partes que no tienen función propia como el número de semana y el trimestre, aunque su regla de semana no es ISO 8601 por defecto. WeekdayName y MonthName devuelven nombres en el idioma de la máquina, buenos para mostrar pero no para volver a leer. Esta guía muestra cómo extraer cada parte y por qué el lunes no es 1.

Henry
VBA FreeFile y la instrucción Open en Excel — obtén un número de archivo, abre un archivo de texto (no un libro)

VBA FreeFile y la instrucción Open en Excel — obtén un número de archivo, abre un archivo de texto (no un libro)

En el VBA built-in un archivo de texto se alcanza a través de un canal numerado — escribes la instrucción Open con el modo For Output y un número de canal que debes tomar de FreeFile en lugar de elegirlo a mano. Fija a fuego el número uno y en cuanto haya dos archivos abiertos te topas con el error 55 File already open; abre For Output sobre un archivo que ya tiene datos y queda truncado a vacío; olvida Close y el archivo permanece bloqueado hasta que Excel se cierra. Esta guía muestra por qué FreeFile te entrega un número de canal para capturar en una variable, la diferencia entre For Output, For Append y For Input, por qué la instrucción Open no es Workbooks.Open, y el patrón de limpieza que siempre cierra el canal.

Henry
VBA Print # vs Write # en Excel — escribe un archivo de texto o CSV (y por qué el tuyo tiene comillas alrededor de todo)

VBA Print # vs Write # en Excel — escribe un archivo de texto o CSV (y por qué el tuyo tiene comillas alrededor de todo)

Las instrucciones Print y Write dan respuestas opuestas a qué aspecto deben tener los bytes en disco. Print escribe el texto exactamente como aparece — sin comillas, sin comas, tú construyes la disposición — así que es lo correcto para un informe o un CSV hecho a mano. Write escribe formato máquina — cada cadena envuelta en comillas, comas entre valores, fechas entre almohadillas — diseñado para que lo relea Input, no un humano ni Excel. Esta guía muestra por qué Write es la razón de que tu CSV esté lleno de comillas, por qué una coma en una lista de Print inserta zonas de impresión en lugar de comas de CSV, cómo For Output trunca mientras For Append añade, la trampa regional de la coma decimal, y por qué la escritura built-in es ANSI en vez de UTF-8.

Henry
VBA leer un archivo de texto en Excel — Line Input vs Input #, y el bucle EOF que no pierde filas

VBA leer un archivo de texto en Excel — Line Input vs Input #, y el bucle EOF que no pierde filas

Leer un archivo de texto en VBA tiene tres herramientas y elegir la equivocada desordena tus datos. Line Input lee una línea cruda en una cadena y la divides tú mismo, lo cual es predecible. Input parsea los campos delimitados directamente en variables — rápido para un archivo que produjo Write, pero se atraganta con comas sin comillas y comillas sueltas. La función Input con LOF engulle el archivo entero en una sola cadena. Esta guía muestra el bucle EOF que lee cada fila exactamente una vez, por qué Input es el gemelo de Write y Line Input el gemelo de Print, cómo evitar el error de uno en uno que lanza el error 62, y cuándo es mejor abrir un CSV como libro que parsearlo a mano.

Henry
VBA MkDir en Excel — crea una carpeta, y por qué no puede crear una ruta anidada

VBA MkDir en Excel — crea una carpeta, y por qué no puede crear una ruta anidada

La instrucción MkDir de VBA crea exactamente un nivel de carpeta, no una ruta entera — MkDir sobre una ruta cuyo padre no existe lanza el error 76, y MkDir sobre una carpeta que ya existe lanza el error 75 en lugar de no hacer nada. Así que la tarea cotidiana de crear esta carpeta es en realidad crear cada nivel que falta, y solo donde no está. Esta guía muestra por qué MkDir crea solo un nivel, por qué FileSystemObject.CreateFolder tampoco recursa, el bucle protegido por comprobación de existencia que construye una ruta completa de forma segura, y por qué un nombre de carpeta desnudo aterriza bajo CurDir en lugar de la carpeta de tu libro.

Henry
VBA RmDir en Excel — borra una carpeta, pero solo si está vacía

VBA RmDir en Excel — borra una carpeta, pero solo si está vacía

La instrucción RmDir de VBA borra una carpeta solo cuando está completamente vacía — apúntala a una carpeta que todavía contiene archivos o subcarpetas y lanza el error 75, la imagen especular exacta de Kill, que borra cualquier archivo sin piedad. Así que borrar esta carpeta es en realidad vaciarla primero, y luego eliminarla. Esta guía muestra por qué RmDir rechaza una carpeta no vacía, por qué borra carpetas pero nunca archivos, cómo vaciar una carpeta con Kill antes de RmDir, y cuándo FileSystemObject.DeleteFolder arrasa un árbol entero en una sola llamada — sin Papelera de reciclaje y sin deshacer.

Henry
VBA CurDir & ChDir in Excel — por qué una ruta relativa aterriza en la carpeta equivocada

VBA CurDir & ChDir in Excel — por qué una ruta relativa aterriza en la carpeta equivocada

En VBA una ruta relativa no tiene significado hasta que se resuelve contra CurDir, el directorio de trabajo actual — y en Excel ese directorio es un ajuste itinerante que no controlas, no la carpeta donde está guardado tu libro. Así que MkDir Reports u Open data.csv pueden aterrizar en un sitio distinto en cada ejecución, porque un diálogo de Abrir archivo mueve CurDir en silencio. Esta guía muestra por qué CurDir no es ThisWorkbook.Path, por qué ChDir no puede cambiar la unidad sin ChDrive, y el único hábito que elimina toda la clase de bugs de carpeta equivocada — ancla cada ruta a ThisWorkbook.Path.

Henry
VBA Copiar Archivo en Excel — FileCopy, FileSystemObject.CopyFile, y por qué no puede copiar un libro abierto

VBA Copiar Archivo en Excel — FileCopy, FileSystemObject.CopyFile, y por qué no puede copiar un libro abierto

Copiar un archivo en VBA es una sola línea, pero cuál línea depende de si el archivo está abierto. FileCopy es el built-in sin ninguna referencia que añadir, y sobrescribe el destino en silencio, pero no puede copiar un archivo que está abierto y lanza el error 70 Permission denied justo en el libro que más quieres respaldar. Esta guía traza la línea entre tres herramientas de copia para tres situaciones — FileCopy para archivos cerrados en disco, FileSystemObject.CopyFile para comodines y un flag de sobrescritura explícito, y SaveCopyAs para el libro que está abierto ahora mismo — y muestra por qué el destino debe ser una ruta completa que incluya el nombre del archivo, por qué la carpeta de destino debe existir ya, y cómo copiar-y-luego-borrar se convierte en mover.

Henry
VBA Borrar Archivo en Excel — Kill, FileSystemObject.DeleteFile, y por qué no hay deshacer

VBA Borrar Archivo en Excel — Kill, FileSystemObject.DeleteFile, y por qué no hay deshacer

La instrucción Kill de VBA borra un archivo de forma permanente — sin Papelera de reciclaje, sin confirmación, sin deshacer. Ese único hecho es a la vez todo el sentido y todo el peligro, y cada otra regla sobre borrar archivos es una forma de proteger esa línea irreversible. Esta guía muestra por qué Kill da error en lugar de no hacer nada cuando un archivo falta o está abierto, cómo un comodín como Kill C dos puntos barra invertida Temp barra invertida asterisco punto tmp borra cada coincidencia de una vez sin ningún aviso, por qué Kill no puede eliminar una carpeta y cómo RmDir y DeleteFolder reparten ese trabajo, y cuándo FileSystemObject.DeleteFile con su flag Force es la opción más segura para archivos de solo lectura.

Henry
VBA Renombrar Archivo en Excel — la instrucción Name que también mueve archivos (y se niega a sobrescribir)

VBA Renombrar Archivo en Excel — la instrucción Name que también mueve archivos (y se niega a sobrescribir)

La instrucción Name de VBA renombra un archivo, pero en realidad es una instrucción de renombrar-y-mover — apunta la nueva ruta a una carpeta distinta y VBA mueve el archivo allí en lugar de renombrarlo en su sitio. Y a diferencia de casi todo lo demás en el disco, Name se niega a sobrescribir, lanzando el error 58 cuando el destino ya existe, justo lo contrario de FileCopy que sobrescribe en silencio. Esta guía muestra por qué Name mueve además de renombrar, por qué no cruza unidades y cómo FileCopy más Kill o FileSystemObject.MoveFile maneja ese caso, y por qué debes proteger el destino para que un error sobre un archivo existente no detenga una macro desatendida.

Henry
VBA Dir en Excel — recorre los archivos de una carpeta, y el iterador con estado que te muerde

VBA Dir en Excel — recorre los archivos de una carpeta, y el iterador con estado que te muerde

Dir parece una función pero se comporta como un iterador con memoria oculta — Dir(path) devuelve el nombre del primer archivo que coincide, luego Dir() sin argumentos devuelve el siguiente, y una cadena vacía cuando la carpeta se agota. La única regla que te salva es no volver a llamar a Dir nunca en mitad de un bucle Dir, porque un segundo Dir inicia una búsqueda nueva y reinicia la primera — la causa número uno de archivos saltados y bucles infinitos. Aprende a recorrer cada .xlsx de una carpeta, por qué Dir devuelve solo el nombre y no la ruta, por qué no puede entrar en subcarpetas, y cuándo reunir los nombres en un array antes de tocar los archivos.

Henry
VBA FileSystemObject en Excel — CreateObject frente a referencia, subcarpetas y por qué no abre libros

VBA FileSystemObject en Excel — CreateObject frente a referencia, subcarpetas y por qué no abre libros

El FileSystemObject convierte el disco en un modelo de objetos — carpetas y archivos que recorres con For Each y de los que lees propiedades, en lugar del único cursor oculto de Dir. La decisión que te salva es CreateObject(Scripting.FileSystemObject) frente a Dim fso As New FileSystemObject, porque el enlace tardío no necesita ninguna referencia y corre en cualquier máquina, mientras que la versión de enlace temprano no compila en cuanto aterriza en un PC sin la casilla del Microsoft Scripting Runtime marcada. Aprende cuándo FSO le gana a Dir, cómo entrar de forma recursiva en las subcarpetas que su colección SubFolders vuelve triviales, cómo leer Size y DateLastModified, y por qué FSO abre archivos de texto pero nunca abre un libro de Excel.

Henry
VBA Comprobar si un Archivo Existe — Dir frente a FileSystemObject.FileExists (y la trampa dentro de un bucle Dir)

VBA Comprobar si un Archivo Existe — Dir frente a FileSystemObject.FileExists (y la trampa dentro de un bucle Dir)

Hay dos formas correctas de comprobar si un archivo existe en VBA y un reflejo equivocado. El reflejo es simplemente abrirlo y atrapar el error, que es lento y esconde fallos de verdad. Las respuestas correctas son Dir(path) (una línea con el built-in) y fso.FileExists(path) (sin estado y más claro) — y la regla que te salva es no usar nunca la comprobación con Dir dentro de un bucle Dir, porque Dir comparte un único cursor oculto y la prueba de existencia reinicia tu enumeración de archivos en silencio. Aprende por qué FileExists es el valor por defecto más seguro, cómo Dir maneja mal una ruta de carpeta o una barra invertida final, y por qué comprobar y luego abrir todavía necesita una protección de errores.

Henry
VBA Abrir Libro en Excel — Workbooks.Open, captura el valor de retorno y por qué no es Workbook_Open

VBA Abrir Libro en Excel — Workbooks.Open, captura el valor de retorno y por qué no es Workbook_Open

Workbooks.Open es una función que devuelve el libro que acaba de abrir, así que la única regla que te salva es Set wb = Workbooks.Open(path) — captura ese valor de retorno y háblale a wb, nunca a ActiveWorkbook, que cambia en cuanto algo roba el foco. Aprende la diferencia entre Workbooks.Open (un método que llamas) y Workbook_Open (un evento que se ejecuta solo), cómo proteger una ruta que no existe para recibir un mensaje en vez del error 1004 en tiempo de ejecución, cómo manejar un archivo que ya está abierto, y qué parámetros abren en silencio un cuadro de diálogo y cuelgan una macro desatendida.

Henry
VBA Guardar Libro en Excel — Save frente a SaveAs, la trampa de FileFormat y por qué desaparecen tus macros

VBA Guardar Libro en Excel — Save frente a SaveAs, la trampa de FileFormat y por qué desaparecen tus macros

Save sobrescribe el archivo que ya tienes, en el sitio y sin ningún cuadro de diálogo. SaveAs escribe un archivo nuevo o un tipo nuevo, y el número de FileFormat es la trampa — guarda un libro con macros como xlOpenXMLWorkbook (51, el formato xlsx) y Excel descarta en silencio hasta la última línea de tu VBA; necesitas xlOpenXMLWorkbookMacroEnabled (52) para el xlsm. Aprende cuándo usar Save, SaveAs y SaveCopyAs, por qué Save sobre un libro recién creado abre el cuadro Guardar como y cuelga una macro desatendida, cómo DisplayAlerts convierte el aviso de sobrescritura en una preaprobación, y por qué wb.Saved = True marca el libro como limpio sin escribir nada.

Henry
VBA Cerrar Libro en Excel — SaveChanges, el aviso que cuelga tu macro y cómo cerrar sin guardar

VBA Cerrar Libro en Excel — SaveChanges, el aviso que cuelga tu macro y cómo cerrar sin guardar

wb.Close sobre un libro con cambios sin guardar lanza el cuadro de diálogo modal que pregunta si quieres guardar los cambios, y en una macro desatendida ese cuadro espera para siempre. Lo respondes desde el código con el argumento SaveChanges — wb.Close SaveChanges:=False descarta, SaveChanges:=True guarda primero, y omitirlo hace que aparezca el aviso. Aprende por qué cerrar sin el argumento es la razón número uno de que una macro programada nunca termine, por qué la variable de objeto queda muerta en el instante en que cierras, en qué se diferencia Close de Application.Quit, y por qué cerrar el último libro puede dejar un EXCEL.EXE invisible en marcha.

Henry
VBA Wait en Excel — Application.Wait, por qué congela Excel y cuándo usar Sleep en su lugar

VBA Wait en Excel — Application.Wait, por qué congela Excel y cuándo usar Sleep en su lugar

Application.Wait es un despertador, no un cronómetro. Le das un momento del reloj al que despertar, no un número de segundos que descontar, y por eso Application.Wait 5 no hace casi nada y la línea correcta es Application.Wait Now + TimeValue("0:00:05"). Solo distingue segundos enteros y congela Excel por completo mientras espera, así que no puede repintar la pantalla, actualizar una barra de estado ni dejar que el usuario cancele. Aprende el modelo del despertador, el argumento de tiempo absoluto con el que todo el mundo tropieza, por qué las pausas por debajo del segundo necesitan Sleep, y por qué una pausa en la que Excel debe seguir vivo es un bucle DoEvents en su lugar.

Henry
VBA Sleep en Excel — la llamada a la API de Windows, la trampa PtrSafe de 64 bits y Wait frente a Sleep

VBA Sleep en Excel — la llamada a la API de Windows, la trampa PtrSafe de 64 bits y Wait frente a Sleep

Sleep no es una palabra clave de VBA. Es una función de kernel32 de Windows que tomas prestada con una instrucción Declare para pausar tu macro un número de milisegundos, y por eso te da la precisión por debajo del segundo que Application.Wait no alcanza. La trampa es la propia declaración. Las viejas líneas Declare Sub Sleep copiadas y pegadas lanzan un error de compilación en Excel de 64 bits hasta que añades el atributo PtrSafe dentro de una guarda de compilación condicional VBA7. Aprende el modelo de la API prestada, el arreglo exacto para 64 bits, por qué los milisegundos no son precisos, y por qué Sleep aún congela Excel, así que una pausa receptiva es un bucle DoEvents en su lugar.

Henry
VBA Timer en Excel — mide cuánto tarda tu macro (y por qué no es un programador de tareas)

VBA Timer en Excel — mide cuánto tarda tu macro (y por qué no es un programador de tareas)

La función Timer de VBA es un cronómetro, no una cuenta atrás. A pesar del nombre nunca hace que ocurra nada después de N segundos y nunca pausa tu código. Solo devuelve el número de segundos transcurridos desde medianoche, y lo lees dos veces para medir cuánto tardó un bloque de código. Eso lo convierte en la herramienta que demuestra que ScreenUpdating igual a False de verdad hizo tu macro más rápida, en vez de adivinar. Aprende el modelo del cronómetro, por qué quien busca un temporizador suele querer Application.OnTime en su lugar, el bug del reinicio a medianoche que produce tiempos transcurridos negativos, y su resolución de una centésima de segundo.

Henry
VBA DoEvents en Excel — evita que Excel se quede en «No responde» (y por qué deja que tu macro corra dos veces)

VBA DoEvents en Excel — evita que Excel se quede en «No responde» (y por qué deja que tu macro corra dos veces)

DoEvents pausa tu macro por un instante y deja que Excel procese los clics, las pulsaciones de teclas y los repintados que se amontonaron mientras corría tu código, que es lo que evita que la ventana se ponga gris en «No responde» y lo que hace posible un botón de cancelar que funcione. Pero la misma cesión que mantiene vivo a Excel también le devuelve el control al usuario a mitad de macro, así que puede pulsar el mismo botón otra vez y arrancar una segunda copia de tu macro dentro de la primera. Esa reentrada, no el rendimiento, es el verdadero peligro. Aprende dónde colocar DoEvents, cómo protegerte de la reentrada con un flag de ejecución, por qué debes moderar su frecuencia, y por qué no es multihilo.

Henry
VBA StatusBar en Excel — muestra el progreso de la macro sin un UserForm (y el mensaje que se queda pegado para siempre)

VBA StatusBar en Excel — muestra el progreso de la macro sin un UserForm (y el mensaje que se queda pegado para siempre)

Application.StatusBar te deja escribir tu propio texto en la barra a lo largo de la parte inferior de la ventana de Excel, que es la forma más ligera de mostrar el progreso de una macro en marcha, sin UserForm y sin parpadeo. La única línea que todo el mundo olvida es la de restablecer. El último texto que escribiste se queda ahí clavado después de que la macro termina, porque Excel no recupera la barra hasta que pones Application.StatusBar igual a False. Y no se actualizará de forma visible dentro de un bucle apretado a menos que Excel tenga un momento para repintar, que es donde entra DoEvents. Aprende el patrón de escribir y restablecer, por qué False gana a una cadena vacía, el modismo del porcentaje de progreso, y cuándo una barra de progreso de verdad vale el trabajo extra.

Henry
VBA DisplayAlerts en Excel — silencia los avisos de confirmación de las macros desatendidas (y por qué auto-confirma las peligrosas)

VBA DisplayAlerts en Excel — silencia los avisos de confirmación de las macros desatendidas (y por qué auto-confirma las peligrosas)

Application.DisplayAlerts igual a False le dice a Excel que deje de mostrar sus cuadros de confirmación y advertencia mientras corre tu macro, para que una macro desatendida no se quede parada esperando a que alguien pulse Aceptar. Pero no silencia el aviso tanto como lo responde por ti con la respuesta por defecto de Excel, y ante avisos como borrar esta hoja o sobrescribir este archivo, la respuesta por defecto es que sí. Se restablece solo a True cuando la macro termina, así que la verdadera trampa no es dejarlo apagado para siempre sino silenciar un aviso que te estaba protegiendo. Aprende dónde ayuda, la regla de la ventana estrecha, por qué no es lo mismo que el manejo de errores, y cómo se empareja con ScreenUpdating y Calculation.

Henry
VBA ScreenUpdating en Excel — detén el parpadeo y acelera tus macros (y por qué no arreglará una lenta)

VBA ScreenUpdating en Excel — detén el parpadeo y acelera tus macros (y por qué no arreglará una lenta)

Application.ScreenUpdating igual a False le dice a Excel que deje de repintar la pantalla mientras corre tu macro y la redibuje una sola vez al final, lo que elimina el parpadeo y da una mejora de velocidad modesta. Pero solo ayuda cuando tu código escribe, selecciona o se desplaza — pégalo a una macro limitada por el cálculo y no ganas nada. La regla que te salva es que un fallo puede dejar la pantalla congelada y gris, así que la restauras en un manejador de errores, nunca confiando en que se reinicie sola. Aprende dónde ayuda, dónde no, la trampa de parpadeo del restaurado anidado, y el patrón CleanExit que la empareja con Calculation y EnableEvents.

Henry
VBA Calculation en Excel — pon el cálculo en Manual para ganar velocidad (y la trampa silenciosa de dejarlo así)

VBA Calculation en Excel — pon el cálculo en Manual para ganar velocidad (y la trampa silenciosa de dejarlo así)

Application.Calculation igual a xlCalculationManual le dice a Excel que deje de recalcular tras cada escritura y lo aplace todo a una sola pasada, que es la mejora de velocidad de verdad en libros cargados de fórmulas. Pero es el interruptor más peligroso de VBA porque su fallo es silencioso — déjalo en Manual y las fórmulas dejan de actualizarse sin ninguna señal visible, así que los totales quedan obsoletos y nadie se da cuenta. La regla que te salva es guardar el estado de cálculo, forzar un recálculo con Application.Calculate cuando un paso posterior necesita un resultado, y restaurar el estado guardado en un manejador de errores en vez de fijar Automatic a lo bruto. Aprende las trampas del modo manual, el error 1004 cuando no hay ningún libro abierto, y el patrón CleanExit.

Henry
VBA EnableEvents en Excel — evita que tu macro dispare sus propios eventos (y por qué un fallo los deja muertos)

VBA EnableEvents en Excel — evita que tu macro dispare sus propios eventos (y por qué un fallo los deja muertos)

Application.EnableEvents igual a False impide que las escrituras de tu macro disparen manejadores de eventos como Worksheet_Change, que es lo que rompe el bucle infinito donde un manejador edita una celda y se vuelve a disparar a sí mismo. Es un interruptor de corrección, no de velocidad. La regla que te salva es que EnableEvents es una propiedad a nivel de aplicación que no se reinicia sola, así que un fallo con ella en False deja muertos todos los eventos de todos los libros abiertos hasta que reinicies Excel — que es por lo que la gente reporta que sus botones dejaron de funcionar. Aprende el arreglo del Worksheet_Change recursivo, el restaurado con CleanExit, y por qué este interruptor importa aún más que los otros.

Henry
VBA SpecialCells en Excel — seleccionar celdas en blanco, visibles y constantes (y por qué lanza un error cuando no encuentra ninguna)

VBA SpecialCells en Excel — seleccionar celdas en blanco, visibles y constantes (y por qué lanza un error cuando no encuentra ninguna)

SpecialCells deja que Excel elija las celdas por ti según su tipo en lugar de por su dirección — todas las celdas en blanco, todas las filas visibles, todas las fórmulas, todas las constantes. Es el gemelo en código de Ir a Especial. La regla que te salva es que SpecialCells lanza error 1004 cuando no encuentra absolutamente nada, así que una llamada a secas es una bomba de relojería; la forma madura siempre es On Error Resume Next más If Not resultado Is Nothing. Aprende los tipos de celda que importan, los patrones para rellenar celdas en blanco y para copiar solo las filas visibles, y por qué el resultado es una referencia de múltiples áreas.

Henry
VBA Union en Excel — combinar rangos no adyacentes en una sola referencia (y por qué no elimina duplicados)

VBA Union en Excel — combinar rangos no adyacentes en una sola referencia (y por qué no elimina duplicados)

Union pega rectángulos dispersos en una sola referencia para que puedas dar color, borrar o copiar varios bloques no adyacentes en una sola operación — la versión en código de hacer Ctrl+clic en varias áreas. La regla que hace tropezar a todo el mundo es que Union concatena, no elimina duplicados; las celdas solapadas se cuentan dos veces, así que .Count miente y Union es una lista por lotes, no una unión de conjuntos. Aprende el patrón de acumulación que evita el error de hacer Union de Nothing, por qué es una operación por referencia en vez de un bucle celda a celda, y en qué se diferencia Union de Intersect.

Henry
VBA Intersect en Excel — encuentra dónde se solapan dos rangos (y la guarda de Worksheet_Change que todo el mundo usa)

VBA Intersect en Excel — encuentra dónde se solapan dos rangos (y la guarda de Worksheet_Change que todo el mundo usa)

Intersect devuelve solo las celdas que dos rangos comparten, y devuelve Nothing cuando no se tocan — y ese Nothing es justo lo importante. Su uso número uno es la guarda de Worksheet_Change, If Not Intersect(Target, Range) Is Nothing, que evita que un evento se dispare en cada edición de la hoja. La regla que te salva es que sin solapamiento se devuelve Nothing, así que cualquier acceso a una propiedad sin comprobar Is Nothing falla con error 91. Aprende la guarda de evento completa con EnableEvents, cómo acotar una macro a un área concreta, y en qué se diferencia Intersect de Union.

Henry
VBA Cells frente a Range en Excel — referenciar celdas por número (y por qué Cells(1, 2) es B1, no A2)

VBA Cells frente a Range en Excel — referenciar celdas por número (y por qué Cells(1, 2) es B1, no A2)

Cells es Range direccionado por número. Range(A1) apunta a una celda con una cadena en el orden en que la lees, letra de columna y luego fila; Cells(fila, columna) apunta a una celda con dos enteros en el orden en que Excel la guarda, primero la fila y luego la columna. Por eso Cells(1, 2) es B1, no A2. Aprende cuándo usar Cells frente a Range, cómo construir un bloque a partir de esquinas calculadas con Range(Cells, Cells) y por qué conviene cualificar Cells con una hoja.

Henry
VBA Resize en Excel — redimensionar un rango desde su ancla (y por qué es un recuento, no un incremento)

VBA Resize en Excel — redimensionar un rango desde su ancla (y por qué es un recuento, no un incremento)

Resize fija el ancla superior izquierda de un rango y vuelve a dibujar el rectángulo con un tamaño nuevo. No mueve la referencia como hace Offset y no selecciona nada — devuelve un rango nuevo que empieza en la misma esquina. La regla que pilla a todos es que Resize(rows, columns) es un recuento absoluto, con base 1, del tamaño final, no un incremento que sumar, así que Range(A1).Resize(5, 3) es A1:C5 y Resize(0) lanza el error 1004. Aprende a omitir un argumento para dejar una dimensión sin tocar, por qué el ancla es siempre la superior izquierda y los dos patrones que valen la pena — quitar un encabezado con Offset más Resize y escribir una matriz en un bloque que la ajuste.

Henry
VBA CurrentRegion en Excel — toma todo el bloque de datos en una línea (y qué le hace una fila en blanco)

VBA CurrentRegion en Excel — toma todo el bloque de datos en una línea (y qué le hace una fila en blanco)

CurrentRegion es el bloque contiguo de celdas alrededor de una celda. Excel empieza en tu celda y se expande hacia afuera hasta topar con una fila totalmente en blanco y una columna totalmente en blanco, y devuelve el rectángulo más pequeño que encierra esa isla ininterrumpida — justo lo que selecciona Ctrl+Mayús+asterisco. Tú no calculas los bordes; Excel los encuentra. La trampa es que una sola fila o columna totalmente en blanco es un muro que parte el bloque sin avisar, así que obtienes la mitad de tus datos sin ningún error. Aprende por qué CurrentRegion incluye el encabezado y cómo quitarlo con Offset y Resize, en qué se diferencia de UsedRange y de End(xlUp), y cuándo usar en su lugar una Tabla de verdad.

Henry
VBA Borders en Excel — dibuja bordes de celda desde código (y por qué se encuadró todo el bloque)

VBA Borders en Excel — dibuja bordes de celda desde código (y por qué se encuadró todo el bloque)

Un borde en Excel VBA es una propiedad de una arista, no un interruptor de la celda. Un rango tiene ocho bordes direccionables — cuatro lados exteriores, dos juegos de líneas de cuadrícula interiores y dos diagonales — y la colección Range.Borders a secas significa todos ellos a la vez. Por eso Range.Borders.LineStyle = xlContinuous encuadra cada una de las celdas en vez de dibujar un solo contorno. Aprende cuándo usar BorderAround para solo el marco, cómo se combinan LineStyle, Weight y Color, cómo fijar un único lado con xlEdgeBottom, y cómo borrar los bordes con xlLineStyleNone.

Henry
VBA Merge Cells en Excel — combinar y separar celdas desde código (y por qué normalmente no deberías)

VBA Merge Cells en Excel — combinar y separar celdas desde código (y por qué normalmente no deberías)

Combinar celdas en Excel VBA no es formato — es un cambio estructural de la cuadrícula. Range(A1:C1).Merge funde tres celdas en una que abarca tres columnas, y solo sobrevive el valor de arriba a la izquierda mientras los demás se borran. Por eso las celdas combinadas rompen en silencio la ordenación, la aritmética con Range, la inserción de columnas y los bucles. Aprende Merge, UnMerge, MergeCells y MergeArea, por qué los expertos echan mano de Centrar en la selección en su lugar, y cómo encontrar y limpiar celdas combinadas de forma segura en código.

Henry
VBA Column Width y Row Height en Excel — redimensionar y AutoFit desde código (y las unidades que te hacen tropezar)

VBA Column Width y Row Height en Excel — redimensionar y AutoFit desde código (y las unidades que te hacen tropezar)

Dimensionar celdas en Excel VBA actúa sobre la columna o la fila entera, y las dos dimensiones usan unidades distintas — ColumnWidth se mide en caracteres de la fuente Normal, RowHeight se mide en puntos. Ese desajuste es la razón de que un ancho de 10 y un alto de 10 no se parezcan en nada. AutoFit es la otra trampa. Solo se ejecuta sobre una columna o una fila entera, y mide el texto mostrado, así que ignora en silencio las celdas combinadas. Aprende ColumnWidth frente al Width de solo lectura, RowHeight y el ajuste de texto, EntireColumn.AutoFit, y por qué poner el ancho a cero es la forma equivocada de ocultar una columna.

Henry
VBA Font en Excel — cómo dar color, negrita y tamaño desde código (y la trampa de ColorIndex)

VBA Font en Excel — cómo dar color, negrita y tamaño desde código (y la trampa de ColorIndex)

El objeto Font es la capa de texto de una celda en Excel VBA — color, negrita, cursiva, tamaño y nombre, y nada de eso toca el valor que hay debajo. La pega está en el color. Hay tres formas de fijarlo y usan espacios numéricos distintos. Range.Font.Color toma un número RGB de 24 bits, Range.Font.ColorIndex toma un índice de paleta de 1 a 56, y los dos no son intercambiables. Aprende cuál usar, cómo poner en negrita o cambiar el tamaño de parte de una celda con Characters, por qué colorear según el valor es cosa del Formato condicional, y cómo leer de vuelta un color de fuente sin llevarte el número equivocado.

Henry
VBA Color de celda en Excel — cómo poner el relleno de fondo desde código (y por qué el color no es dato)

VBA Color de celda en Excel — cómo poner el relleno de fondo desde código (y por qué el color no es dato)

Range.Interior es la capa de relleno de una celda en Excel VBA — la pintura que hay detrás del texto. Fíjalo con Interior.Color y RGB, bórralo poniendo Interior.ColorIndex a xlNone, y ten claro que un relleno blanco no es lo mismo que sin relleno. La idea de fondo es que una celda con color no lleva ningún dato. SUM y SUMIF la ignoran, así que si usas el color para categorizar estás escondiendo información donde las fórmulas no la pueden leer. Aprende las propiedades de color, cómo resaltar por condición sin un bucle que se queda obsoleto, y cómo rellenar muchos rangos rápido.

Henry
VBA NumberFormat en Excel — cambia cómo se muestra un número sin cambiar su valor

VBA NumberFormat en Excel — cambia cómo se muestra un número sin cambiar su valor

Range.NumberFormat es la capa de visualización de una celda en Excel VBA. Cambia cómo se lee en pantalla un número guardado y nunca cambia el número en sí, así que formatear una celda para que muestre 5 mientras contiene 5.4999 no es redondear y la suma sigue usando 5.4999. Aquí es donde la apariencia frente al valor te muerde de verdad, porque una fecha en realidad es un número de serie disfrazado. Aprende el lenguaje de los códigos de formato, en qué se diferencia NumberFormat de la función Format, la trampa de configuración regional con NumberFormatLocal, y cuándo necesitas Round en su lugar.

Henry
VBA WorksheetFunction en Excel — llama a las propias funciones de Excel desde código (y las dos formas en que fallan)

VBA WorksheetFunction en Excel — llama a las propias funciones de Excel desde código (y las dos formas en que fallan)

Application.WorksheetFunction permite a VBA tomar prestadas las más de 450 funciones integradas de Excel en lugar de reescribir SUM, VLOOKUP o COUNTIF como un bucle. El truco es que hay dos formas de llamarlas y fallan de manera distinta. WorksheetFunction.X lanza un error de ejecución cuando no hay coincidencia, mientras que Application.X devuelve un valor de error que compruebas con IsError. Aprende qué estilo de llamada usar, por qué el resultado debe ser un Variant, qué funciones no deberías llamar así y cuándo pasar un rango entero en vez de recorrer celda a celda.

Henry
VBA eliminar duplicados en Excel — desduplica en una línea (y por qué elimina sin deshacer)

VBA eliminar duplicados en Excel — desduplica en una línea (y por qué elimina sin deshacer)

Range.RemoveDuplicates es el botón Quitar duplicados de Excel en una sola línea de código, pero es destructivo de formas en que un bucle no lo es. Elimina filas en su sitio, conserva la primera aparición y no se puede deshacer después de que una macro se ejecuta. El argumento que hace tropezar a todos es Columns, cuyos números son desfases dentro del rango, no letras de columna de la hoja. Aprende la trampa del desfase del rango, por qué importa Header xlYes, cómo conservar la última fila en lugar de la primera, y cuándo recurrir a Filtro avanzado o a un Dictionary.

Henry
VBA Filtro avanzado en Excel — extrae valores únicos y filtra a un rango nuevo (sin un bucle)

VBA Filtro avanzado en Excel — extrae valores únicos y filtra a un rango nuevo (sin un bucle)

Range.AdvancedFilter es el único filtro que produce datos en lugar de una vista. Puede sacar una lista única o un conjunto de filas que cumplen un criterio a otra ubicación en una sola llamada, sin un bucle y sin eliminar nada. La parte que resulta extraña es que su cláusula WHERE vive en celdas, un rango de criterios cuya cabecera debe coincidir con los datos exactamente. Aprende xlFilterInPlace frente a xlFilterCopy, cómo funciona el rango de criterios, cómo Unique True desduplica sin destruir, la trampa de la coincidencia de cabeceras que devuelve una salida vacía, y en qué se diferencia de AutoFilter y Quitar duplicados.

Henry
VBA Find en Excel — buscar celdas de la forma correcta (devuelve un Range, no una posición)

VBA Find en Excel — buscar celdas de la forma correcta (devuelve un Range, no una posición)

El método Range.Find de VBA es el Ctrl+F de Excel para código, y hace tropezar a la gente porque devuelve un objeto Range (o Nothing cuando no hay coincidencia) en lugar de un número. Aprende la única comprobación que evita el fallo del error 91, la trampa de los argumentos pegajosos que hace que Find se comporte distinto en cada ejecución, cómo LookAt xlWhole frente a xlPart decide entre celda completa y contiene, y cómo recorrer FindNext para obtener cada coincidencia sin un bucle infinito.

Henry
VBA AutoFilter en Excel — filtrar filas en código (y por qué oculto no es eliminado)

VBA AutoFilter en Excel — filtrar filas en código (y por qué oculto no es eliminado)

El método AutoFilter de VBA filtra una tabla en código, pero las filas que oculta siguen ahí — siguen contando en SUM, se siguen copiando y siguen ocupando tu rango. Aprende el modelo mental que evita los errores clásicos, por qué debes pasar por SpecialCells xlCellTypeVisible para tocar solo las filas visibles, cómo funcionan los criterios y los operadores, la trampa del interruptor que apaga tu filtro en la segunda ejecución y el rápido patrón de filtrar y luego eliminar para quitar filas en masa.

Henry
VBA Sort en Excel — Range.Sort frente al objeto Sort (y cómo recuperar el orden original)

VBA Sort en Excel — Range.Sort frente al objeto Sort (y cómo recuperar el orden original)

Ordenar en VBA es una reordenación permanente sin Ctrl+Z, así que la primera regla es proteger el orden original antes de tocarlo. Aprende el modelo mental que separa una vista de una mutación, por qué Header xlYes importa o tus títulos acaban entre los datos, la diferencia entre el rápido Range.Sort y el ilimitado objeto Sort, la trampa de SortFields.Clear que hereda claves de ordenación antiguas, y por qué los números guardados como texto se ordenan en el orden equivocado.

Henry
VBA eliminar filas en Excel — eliminar filas, filas en blanco y filas por condición (¡recorre el bucle hacia atrás!)

VBA eliminar filas en Excel — eliminar filas, filas en blanco y filas por condición (¡recorre el bucle hacia atrás!)

Eliminar una fila en VBA es una edición estructural, no un borrado —cada fila de debajo sube para tapar el hueco, y por eso un bucle hacia delante se salta filas. Aprende la única regla que lo arregla (recorrer de abajo arriba, o eliminar con una sola Union), en qué se diferencia EntireRow.Delete de vaciar una celda, la forma rápida de quitar filas en blanco y cómo eliminar filas por condición sin corromper tus datos ni tus fórmulas de referencia.

Henry
VBA insertar filas y columnas en Excel — desplaza la cuadrícula en la dirección correcta (e inserta en un bucle sin caos)

VBA insertar filas y columnas en Excel — desplaza la cuadrícula en la dirección correcta (e inserta en un bucle sin caos)

Insertar es el reflejo de eliminar —empuja las filas existentes hacia abajo (o las columnas a la derecha) para hacer sitio, así que el mismo desplazamiento que rompe un bucle de eliminación rompe también uno de inserción. Aprende EntireRow.Insert frente a un rango parcial con el argumento Shift, por qué CopyOrigin decide de qué vecino hereda el formato la nueva fila, la dirección segura para insertar dentro de un bucle y la forma de añadir muchas filas de una sola llamada.

Henry
VBA ocultar columnas y filas en Excel — ocultar no es eliminar (y por qué tus totales no cambian)

VBA ocultar columnas y filas en Excel — ocultar no es eliminar (y por qué tus totales no cambian)

Ocultar una columna en VBA no es eliminarla ni filtrarla —los datos siguen ahí, siguen en cada SUM, se siguen copiando al copiar el rango, solo que con un ancho de visualización de cero. Aprende por qué .Hidden vive en EntireColumn y EntireRow, por qué las celdas ocultas siguen contando en las fórmulas, la línea de mostrar todo que rescata una hoja atascada y en qué se diferencian las filas ocultas a mano de las ocultas por AutoFilter cuando recorres un bucle.

Henry
VBA Worksheet_BeforeDoubleClick en Excel — convierte un doble clic en una acción (y suprime el modo edición)

VBA Worksheet_BeforeDoubleClick en Excel — convierte un doble clic en una acción (y suprime el modo edición)

Worksheet_BeforeDoubleClick es el evento que Excel dispara en el instante en que haces doble clic en una celda, antes de que entre en modo edición, y te entrega la celda Target más un indicador Cancel. Pon Cancel en True para suprimir el modo edición y ejecutar tu propia acción en su lugar, alternar una marca, dar una fila por hecha o bajar al detalle. Aprende a acotarlo a una sola columna con Intersect, por qué olvidar Cancel deja la celda en modo edición, y dónde debe vivir el código.

Henry
VBA Worksheet_BeforeRightClick en Excel — reemplaza el menú del clic derecho (y por qué desactivarlo no es seguridad)

VBA Worksheet_BeforeRightClick en Excel — reemplaza el menú del clic derecho (y por qué desactivarlo no es seguridad)

Worksheet_BeforeRightClick es el evento que Excel dispara en el instante en que haces clic derecho en una celda, antes de que aparezca el menú contextual, y te entrega la celda Target más un indicador Cancel. Pon Cancel en True para suprimir el menú integrado y ejecutar tu propia acción o mostrar un menú personalizado en su lugar. Aprende a acotarlo con Intersect para no lisiar Copiar y Pegar, por qué desactivar el clic derecho es UX y no protección, y dónde debe vivir el código.

Henry
VBA Workbook_BeforePrint en Excel — bloquea una impresión, sella un encabezado y la pega de la vista previa

VBA Workbook_BeforePrint en Excel — bloquea una impresión, sella un encabezado y la pega de la vista previa

Workbook_BeforePrint es el evento que Excel dispara antes de que se imprima nada del libro, y te entrega un indicador Cancel. Pon Cancel en True y la impresión se bloquea, valida antes de imprimir o frena que salga un borrador. Aprende por qué el evento también se dispara con la Vista preliminar (así que el trabajo pesado hace que la vista previa se arrastre), por qué se ejecuta una sola vez para todo el libro en lugar de por hoja, por qué un Cancel silencioso es un bug, y dónde debe vivir el código.

Henry
VBA Workbook_BeforeClose en Excel — cancela el cierre, pide guardar y dónde debe vivir el código

VBA Workbook_BeforeClose en Excel — cancela el cierre, pide guardar y dónde debe vivir el código

Workbook_BeforeClose es el evento que Excel dispara en el instante en que alguien intenta cerrar el archivo, antes de que nada se desmonte, y te entrega un indicador Cancel. Pon Cancel en True y el cierre se aborta. Aprende a ejecutar limpieza al cerrar, cómo evitar que Excel pida guardar dos veces con la propiedad Saved, por qué nunca se dispara ante un fallo, y dónde debe vivir el código.

Henry
VBA Workbook_BeforeSave en Excel — valida o bloquea un guardado, y qué te dice de verdad SaveAsUI

VBA Workbook_BeforeSave en Excel — valida o bloquea un guardado, y qué te dice de verdad SaveAsUI

Workbook_BeforeSave es el evento que Excel dispara en el momento en que se solicita un guardado, antes de que nada se escriba en disco, y te entrega dos indicadores, SaveAsUI y Cancel. Aprende a bloquear un guardado cuando una celda obligatoria está vacía, a sellar automáticamente quién guardó y cuándo, por qué llamar a Save dentro del manejador entra en bucle infinito, y cómo SaveAsUI te permite imponer un nombre de archivo.

Henry
VBA Worksheet_Activate y Deactivate en Excel — ejecuta código al cambiar de hoja (y por qué no puedes cancelar una salida)

VBA Worksheet_Activate y Deactivate en Excel — ejecuta código al cambiar de hoja (y por qué no puedes cancelar una salida)

Worksheet_Activate se dispara cuando una hoja pasa a ser la activa y Worksheet_Deactivate se dispara justo al abandonarla, los eventos de llegada y salida de una hoja. La pega que los define, a diferencia de BeforeClose y BeforeSave, ninguno te da un Cancel, así que puedes observar un cambio de hoja pero no puedes bloquearlo. Aprende el patrón de refrescar al mirar, el truco del rebote, y los manejadores a nivel de hoja frente a nivel de libro.

Henry
VBA Class Module en Excel — construye tu propio objeto (plano frente a instancia, y la trampa de As New)

VBA Class Module en Excel — construye tu propio objeto (plano frente a instancia, y la trampa de As New)

Un class module de VBA te deja definir tu propio tipo de objeto —un plano que agrupa datos y comportamiento— y luego crear instancias independientes con New. La trampa que pilla a todo el mundo es que los objetos son tipos de referencia, así que Set b = a hace que ambos nombres apunten a la misma instancia, y Dim x As New esconde una trampa de instanciación perezosa. Aprende cómo el nombre del módulo se convierte en el nombre del tipo, cuándo una clase gana a un Type y cómo evitar los errores clásicos con New.

Henry
VBA Type en Excel — agrupa campos relacionados en una sola variable (tipos definidos por el usuario frente a una clase)

VBA Type en Excel — agrupa campos relacionados en una sola variable (tipos definidos por el usuario frente a una clase)

Un Type de VBA —un tipo definido por el usuario declarado con Type ... End Type— agrupa varios campos relacionados en una sola variable, así Name, Age y Salary viajan juntos en lugar de como tres arrays paralelos. Es un tipo de valor, lo que significa que asignar una variable Type a otra copia todos los campos, al contrario que los objetos, que comparten. Aprende dónde debe vivir la declaración, por qué copiar en vez de compartir importa y el punto exacto en el que deberías recurrir a un class module.

Henry
VBA Property en Excel — Get, Let y Set (acceso controlado a los campos de una clase)

VBA Property en Excel — Get, Let y Set (acceso controlado a los campos de una clase)

Property Get, Let y Set convierten un campo de clase en una puerta —un pequeño procedimiento que ejecuta tu código cada vez que el exterior lo lee o lo escribe—, así puedes validar la entrada, calcular valores al vuelo o hacer un campo de solo lectura. La distinción que pilla a todo el mundo es Let frente a Set —Let asigna un valor, Set asigna un objeto— y usar el que no toca es un error de compilación o de tiempo de ejecución. Aprende el patrón del campo de respaldo, cuándo una simple variable Public es la elección honesta y cómo construir una propiedad de solo lectura.

Henry
VBA ActiveCell en Excel — la única celda con el cursor (ActiveCell frente a Selection, y cuándo falla)

VBA ActiveCell en Excel — la única celda con el cursor (ActiveCell frente a Selection, y cuándo falla)

ActiveCell es un puntero vivo a la única celda que tiene el cursor ahora mismo — siempre exactamente una celda, en la hoja activa, dentro de la Selection actual. Aprende en qué se diferencia de Selection, cómo leerlo y escribirlo con .Value y .Offset, y la razón número uno por la que falla — sigue a la hoja y el cursor que el usuario dejó atrás, así que es la herramienta equivocada para código que no trata de dónde está el usuario.

Henry
VBA Selection en Excel — trabaja con lo que está resaltado (y por qué no siempre es un Range)

VBA Selection en Excel — trabaja con lo que está resaltado (y por qué no siempre es un Range)

Selection es un puntero vivo a lo que esté resaltado ahora mismo — normalmente un rango de celdas, pero también puede ser un gráfico, una forma o nada en absoluto. Por eso el código que da por hecho que Selection es un rango se rompe en cuanto se selecciona un gráfico. Aprende a recorrer las celdas seleccionadas, a manejar selecciones de varias áreas con .Areas, a protegerte con TypeName y cuándo saltarte Selection por completo y nombrar tu rango.

Henry
VBA Select frente a Activate en Excel — rompe el hábito de .Select de la grabadora de macros

VBA Select frente a Activate en Excel — rompe el hábito de .Select de la grabadora de macros

La grabadora de macros escribe lo que hace tu ratón — Select una hoja, Select una celda, actúa sobre la Selection — porque así trabaja una persona, no como debería hacerlo el código. Aprende la diferencia real entre Select (resaltar una o varias celdas) y Activate (fijar la única celda activa), por qué casi todo .Select es un rodeo lento y frágil que puedes borrar, las raras veces en que de verdad necesitas seleccionar, y cómo refactorizar el código de la grabadora para actuar directamente sobre referencias de rango cualificadas.

Henry
VBA Workbook_Open en Excel — ejecuta una macro automáticamente al abrir el archivo (y dónde debe vivir el código)

VBA Workbook_Open en Excel — ejecuta una macro automáticamente al abrir el archivo (y dónde debe vivir el código)

Workbook_Open es el evento que Excel dispara en el instante en que tu archivo termina de abrirse — código que se ejecuta solo, sin necesidad de botón. Pero solo se dispara si vive en el objeto ThisWorkbook (no en un Module estándar) y el usuario tiene las macros habilitadas. Aprende dónde debe ir el código, por qué a veces nunca se ejecuta en silencio, Workbook_Open frente a Auto_Open, y cómo mantenerlo rápido y a prueba de fallos.

Henry
VBA Worksheet_Change en Excel — ejecuta código cuando se edita una celda (y el bucle infinito que hay que evitar)

VBA Worksheet_Change en Excel — ejecuta código cuando se edita una celda (y el bucle infinito que hay que evitar)

Worksheet_Change es el evento que Excel dispara cada vez que un usuario edita una celda de la hoja, entregándote la celda modificada como Target. La trampa que atrapa a todo el mundo: tu manejador escribe en una celda, esa escritura vuelve a disparar el evento, y Excel entra en bucle infinito. Aprende el arreglo con Application.EnableEvents, cómo acotarlo con Intersect, por qué ignora los recálculos de fórmulas, y dónde debe vivir el código.

Henry
VBA Worksheet_SelectionChange en Excel — ejecuta código cuando se mueve el cursor (resalta la fila activa sin retardos)

VBA Worksheet_SelectionChange en Excel — ejecuta código cuando se mueve el cursor (resalta la fila activa sin retardos)

Worksheet_SelectionChange es el evento que Excel dispara cada vez que el cursor se mueve — un clic, una tecla de flecha, un Enter. Te entrega la nueva selección como Target, lo que hace posibles trucos de seguimiento del cursor como resaltar la fila activa. Pero se dispara constantemente, así que el código pesado hace que toda la hoja vaya con retardo. Aprende el patrón de resaltar la fila activa bien hecho, por qué puede entrar en bucle, y cómo mantenerlo ligerísimo.

Henry
VBA For Each en Excel — recorre una colección sin tocar un índice (y las trampas que esconde)

VBA For Each en Excel — recorre una colección sin tocar un índice (y las trampas que esconde)

For Each dice «haz esto con cada elemento» y deja que VBA gestione el orden y los límites — sin contador, sin desfases por uno. Pero esa comodidad esconde tres reglas duras; la variable de bucle debe ser un objeto o un Variant, recorrer una matriz es de solo lectura y nunca debes eliminar de una colección que estás recorriendo. Aprende cuándo For Each gana a For…Next y cuándo te traiciona sin avisar.

Henry
VBA Collection en Excel — la lista ordenada que crece (y por qué no es un Dictionary)

VBA Collection en Excel — la lista ordenada que crece (y por qué no es un Dictionary)

Una VBA Collection es una lista ordenada que crece según le haces Add — sin ReDim, sin adivinar el tamaño. Pero tiene cuatro aristas con las que los principiantes se cortan siempre; es base 1 y no base 0, no puedes sobrescribir un elemento (solo Add/Remove), las claves duplicadas lanzan el error 457 y no trae ninguna comprobación Exists. Aprende cuándo una Collection gana a un Array o a un Dictionary, y cuándo te sale cara sin avisar.

Henry
VBA With en Excel — nombra el objeto una sola vez (y el punto inicial del que todo depende)

VBA With en Excel — nombra el objeto una sola vez (y el punto inicial del que todo depende)

La instrucción With nombra un objeto una vez y te deja alcanzar sus miembros con un punto inicial a secas — menos tecleo, código más rápido, bloques más limpios. Pero todo se juega en ese punto inicial; olvídalo y .Font se convierte en Font, que se enlaza en silencio con la hoja activa en vez de con tu objeto. Aprende qué optimiza With de verdad, la trampa del punto que falta y cómo With se combina con For Each.

Henry
Función AVERAGE de Excel — por qué un blanco y un cero dan dos promedios distintos

Función AVERAGE de Excel — por qué un blanco y un cero dan dos promedios distintos

La función AVERAGE de Excel parece trivial hasta que una celda en blanco y un cero producen, en silencio, dos promedios distintos de los mismos datos. AVERAGE ignora los blancos y el texto pero cuenta un 0 real, así que registrar una venta nula como 0 o dejar la celda vacía cambia el número sin avisar, y nada en la fórmula te lo advierte. Aprende el modelo mental (suma ÷ conteo, solo de números), la trampa del blanco frente al cero que decide tu respuesta, por qué AVERAGEA casi nunca es lo que quieres y cuándo un promedio de promedios es directamente la pregunta equivocada.

Henry
Promedio ponderado en Excel — SUMPRODUCT ÷ SUM (y por qué el promedio de promedios miente)

Promedio ponderado en Excel — SUMPRODUCT ÷ SUM (y por qué el promedio de promedios miente)

Excel no tiene una función WEIGHTEDAVG: el promedio ponderado correcto es =SUMPRODUCT(valores, pesos)/SUM(pesos). Lo que importa no es la fórmula, sino el error que corrige: hacer un AVERAGE simple de números que resumen grupos de distinto tamaño da a cada grupo el mismo peso, así que una región de 3 pedidos cuenta tanto como una de 300. Aprende el modelo mental (los pesos redistribuyen la influencia según el tamaño), por qué se divide entre SUM(pesos), el atajo cuando los pesos suman 1, ejemplos de nota media, cartera y precio combinado, y cómo añadir una condición.

Henry
Excel GEOMEAN, TRIMMEAN y HARMEAN — los promedios para cuando la media miente

Excel GEOMEAN, TRIMMEAN y HARMEAN — los promedios para cuando la media miente

Tres promedios especializados para los casos en que un AVERAGE simple da una respuesta errónea o engañosa. GEOMEAN es el promedio correcto para tasas de crecimiento y rentabilidades: un año de +50% y otro de -50% no promedian 0%. TRIMMEAN descarta los valores extremos altos y bajos antes de promediar, como hace la puntuación olímpica. HARMEAN es el promedio adecuado para tasas como la velocidad y los ratios PER. Aprende qué mentira corrige cada uno, el patrón GEOMEAN(1+r)-1 para el CAGR real, por qué los tres siempre se ordenan armónica ≤ geométrica ≤ aritmética, y las trampas del #¡NUM!.

Henry
Excel PRODUCTO — multiplica un rango entero (y por qué no es lo mismo que *)

Excel PRODUCTO — multiplica un rango entero (y por qué no es lo mismo que *)

La función PRODUCTO de Excel multiplica un rango en una sola llamada, pero la verdadera razón para usarla en vez del operador * es lo que hace con el texto y las celdas vacías: las ignora, mientras que * da error con el texto o pone tu resultado a cero en silencio en cuanto una celda está vacía. Aprende el modelo mental (PRODUCTO es el gemelo multiplicativo de SUMA), el truco del interés compuesto =PRODUCTO(1+rango), en qué se diferencia de SUMAPRODUCTO y cuándo una cadena de * es en realidad la mejor opción.

Henry
Excel Factorial (FACT) — n!, FACT.DOBLE y MULTINOMIAL (y el desbordamiento en 171!)

Excel Factorial (FACT) — n!, FACT.DOBLE y MULTINOMIAL (y el desbordamiento en 171!)

La función FACT de Excel calcula un factorial —=FACT(5) es 5×4×3×2×1 = 120—, pero lo primero que hay que entender es qué significa un factorial: el número de formas de ordenar n cosas distintas. Aprende por qué FACT(0) es 1, por qué FACT(171) devuelve #¡NUM! (el mayor factorial que Excel puede calcular es 170!), en qué se diferencian FACT.DOBLE y MULTINOMIAL, y por qué FACT es el átomo del que se construye toda función de combinaciones y permutaciones.

Henry
Excel COMBINAT y PERMUTACIONES — combinaciones frente a permutaciones (¿importa el orden?)

Excel COMBINAT y PERMUTACIONES — combinaciones frente a permutaciones (¿importa el orden?)

COMBINAT y PERMUTACIONES de Excel cuentan de cuántas formas puedes elegir k elementos de entre n; la diferencia es si importa el orden. PERMUTACIONES cuenta ordenaciones con orden (un podio, un PIN); COMBINAT cuenta selecciones sin orden (una lotería, un comité), y siempre es el número menor. Aprende la cuadrícula 2×2 que elige la función correcta cada vez (orden × repetición → PERMUTACIONES / PERMUTACIONES.A / COMBINAT / COMBINAT.A), el ejemplo de la lotería =COMBINAT(49;6) y por qué elegir mal no da ningún error, solo un recuento desviado por un factor de k!.

Henry
Excel NSHORA, HORA, MINUTO y SEGUNDO — Lee y construye la fracción que hay detrás del reloj

Excel NSHORA, HORA, MINUTO y SEGUNDO — Lee y construye la fracción que hay detrás del reloj

Una hora de reloj en Excel es una fracción de un día de 24 horas — las 6:00 son literalmente 0.25. HORA, MINUTO y SEGUNDO leen las piezas de esa fracción; NSHORA construye una fracción a partir de piezas y da la vuelta a medianoche sin avisar; HORANUMERO interpreta una hora de texto y la convierte en la fracción. Aprende el modelo mental, por qué HORA devuelve 6 para una duración de 30 horas, cómo NSHORA(25,0,0) se convierte en la 1:00, cómo sumar 90 minutos, y cuándo recurrir a la aritmética en su lugar.

Henry
Convertir hora a horas decimales en Excel — El truco del ×24 (y calcular horas trabajadas)

Convertir hora a horas decimales en Excel — El truco del ×24 (y calcular horas trabajadas)

Una hora en Excel es una fracción de un día, así que 8:15 se guarda como 0.34375, no como 8.25. Para convertirla en horas decimales multiplicas por 24 — la fórmula de hora más buscada de todas. Aprende por qué horas × tarifa sale 24 veces demasiado pequeño, cómo (fin − inicio) × 24 da las horas trabajadas, el truco de RESIDUO para turnos de noche que cruzan la medianoche, cómo restar descansos no pagados, y cómo redondear el tiempo facturable al cuarto de hora más cercano.

Henry
Suma de horas por encima de 24 en Excel — Por qué tu total se reinicia (y el arreglo [h]:mm)

Suma de horas por encima de 24 en Excel — Por qué tu total se reinicia (y el arreglo [h]:mm)

Suma una columna de horas y el total marca 1:30 en lugar de 25:30 — SUMA está bien, el formato miente. El h:mm por defecto de Excel muestra solo el resto tras los días enteros, así que da la vuelta a las 24 horas. El arreglo es el formato personalizado [h]:mm, donde los corchetes le dicen a Excel que acumule en lugar de dar la vuelta. Aprende por qué las horas negativas muestran #######, cómo obtener un total decimal, y la chuleta de formatos de hora.

Henry
Excel SENO, COS y TAN — por qué =SENO(30) no es 0,5 (la trampa de los radianes)

Excel SENO, COS y TAN — por qué =SENO(30) no es 0,5 (la trampa de los radianes)

Las funciones SENO, COS y TAN de Excel miden los ángulos en radianes, no en grados, así que =SENO(30) devuelve -0,988, no 0,5, y Excel nunca lo marca como error. Aprende el único modelo mental que arregla todas las respuestas trigonométricas erróneas (envuelve los grados en RADIANES), por qué TAN explota cerca de 90° en vez de dar error y cómo mantener una sola unidad de ángulo en toda la hoja.

Henry
Excel RADIANES, GRADOS y PI — convertir unidades de ángulo (y por qué PI() es una función)

Excel RADIANES, GRADOS y PI — convertir unidades de ángulo (y por qué PI() es una función)

RADIANES y GRADOS son el puente entre la unidad de ángulo en la que piensas (grados) y la que exigen las funciones trigonométricas de Excel (radianes). Aprende dónde va cada conversor —RADIANES antes de SENO/COS/TAN, GRADOS después de las funciones inversas—, por qué PI() necesita sus paréntesis o devuelve #¿NOMBRE? y por qué nunca deberías escribir 3,14159 a mano.

Henry
Excel ATAN y ATAN2 — arcotangente, tangente inversa y el ángulo a partir de X,Y

Excel ATAN y ATAN2 — arcotangente, tangente inversa y el ángulo a partir de X,Y

Las funciones trigonométricas inversas ASENO, ACOS, ATAN y ATAN2 convierten una razón de nuevo en un ángulo, y devuelven ese ángulo en radianes, así que las envuelves en GRADOS. Aprende por qué ATAN no puede saber en qué cuadrante estás, cómo lo resuelve ATAN2, la famosa trampa de que ATAN2(x, y) de Excel invierte el orden de argumentos que usan todos los lenguajes de programación, y por qué ASENO/ACOS de cualquier valor fuera de -1..1 devuelve #¡NUM!.

Henry
Funciones FV y PV en Excel — Valor futuro, valor actual y la regla de los cinco

Funciones FV y PV en Excel — Valor futuro, valor actual y la regla de los cinco

FV y PV son la misma ecuación del valor temporal del dinero que PMT, resuelta para una incógnita distinta. Cinco variables —rate, nper, pmt, pv, fv— y una función por incógnita: conoce cuatro cualesquiera y obtén la quinta. Aprende el valor futuro de un plan de ahorro, el valor actual de una serie de pagos, la misma convención de signos (el dinero que aportas es negativo), el argumento type para la anualidad anticipada, y cuándo recurrir a RATE y NPER.

Henry
NPV e IRR en Excel — Flujo de caja descontado y la tasa de retorno

NPV e IRR en Excel — Flujo de caja descontado y la tasa de retorno

NPV e IRR manejan los flujos de caja que PMT y FV no pueden: los irregulares y desiguales de un proyecto real. El mayor error de todos, y la razón entera para leer esto: el NPV de Excel supone que el primer valor llega un periodo en el FUTURO, así que una inversión en el momento cero debe quedar FUERA de la llamada a NPV. Aprende a usar NPV bien, IRR y por qué devuelve #NUM!, la trampa de los IRR múltiples, y por qué XNPV y XIRR (fechas reales) son lo que de verdad usan los analistas.

Henry
DSUM y DCOUNT en Excel — Suma y cuenta las filas que coinciden con una tabla de criterios

DSUM y DCOUNT en Excel — Suma y cuenta las filas que coinciden con una tabla de criterios

DSUM y DCOUNT responden «suma (o cuenta) las filas que coinciden», pero escribes las condiciones como una pequeña tabla en la hoja, no dentro de la fórmula. Aprende los tres argumentos, por qué el rango de datos debe incluir su fila de encabezados, cómo un rango de criterios codifica Y y O, por qué DCOUNT ignora el texto (usa DCOUNTA) y cuándo un bloque de criterios visible le gana a SUMIFS.

Henry
Función DGET en Excel — Extrae un único registro y falla a gritos cuando no lo hay

Función DGET en Excel — Extrae un único registro y falla a gritos cuando no lo hay

DGET extrae un único valor de una tabla usando un rango de criterios, y su rasgo definitorio es que da error a propósito: #NUM! cuando coincide más de una fila, #VALUE! cuando no coincide ninguna. No es un fallo, es una comprobación de unicidad integrada que VLOOKUP se salta en silencio. Aprende los tres argumentos, las búsquedas con varias condiciones sin columna auxiliar y cuándo DGET le gana a XLOOKUP (y cuándo no).

Henry
Funciones de base de datos en Excel — DAVERAGE, DMAX, DMIN y el dominio del rango de criterios

Funciones de base de datos en Excel — DAVERAGE, DMAX, DMIN y el dominio del rango de criterios

Las doce funciones D —DSUM, DCOUNT, DGET, DAVERAGE, DMAX, DMIN y más— comparten una firma y una destreza: el rango de criterios. Aprende cómo un bloque de criterios codifica Y y O, por qué un rango sobre un solo campo necesita su encabezado dos veces, cómo funcionan los criterios de fórmula (y la regla del encabezado que los hace o los rompe), la trampa de la coincidencia por «empieza por» y el árbol de decisión entre funciones D, SUMIFS y FILTER.

Henry
Función GROUPBY en Excel — Agrupa y resume datos con una sola fórmula

Función GROUPBY en Excel — Agrupa y resume datos con una sola fórmula

GROUPBY(campos_fila; valores; función) agrupa filas y las agrega en una sola fórmula que se derrama — el reemplazo moderno del patrón UNIQUE + SUMIFS y, para muchos informes, de la propia tabla dinámica. La trampa que pilla a todos: pasas la función por su nombre (SUM, no SUM()), porque es una lambda que Excel aplica a cada grupo. Aprende los tres argumentos obligatorios, por qué se recalcula en vivo donde una tabla dinámica queda obsoleta, cómo añadir totales y ordenar por el valor agregado, y la versión que necesita.

Henry
Función PIVOTBY en Excel — Crea una tabla dinámica con una fórmula

Función PIVOTBY en Excel — Crea una tabla dinámica con una fórmula

PIVOTBY(campos_fila; campos_columna; valores; función) es GROUPBY con una segunda dimensión — tabula los datos de forma cruzada en una cuadrícula de filas por columnas, una tabla dinámica expresada como una sola fórmula que se derrama y se recalcula en vivo sin Actualizar. Aprende los cuatro argumentos obligatorios, por qué campos_fila y campos_columna no son intercambiables, cómo añadir totales en ambos ejes y el verdadero compromiso frente a una tabla dinámica clásica (viva y referenciable, pero no interactiva de arrastrar y soltar). Necesita Excel 365.

Henry
GROUPBY y PIVOTBY avanzado — Porcentaje del total, varias métricas y agregaciones personalizadas

GROUPBY y PIVOTBY avanzado — Porcentaje del total, varias métricas y agregaciones personalizadas

Los argumentos opcionales que comparten GROUPBY y PIVOTBY son donde dejan de sustituir a las tablas dinámicas y empiezan a superarlas: PERCENTOF para el porcentaje del total en una sola palabra, varias columnas de valores para varias métricas a la vez, un LAMBDA en la ranura de la función para una media ponderada que las tablas dinámicas no pueden hacer, y filter_array para agregar solo las filas que quieres. Aprende la gramática de la función eta-reducida, la trampa del porcentaje del total y los errores (#CALC!, #FIELD!, #SPILL!) que te dicen qué argumento está mal.

Henry
Funciones ROW & COLUMN (FILA & COLUMNA) en Excel — Obtén la posición de una celda, no su valor

Funciones ROW & COLUMN (FILA & COLUMNA) en Excel — Obtén la posición de una celda, no su valor

`ROW([referencia])` devuelve un número de fila y `COLUMN([referencia])` un número de columna — la posición de una celda, nunca su contenido. Sin argumento, cada una devuelve la coordenada de la celda que contiene la fórmula. Aprende el modelo mental que separa "dónde está una celda" de "qué hay dentro", cómo `ROW()` menos un ancla construye números de serie que se renumeran solos, por qué `MOD(ROW(),n)` genera el sombreado de filas alternas y la agrupación, y la trampa nº1: `ROW(C10)` es `10`, no el valor de C10.

Henry
Funciones ROWS & COLUMNS (FILAS & COLUMNAS) en Excel — Cuenta el tamaño de un rango (no su posición)

Funciones ROWS & COLUMNS (FILAS & COLUMNAS) en Excel — Cuenta el tamaño de un rango (no su posición)

`ROWS(matriz)` devuelve cuántas filas tiene un rango y `COLUMNS(matriz)` cuántas columnas — un tamaño, no una posición. `ROWS(A1:A10)` es `10`; `COLUMNS(A1:C1)` es `3`. Aprende por qué las formas en plural difieren de `ROW` y `COLUMN`, el uso estrella de un índice de columna de `VLOOKUP` que se autoajusta con `COLUMNS()`, cómo contar las filas que devuelve un `FILTER`, y la trampa de la columna entera donde `ROWS(A:A)` es 1.048.576.

Henry
Función HYPERLINK (HIPERVINCULO) en Excel — Crea enlaces clicables que se actualizan solos

Función HYPERLINK (HIPERVINCULO) en Excel — Crea enlaces clicables que se actualizan solos

`HYPERLINK(ubicación_del_vínculo, [nombre_descriptivo])` es una fórmula que construye un salto clicable — a una celda, hoja, archivo, página web o correo — cuyo destino pueden calcular otras fórmulas. No es lo mismo que el menú Insertar > Vínculo, que crea un enlace estático. Aprende el modelo mental de fórmula-frente-a-menú, el prefijo `#` para saltar dentro de un libro, los destinos dinámicos con `ADDRESS` y `MATCH`, y la confusión nº1: navega al hacer clic, no trae el valor del destino, por lo que siempre conviene pasar `nombre_descriptivo`.

Henry
Excel ALEATORIO y ALEATORIO.ENTRE — genera números aleatorios (y evita que cambien)

Excel ALEATORIO y ALEATORIO.ENTRE — genera números aleatorios (y evita que cambien)

ALEATORIO() devuelve un decimal aleatorio desde 0 hasta 1; ALEATORIO.ENTRE(inferior; superior) devuelve un entero aleatorio en un rango, con ambos extremos incluidos. Aprende el modelo mental de que las dos son volátiles —se recalculan en cada edición—, por qué esa es la trampa número uno, cómo congelarlas con Pegado especial, por qué ALEATORIO.ENTRE repite valores y la fórmula =a+(b-a)*ALEATORIO() para decimales aleatorios.

Henry
Excel MATRIZALEAT — una fórmula para toda una cuadrícula de números aleatorios

Excel MATRIZALEAT — una fórmula para toda una cuadrícula de números aleatorios

MATRIZALEAT([filas];[columnas];[mín];[máx];[número_entero]) derrama un bloque de números aleatorios desde una sola fórmula — ALEATORIO y ALEATORIO.ENTRE fusionadas y mejoradas. Aprende por qué el argumento número_entero vale FALSO por defecto (así que obtienes decimales salvo que pidas enteros), por qué sigue siendo volátil, cuándo lanza #¡DESBORDAMIENTO! y el truco para barajar SORTBY(lista; MATRIZALEAT(...)).

Henry
Cómo seleccionar, muestrear y barajar filas al azar en Excel

Cómo seleccionar, muestrear y barajar filas al azar en Excel

El único truco detrás de toda extracción aleatoria en Excel: adjunta un número aleatorio a cada fila y luego ordena por él. Aprende la fórmula moderna de una línea TAKE(SORTBY(datos; MATRIZALEAT(...)); n), el método clásico con columna auxiliar de ALEATORIO, la distinción crítica entre con reemplazo y sin reemplazo que arruina las muestras, y por qué debes congelar la columna aleatoria antes de ordenar.

Henry
Excel POTENCIA y RAIZ — exponentes, raíces y las trampas de precedencia

Excel POTENCIA y RAIZ — exponentes, raíces y las trampas de precedencia

POTENCIA(x;n) y el operador ^ elevan un número a una potencia; RAIZ(x) es el atajo de la raíz cuadrada para ^(1/2). Aprende el modelo mental de que las raíces no son más que exponentes fraccionarios, por qué =-3^2 devuelve 9 y =27^1/3 devuelve 9 (dos trampas de precedencia), por qué RAIZ de un negativo da #¡NUM! y cómo una sola fórmula POTENCIA te da la CAGR.

Henry
Excel ABS y SIGNO — valor absoluto, magnitud y el signo que descartas

Excel ABS y SIGNO — valor absoluto, magnitud y el signo que descartas

ABS(x) devuelve la magnitud de un número (su distancia desde cero); SIGNO(x) devuelve solo su dirección como -1, 0 o +1. Aprende el modelo mental de que todo número es magnitud por dirección, por qué un control de tolerancia necesita ABS(A-B) y no A-B, la identidad x = SIGNO(x)*ABS(x) y por qué ABS es una herramienta para cuando la dirección de verdad no importa, no un parche sobre un signo que no esperabas.

Henry
Excel EXP, LN y LOG — logaritmos, tasas de crecimiento y la trampa de la base por defecto

Excel EXP, LN y LOG — logaritmos, tasas de crecimiento y la trampa de la base por defecto

EXP(x) eleva e a una potencia; LN, LOG10 y LOG son sus inversas. Aprende el modelo mental de que un logaritmo es la exponenciación al revés (despejar el exponente), por qué LOG(x) sin base es base 10 y NO el logaritmo natural, por qué LN(0) y LOG de un negativo dan #¡NUM! y las dos fórmulas que los usuarios de empresa necesitan de verdad: media geométrica = EXP(PROMEDIO(LN)) y periodos-hasta-objetivo = LN(objetivo)/LN(tasa).

Henry
Funciones FORMULATEXTO (FORMULATEXT) y ESFORMULA (ISFORMULA) de Excel — Lee y audita la fórmula dentro de una celda

Funciones FORMULATEXTO (FORMULATEXT) y ESFORMULA (ISFORMULA) de Excel — Lee y audita la fórmula dentro de una celda

FORMULATEXTO (FORMULATEXT) devuelve la fórmula de una celda como texto; ESFORMULA (ISFORMULA) devuelve VERDADERO cuando una celda contiene una fórmula. Aprende el modelo mental — estas funciones auditan una hoja, no calculan —, el #N/D que sale en una celda que no es fórmula, el truco de formato condicional que resalta cada fórmula y cuándo usarlas en lugar de Mostrar fórmulas.

Henry
Función CELDA (CELL) de Excel — Obtén la dirección, el formato, el tipo y el nombre de archivo de una celda

Función CELDA (CELL) de Excel — Obtén la dirección, el formato, el tipo y el nombre de archivo de una celda

CELDA (CELL) devuelve metadatos sobre una celda — su dirección, fila, columna, formato de número, tipo de contenido o el nombre de archivo del libro — en lugar de su valor. Aprende el modelo mental, por qué info_type es una cadena de palabra clave, el único trabajo en el que aún es insustituible (obtener la ruta del archivo y el nombre de la hoja) y la trampa de recálculo que la hace parecer equivocada.

Henry
Funciones TIPO (TYPE) y N (N) de Excel — Diagnostica qué clase de valor tienes realmente

Funciones TIPO (TYPE) y N (N) de Excel — Diagnostica qué clase de valor tienes realmente

TIPO (TYPE) devuelve un código según el tipo de valor de una celda — 1 número, 2 texto, 4 lógico, 16 error, 64 matriz — y N (N) convierte un valor en número. Aprende el modelo mental, cómo TIPO detecta los números guardados como texto, por qué N de cualquier texto devuelve 0 en lugar de dar error y el clásico truco de N para incrustar un comentario dentro de una fórmula.

Henry
Función CAMBIAR (SWITCH) de Excel — Sustituye los SI anidados por una fórmula plana y legible

Función CAMBIAR (SWITCH) de Excel — Sustituye los SI anidados por una fórmula plana y legible

CAMBIAR (SWITCH) compara una expresión con una lista de valores exactos y devuelve la primera coincidencia — =SWITCH(expr, val1, res1, val2, res2, default). Aprende el modelo mental, por qué solo hace igualdad exacta (y por qué esa es la frontera entre SWITCH e IFS), la trampa del argumento default que devuelve #N/D, el truco SWITCH(TRUE()) para rangos y cuándo usarla en lugar de un IF anidado.

Henry
Función ELEGIR (CHOOSE) de Excel — Elige el enésimo elemento por posición (y su superpoder oculto)

Función ELEGIR (CHOOSE) de Excel — Elige el enésimo elemento por posición (y su superpoder oculto)

ELEGIR (CHOOSE) devuelve el enésimo elemento de una lista por posición — =CHOOSE(index_num, value1, value2, …). Aprende el modelo mental, por qué elige por posición y no por coincidencia (la frontera entre CHOOSE y SWITCH), el #¡VALOR! que obtienes cuando el índice está fuera de rango y su superpoder poco aprovechado — devolver rangos enteros para cambiar de escenario o reordenar columnas para una búsqueda hacia la izquierda.

Henry
MAX.SI.CONJUNTO y MIN.SI.CONJUNTO (MAXIFS y MINIFS) en Excel — Máximo y mínimo condicional sin fórmulas matriciales

MAX.SI.CONJUNTO y MIN.SI.CONJUNTO (MAXIFS y MINIFS) en Excel — Máximo y mínimo condicional sin fórmulas matriciales

MAXIFS y MINIFS devuelven el valor más grande o más pequeño que cumple una o más condiciones — =MAXIFS(max_range, criteria_range1, criteria1, …). Aprende el modelo mental, el orden de argumentos que hace tropezar a quienes vienen de SUMIF, por qué reemplazan a la vieja fórmula matricial {=MAX(IF())} y la trampa del 0 silencioso que devuelven cuando ninguna fila coincide.

Henry
Función COUNTIF de Excel — contar celdas que cumplen una condición (y las trampas del criterio)

Función COUNTIF de Excel — contar celdas que cumplen una condición (y las trampas del criterio)

COUNTIF cuenta las celdas que cumplen una sola condición — =COUNTIF(range, criteria) — donde el criterio es una pequeña prueba escrita como texto. Aprende por qué los operadores deben ir entre comillas, cómo usar el valor de una celda como umbral con &, los comodines para buscar texto, la trampa de los 15 dígitos en números largos, y cuándo dar el salto a COUNTIFS.

Henry
Cómo contar valores únicos en Excel — la forma moderna y la fórmula clásica

Cómo contar valores únicos en Excel — la forma moderna y la fórmula clásica

Excel no tiene una función COUNTUNIQUE, así que contar valores distintos tiene dos respuestas: la moderna =COUNTA(UNIQUE(range)) en 365/2021, y la clásica =SUMPRODUCT(1/COUNTIF(range,range)) para versiones antiguas. Aprende por qué los blancos suman 1 a tu recuento, cómo excluirlos con FILTER, por qué la fórmula clásica lanza #DIV/0!, y la diferencia entre valores distintos y valores que aparecen una sola vez.

Henry
ESPACIOS y LIMPIAR en Excel — Elimina la basura invisible que rompe tus búsquedas

ESPACIOS y LIMPIAR en Excel — Elimina la basura invisible que rompe tus búsquedas

ESPACIOS (TRIM) y LIMPIAR (CLEAN) eliminan basura invisible del texto importado, pero atacan cosas distintas: ESPACIOS quita los espacios de más (ASCII 32) y LIMPIAR quita los caracteres de control no imprimibles (0-31). Ninguna elimina el espacio de no separación CHAR(160) que dejan los pegados de web y PDF: la razón número 1 de que «TRIM no funciona». Aprende el modelo mental y el único arreglo que lo caza todo.

Henry
MAYUSC, MINUSC y NOMPROPIO en Excel — Cambia el uso de mayúsculas sin destrozar tus datos

MAYUSC, MINUSC y NOMPROPIO en Excel — Cambia el uso de mayúsculas sin destrozar tus datos

MAYUSC, MINUSC y NOMPROPIO reescriben el uso de mayúsculas del texto, pero en Excel las mayúsculas son un asunto de visualización y exportación, no de coincidencia: el operador = y VLOOKUP ya no distinguen mayúsculas. La verdadera trampa es NOMPROPIO: pone en mayúscula la primera letra de cada palabra y convierte McDonald en Mcdonald e iPhone en Iphone. Aprende cuándo importan de verdad las mayúsculas y por qué NOMPROPIO es un punto de partida, no un acabado.

Henry
Función LARGO en Excel — Cuenta caracteres y revela la basura que no puedes ver

Función LARGO en Excel — Cuenta caracteres y revela la basura que no puedes ver

LARGO cuenta los caracteres de una celda, pero su verdadera fuerza es diagnóstica: como cuenta todos los caracteres, incluidos los espacios finales y los no imprimibles, LARGO es cómo demuestras que una celda que parece «Apple» es en realidad «Apple » con 6 caracteres. Aprende LARGO para validación, el truco de contar con LARGO-menos-LARGO, la extracción dinámica y por qué LARGO ignora el formato de número.

Henry
Función VLOOKUP en Excel — Cómo usarla, y el 4º argumento que la rompe

Función VLOOKUP en Excel — Cómo usarla, y el 4º argumento que la rompe

VLOOKUP busca hacia abajo en la primera columna de una tabla y cuenta N columnas hacia la derecha — ese diseño unidireccional es el origen de todos sus fallos. Aprende por qué el 4º argumento (range_lookup) casi siempre debe ser FALSE, por qué VLOOKUP no puede mirar a la izquierda, por qué un número de columna fijo se rompe en silencio al insertar una columna, y cómo arreglar el #N/A que significa «no encontrado».

Henry
INDEX y MATCH en Excel — La búsqueda de dos funciones que supera a VLOOKUP

INDEX y MATCH en Excel — La búsqueda de dos funciones que supera a VLOOKUP

INDEX y MATCH dividen una búsqueda en dos tareas: MATCH encuentra la posición («¿qué fila?»), INDEX devuelve el valor en esa posición («¿qué hay ahí?»). Desacoplar la búsqueda de la recuperación es lo que le da a INDEX/MATCH todo lo que a VLOOKUP le falta — mira a la izquierda igual de fácil que a la derecha, sobrevive a columnas insertadas y hace búsquedas bidimensionales reales. Aprende el patrón, la trampa de match_type, y cuándo aún supera a XLOOKUP.

Henry
HLOOKUP y LOOKUP en Excel — Búsquedas horizontales y la función heredada que jubilar

HLOOKUP y LOOKUP en Excel — Búsquedas horizontales y la función heredada que jubilar

HLOOKUP es VLOOKUP girado 90 grados — busca en la primera FILA y lee hacia abajo. LOOKUP es el ancestro de VLOOKUP, y su defecto fatal es que no tiene opción de coincidencia exacta: siempre aproxima y exige datos ordenados. Aprende cuándo una disposición horizontal hace de HLOOKUP la opción correcta, por qué el clásico truco LOOKUP(2,1/…) aún aparece en hojas viejas, y por qué ambas ceden en su mayoría el paso a XLOOKUP.

Henry
Funciones AND y OR en Excel — Combina condiciones bien (y por qué Excel nunca hace cortocircuito)

Funciones AND y OR en Excel — Combina condiciones bien (y por qué Excel nunca hace cortocircuito)

AND y OR no deciden nada — colapsan muchas pruebas TRUE/FALSE en un único veredicto que alimenta un IF, una regla o un filtro. Aprende por qué AND va dentro del primer argumento de IF, por qué un =AND(...) suelto solo imprime TRUE, por qué Excel evalúa todos los argumentos (sin cortocircuito, así que aún lanza #DIV/0!), y cuándo cambiarlos por máscaras de matriz con +/*.

Henry
Funciones NOT y XOR en Excel — Invierte una condición, y la lógica del «único distinto» que casi todos confunden

Funciones NOT y XOR en Excel — Invierte una condición, y la lógica del «único distinto» que casi todos confunden

NOT invierte un veredicto TRUE/FALSE; XOR es el o-exclusivo que AND y OR no saben expresar. Aprende por qué NOT toma un solo argumento (así que debes escribir NOT(AND(...)) para compuestos), cuándo NOT es solo <> disfrazado, cómo la ley de De Morgan es su verdadero superpoder, y la sorpresa de XOR: con 3+ entradas devuelve TRUE cuando hay un número IMPAR de TRUE, no «exactamente uno».

Henry
Funciones IS en Excel — ISNUMBER, ISTEXT, ISBLANK, ISERROR e ISNA (protege una fórmula antes de que se rompa)

Funciones IS en Excel — ISNUMBER, ISTEXT, ISBLANK, ISERROR e ISNA (protege una fórmula antes de que se rompa)

La familia IS inspecciona una celda y devuelve TRUE/FALSE — clasifican, nunca transforman. Aprende por qué ISBLANK es más estricta que «parece vacía», por qué ISERROR oculta bugs reales mientras ISNA e IFNA son más seguras, por qué IF(ISERROR(x),…,x) calcula x dos veces, y la app estrella de ISNUMBER: convertir SEARCH en una prueba limpia de coincidencia parcial.

Henry
Función TEXTO de Excel — Da formato a un número como texto (y la trampa que impide sumarlo)

Función TEXTO de Excel — Da formato a un número como texto (y la trampa que impide sumarlo)

La función TEXTO convierte un número o una fecha en una cadena de texto con formato mediante un código de formato — =TEXT(1234.5,"$#,##0.00") da "$1,234.50". Aprende el modelo mental (incrustar un formato dentro de una cadena real vs el formato de número de una celda que solo afecta a la visualización), la trampa nº1 (el resultado es texto, así que SUMA lo ignora), el curso exprés de códigos de formato para números y fechas, los ceros a la izquierda y la configuración regional, y cuándo un formato de celda, CONCAT o REDONDEAR es la mejor herramienta.

Henry
Excel VALOR y VALORNUMERO — Convierte texto de nuevo en números que calculan

Excel VALOR y VALORNUMERO — Convierte texto de nuevo en números que calculan

VALOR interpreta una cadena de texto que parece numérica — "1,234.50" o "$9.00" — y la convierte en un número real que puedes sumar, ordenar y graficar. Es la inversa de TEXTO. Aprende el modelo mental, la causa nº1 en el mundo real (números guardados como texto tras una importación o un pegado), por qué VALOR sigue tu configuración regional del sistema y cómo VALORNUMERO arregla un "1.234,56" europeo, los arreglos más rápidos sin fórmula (*1, doble unario, Texto en columnas), y por qué el Excel moderno convierte algo de texto pero SUMA nunca lo hace.

Henry
Excel FECHANUMERO y HORANUMERO — Rescata fechas y horas atrapadas como texto

Excel FECHANUMERO y HORANUMERO — Rescata fechas y horas atrapadas como texto

Una fecha en Excel es en realidad un número de serie disfrazado con un formato de fecha; una fecha que llega como texto es un impostor que no se ordena, no se resta ni alimenta a SIFECHA. FECHANUMERO interpreta una fecha de texto y devuelve su número de serie, y HORANUMERO interpreta una hora de texto y devuelve una fracción de día. Aprende el modelo mental, los síntomas de las fechas de texto, la trampa de ambigüedad regional con 03/04/2026, cómo combinar fecha + hora, cuándo FECHANUMERO no puede interpretar una cadena, y las alternativas FECHA(IZQUIERDA,EXTRAE,DERECHA) y Texto en columnas.

Henry
Función INDIRECTO en Excel — Convierte texto en una referencia viva (y por qué es volátil)

Función INDIRECTO en Excel — Convierte texto en una referencia viva (y por qué es volátil)

INDIRECTO convierte una cadena de texto como "A1" o "Hoja2!B3" en una referencia de celda viva. Aprende el modelo mental, la trampa nº1 (el texto no se actualiza solo, así que renombrar una hoja rompe cada INDIRECTO con #REF!), por qué es volátil e invisible para el rastreador de dependencias de Excel, el problema del libro cerrado con #REF!, su gran uso estrella — leer de una hoja cuyo nombre está en una celda — y cuándo una Tabla, una referencia 3D o ELEGIR son la mejor herramienta.

Henry
Función DESREF en Excel — Una referencia que se mueve (y cuándo INDICE es mejor)

Función DESREF en Excel — Una referencia que se mueve (y cuándo INDICE es mejor)

DESREF devuelve una referencia a un número fijo de filas y columnas desde un ancla, opcionalmente redimensionada a un bloque completo. Aprende el modelo mental, por qué devuelve una referencia (no un valor) para poder alimentar a SUMA, el coste de la volatilidad, el clásico truco del rango dinámico con nombre y por qué una Tabla o un rango de derrame ahora lo superan, la trampa de #REF! al salirse del borde, y la decisión de criterio clave: usa INDICE no volátil para indexar en un rango, y reserva DESREF solo para ventanas que de verdad se mueven.

Henry
Función DIRECCION en Excel — Construye la dirección de una celda como texto (no su valor)

Función DIRECCION en Excel — Construye la dirección de una celda como texto (no su valor)

DIRECCION construye el texto de una dirección de celda — =DIRECCION(1,1) devuelve la cadena "$A$1", no lo que hay en A1. Aprende el modelo mental (es lo opuesto al lado de entrada de INDIRECTO), el malentendido nº1 de que devuelve texto y no un valor, el argumento abs_num para bloquear con $, por qué NO es volátil a diferencia de INDIRECTO y DESREF, los trabajos reales — informar dónde está un valor mediante COINCIDIR y construir referencias para INDIRECTO — y una opinión honesta sobre lo de nicho que es en el Excel moderno.

Henry
Función SUMPRODUCT en Excel: multiplicar y luego sumar, y las condiciones que SUMIFS no puede hacer

Función SUMPRODUCT en Excel: multiplicar y luego sumar, y las condiciones que SUMIFS no puede hacer

SUMPRODUCT multiplica matrices elemento a elemento y suma los resultados: una celda, un producto escalar. Aprende la trampa del #VALUE! por dimensiones distintas, por qué se multiplican matrices booleanas para el Y y se suman para el O (nunca AND()/OR()), cuándo hace falta el doble negativo --, y los cálculos de total ponderado y O entre columnas que SUMIFS todavía no puede tocar.

Henry
Función SUBTOTAL en Excel: totales que respetan tu filtro (y la trampa del 9 frente al 109)

Función SUBTOTAL en Excel: totales que respetan tu filtro (y la trampa del 9 frente al 109)

SUBTOTAL es un total que entiende los filtros: se salta las filas que un filtro ha ocultado, así que el número del final de tu lista se actualiza a medida que filtras. Aprende la tabla de function_num, la trampa del 1–11 frente al 101–111 (por qué ocultar filas a mano no cambia tu total), por qué SUBTOTAL ignora otros SUBTOTAL para que los totales generales nunca cuenten doble, y por qué no puede saltarse errores — el trabajo para el que se creó AGGREGATE.

Henry
Función AGGREGATE en Excel: el superconjunto de SUBTOTAL que además ignora errores

Función AGGREGATE en Excel: el superconjunto de SUBTOTAL que además ignora errores

AGGREGATE es SUBTOTAL con dos mejoras: 19 funciones en lugar de 11, y un argumento options que le permite ignorar valores de error, filas ocultas y totales anidados. Aprende la rejilla de function_num + options, su truco más desaprovechado — sumar una columna que contiene #N/A sin ninguna limpieza con IFERROR — y las funciones de tipo matriz (LARGE, SMALL, PERCENTILE) que necesitan un argumento k extra.

Henry
Función ROUND de Excel — ROUND, ROUNDUP y ROUNDDOWN (y por qué dar formato no es redondear)

Función ROUND de Excel — ROUND, ROUNDUP y ROUNDDOWN (y por qué dar formato no es redondear)

ROUND cambia el valor almacenado a un número concreto de decimales; el formato de celda solo cambia cómo se ve. Aprende por qué esa diferencia hace que los totales de una factura se desvíen un céntimo, el truco de num_digits (positivo, cero, negativo), en qué se diferencian ROUNDUP y ROUNDDOWN de ROUND, y por qué redondean según la distancia al cero, no hacia arriba y hacia abajo.

Henry
Excel INT, TRUNC y MOD — Quita el decimal y encuentra el resto

Excel INT, TRUNC y MOD — Quita el decimal y encuentra el resto

INT y TRUNC quitan los decimales, pero INT redondea hacia menos infinito mientras que TRUNC simplemente corta hacia el cero, así que se separan con los números negativos. MOD devuelve el resto y, en Excel, el resto toma el signo del divisor, no el del número. Aprende la trampa del desfase de uno, cómo separar fechas de horas y el patrón de filas con bandas.

Henry
Función IF en Excel — Una sola bifurcación sí/no, y cuándo dejar de anidar

Función IF en Excel — Una sola bifurcación sí/no, y cuándo dejar de anidar

IF hace una sola pregunta de sí/no y devuelve una de dos respuestas. Aprende por qué un tercer argumento ausente muestra FALSE, por qué las pirámides de IF anidados se desmoronan pasados los dos niveles (usa IFS o una búsqueda en su lugar), cómo combinar condiciones con AND/OR en vez de anidar, y por qué la comparación de texto de IF ignora mayúsculas y minúsculas.

Henry
Funciones IFS y SWITCH en Excel — Lógica de varias vías sin la pirámide de IF anidados

Funciones IFS y SWITCH en Excel — Lógica de varias vías sin la pirámide de IF anidados

IFS comprueba una lista de condiciones de arriba abajo y devuelve la primera coincidencia; SWITCH compara un valor contra una lista de casos. Aprende las dos trampas que causan casi todos los errores — IFS no tiene un else integrado (un default omitido devuelve #N/A) y gana la primera coincidencia, así que el orden importa — además de cuándo usar IFS frente a SWITCH frente a una tabla de búsqueda.

Henry