Cuando necesite seleccionar datos en una hoja de trabajo de Excel, puede utilizar el método Select del objeto Range para una solución rápida, pero la referenciación implícita le permitirá escribir un código más eficiente y mantenible.
Cuando se trabaja en Excel, se seleccionan muchas celdas y rangos. A menudo, puede automatizar parte de su trabajo utilizando macros simples. El grabador de macros puede ayudarle a empezar, pero el grabador utiliza referencias explícitas que pueden ser difíciles de mantener y mejorar. En este artículo, revisaremos las tareas de selección utilizando el método Select (la preferencia del grabador. A continuación, veremos cómo hacer referencia al objeto Range para lograr lo mismo de forma más eficiente.
No hay nada malo en usar Select; es directo y fácil. Sin embargo, a medida que su código y sus habilidades crecen, encontrará que el código Select-less se ejecuta más rápido y es más fácil de actualizar.
Más información sobre Office
Estoy trabajando en Excel 2019 en un sistema Windows 10 de 64 bits. Los archivos descargables.xlsm y.xlsm contienen varias macros simples usando las frases discutidas en este artículo.
APRENDA MÁS: Precios y características de Office 365 Consumer
Acerca del objeto Range
El objeto Rango de Excel representa una o más celdas y proporciona un acceso programático fácil a las celdas y rangos que necesita para tareas comunes como por ejemplo:
- Inserción de valores
- Referenciar una celda o rango
- Seleccionar una celda o rango
- Copiar o mover el contenido de una celda o rango
- Formatear una celda o rango
- Looping o búsqueda dentro de un rango
Este objeto tiene en cuenta tanto las selecciones explícitas como las implícitas. Para obtener más información sobre las propiedades y los métodos del objeto Range, visite Propiedades de Range y Métodos de Range, respectivamente.
VER: Curso acelerado: Microsoft Excel (Tech Pro Research)
Selección explícita
Tal vez la forma más fácil (pero no necesariamente la más eficiente) de seleccionar una celda o rango utiliza el método Select del objeto Range en el siguiente formulario:
Rango(referencia,[referencia]) Seleccione
El argumento de referencia es extremadamente flexible porque acomoda una sola celda, celdas no contiguas, un rango y rangos no contiguos.
La Tabla A muestra la versatilidad del argumento de referencia del objeto Range.
Cuadro A
El patrón es fácil de ver: Todas las referencias están envueltas en un único conjunto de comillas y cada referencia se separa de las demás con un carácter de coma.
El método Select mueve activamente la selección a la celda o rango referenciado. Una vez allí, puedes hacer mucho. Por ejemplo, es posible que desee introducir datos, añadir o cambiar el formato, o incluso hacer un bucle a través de las celdas del rango. Veamos un par de ejemplos simples:
Sub ExplicitSelectCell()'Seleccione una celda específica e ingrese el valor.Range("A1".SelectActiveCell.Value = "This is A1.End SubSub ExplicitSelectNonCCells()'Seleccione celdas no contiguas y establezca el color de fuente en rojo.Range("A1, C2, D1, E4".SelectSelection.Font.Color = vbRedEnd Sub.
El primer procedimiento selecciona explícitamente la celda A1 antes de introducir la cadena «This is A1.» El segundo procedimiento selecciona explícitamente cuatro celdas no contiguas antes de establecer el color de la fuente. Ambos cambian la selección actual antes de tomar acción en esa selección. (Es importante notar que esta sintaxis asume la hoja activa, la cual está implícita en el objeto Range.)
Como puede ver, la selección explícita es ciertamente fácil. La selección explícita es también, casi siempre, innecesaria. Aprender a reescribir tu código para usar la selección implícita es una de las maneras más fáciles de escribir código más eficiente. No es necesario, pero hacer el cambio hará que su conjunto de habilidades suba una muesca o dos.
Selección implícita
Investigue un poco y descubrirá que los desarrolladores serios se oponen a Select debido a su selección inherentemente directa. A pesar de la facilidad de uso y la flexibilidad de Select, el resultado es una macro que repite exactamente la misma acción. Eso está bien si es todo lo que necesitas, y no defiendo trabajar más de lo necesario. Sin embargo, no se puede argumentar que trabajar con objetos es superior porque se puede actuar sin cambiar la selección actual. Por ejemplo, se pueden sustituir estas dos expresiones:
Seleccione Valor de celda activa = "Esto es A1.
con uno:
Rango ("A1". Valor = "Esto es A1".
Excel introduce la cadena «This is A1» en la celda A1 sin cambiar la selección actual, que es la mejor opción. Es cierto que reducir dos frases a una no parece un gran problema. Pero una vez que apliques esta guía a todo tu código, empezarás a ver por qué es importante.
Veamos una tarea de looping simple utilizando tanto la selección explícita como la implícita. Ambos usan un bucle For para introducir los valores del 1 al 5 en B2:B6 pero el primero mueve la selección actual y el segundo no.
El siguiente procedimiento utiliza Seleccionar para seleccionar explícitamente B2:
Sub ExplicitSelectLoop() 'Bucle a través de las celdas introduciendo valores. Dim i Como rango entero ("B2".Select For i = 1 a 5 Selection.Value = i ActiveCell.Cells(2.Select Next iEnd Sub
Este segundo procedimiento utiliza un enfoque de objeto, que no cambia la selección:
Sub ImplicitObjectLoop() 'Bucle a través de las celdas introduciendo valores. Dim wkb As Workbook Dim rng As Range Dim i As Integer Set wkb = ActiveWorkbook Set rng = wkb.Worksheets(1.Range("B2") For i = 1 to 5 rng.Offset(i.Value = i Next iEnd Sub
Puede que te preguntes cómo el enfoque de objeto, que yo afirmo que es superior, es mejor cuando tiene más líneas de código. ¿Cómo puede ser mejor? Las líneas adicionales son declaraciones; el código de trabajo en el bucle Para es más corto. De hecho, no necesitas las declaraciones, pero te recomiendo que las incluyas de todos modos.
Eliminar dos selecciones activas parece insignificante, pero en general, se suma. El código objeto es más rápido y ordenado porque hace menos impactos en el objeto Range. La declaración lo define una vez y ya está.
Implícito es superior
En un ejemplo corto y artificioso, es difícil ver claramente las ventajas de evitar Select, y francamente, no recomendaría que se moleste si lo único que necesita es una macro rápida. Sin embargo, a medida que amplíe su trabajo de VBA, verá que evitar Select hace que la codificación extendida sea más rápida y fácil de mantener.
Envíenme sus preguntas sobre Office
Respondo a las preguntas de los lectores cuando puedo, pero no hay garantía. Cuando se ponga en contacto conmigo, sea lo más específico posible. Por ejemplo, «Please troubleshoot my workbook and fix what’s wrong» probablemente no obtendrá respuesta, pero «Can you tell me why this formula is’ t returning the expected results? Por favor, menciona la aplicación y la versión que estás usando. No envíe archivos a menos que se le solicite; las solicitudes iniciales de ayuda que lleguen con archivos adjuntos se eliminarán sin leer. ConsejoTecnologico.com no me reembolsa por mi tiempo o experiencia en ayudar a los lectores, ni tampoco pido una cuota a los lectores a los que ayudo. Puede ponerse en contacto conmigo en susansalesharkins@gmail.com.
Boletín semanal de Microsoft
Conviértase en un experto en Microsoft de su empresa con la ayuda de estos tutoriales de Windows y Office y de los análisis de nuestros expertos sobre los productos empresariales de Microsoft. Entregado Lunes y Miércoles
Divulgación de información sobre los afiliados: ConsejoTecnologico.com puede ganar una comisión por los productos y servicios que aparecen en esta página.