Cómo intercambiar rangos fácilmente en Excel (1 clic)

Índice
  1. Cuándo intercambiar rangos
  2. código VBA
  3. Usando el código VBA
  4. Adaptando el código a tus necesidades
  5. Conclusión

Copiar, pegar y mover celdas son tareas cotidianas sencillas para los usuarios de Excel. ¿Pero qué pasa si algo ya ocupa el área donde queremos pegar? Debemos realizar la operación aleatoria mover-mover-mover moviendo algo a una ubicación temporal antes de colocar todo en su destino final. ¿No sería mejor si hubiera una forma sencilla de intercambiar rangos en Excel? ¿No sería mejor simplemente seleccionar los rangos y hacer clic en un botón? Sí, lo sería, y eso es lo que estamos cubriendo en esta publicación.

Tabla de contenido
  • Cuándo intercambiar rangos
  • código VBA
  • Usando el código VBA
  • Adaptando el código a tus necesidades
  • Conclusión

Descargue el archivo de ejemplo: haga clic en el botón a continuación para unirse al programa Insiders y obtener acceso al archivo de ejemplo utilizado para esta publicación.

Nombre del archivo: 0180 rangos de intercambio VBA.xlsm

Tener acceso

Cuándo intercambiar rangos

Este es un escenario con el que estoy seguro se puede identificar. Ha recibido un libro de trabajo que se utiliza en una presentación. Sin embargo, usted (o su gerente) desea presentar los elementos en un orden diferente.

Intercambiar rangos en Excel - 1 clic

Podrías comenzar con la combinación movimiento-movimiento-movimiento. Alternativamente, si el siguiente código VBA está disponible en su Libro de macros personal, puede simplemente seleccionar los rangos y ejecutar la macro.

código VBA

Pegue el siguiente código en un módulo de código estándar de su Libro de macros personal.

Para que el código sea más reutilizable, agregue un botón a su cinta o barra de herramientas de acceso rápido; entonces está a sólo un clic de distancia.

Sub SwapSelectedRanges()'Set up the macroApplication.DisplayAlerts = FalseApplication.ScreenUpdating = False'Create variables to hold the rangesDim rng As RangeDim temp1Ws As WorksheetDim temp2Ws As WorksheetDim temp1Rng As RangeDim temp2Rng As Range'Get the selected rangesSet rng = Selection'There must be two areas selectedIf rng.Areas.Count  2 Then    MsgBox "Please select two ranges."    GoTo CleanUpEnd If'All areas must be the same sizeIf rng.Areas(1).Rows.Count  rng.Areas(2).Rows.Count Or _    rng.Areas(1).Columns.Count  rng.Areas(2).Columns.Count Then    MsgBox "All ranges must have the same number of rows and columns."    GoTo CleanUpEnd If'Check that ranges don't intersect with each otherIf Not Intersect(rng.Areas(1), rng.Areas(2)) Is Nothing Then    MsgBox "Selected areas must not overlap."    GoTo CleanUpEnd If'Create temporary sheet for moving valuesOn Error Resume NextSet temp1Ws = ThisWorkbook.Sheets.AddSet temp2Ws = ThisWorkbook.Sheets.AddIf Err.Number  0 Then    MsgBox "Unable to create a temporaray worksheet for moving cells."    GoTo CleanUpEnd IfOn Error GoTo 0'Create a temporary rangeSet temp1Rng = temp1Ws.Range("A1").Resize(rng.Areas(1).Rows.Count, rng.Areas(1).Columns.Count)Set temp2Rng = temp2Ws.Range("A1").Resize(rng.Areas(2).Rows.Count, rng.Areas(2).Columns.Count)'Perform the swapOn Error Resume Nextrng.Areas(1).Copy Destination:=temp1Rngrng.Areas(2).Copy Destination:=temp2Rngtemp1Rng.Copyrng.Areas(2).PasteSpecial Paste:=xlPasteAlltemp2Rng.Copyrng.Areas(1).PasteSpecial Paste:=xlPasteAllIf Err.Number  0 Then    'Error occured, so restore previous ranges and clean up    temp1Rng.Copy Destination:=rng.Areas(1)    temp2Rng.Copy Destination:=rng.Areas(2)    MsgBox "Unable to swap the selected ranges"    GoTo CleanUpEnd If'Clean up and resetCleanUp:On Error Resume Nexttemp1Ws.Deletetemp2Ws.DeleteOn Error GoTo 0Application.DisplayAlerts = TrueApplication.ScreenUpdating = Truerng.SelectEnd Sub

Usando el código VBA

La macro es fácil de usar:

  1. Seleccione el primer rango
  2. Mantenga presionado Ctrl, seleccione el segundo rango
  3. Ejecute la macro

¡Hecho! Eso es todo, ¡qué fácil fue eso!

Al utilizar la macro, hay algunas cosas que debes tener en cuenta:

  • El código requiere que se seleccionen dos rangos separados.
  • Los dos rangos deben tener el mismo tamaño (es decir, contener el mismo número de filas y columnas).
  • El intercambio de rango incluye columnas o filas ocultas.
  • El formato también se intercambia como parte del rango.
  • El libro que contiene la macro debe estar desbloqueado para crear una ubicación temporal en una nueva hoja de trabajo.
  • El código solo funciona en rangos que existen en la misma hoja de trabajo.

Adaptando el código a tus necesidades

¿Qué pasa si no quieres cambiar todo lo que hay en la gama? Por ejemplo, es posible que desee intercambiar valores pero no formatos.

Es sencillo cambiar la macro anterior para más escenarios.

Cambie el código xlPasteAll por uno de los siguientes:

  • xlPasteFormulasAndNumberFormats : intercambia valores y fórmulas, manteniendo el formato de número pero no el resto de formato de celda.
  • xlPasteValuesAndNumberFormats : intercambia valores y fórmulas codificadas, manteniendo el formato numérico pero no otros formatos de celda.
  • xlPasteFormats : intercambia solo los formatos de celda; los valores y fórmulas no se mueven.
  • xlPasteFormulas : intercambia valores y fórmulas únicamente, el formato no se mueve.
  • xlPasetValues : intercambia valores y codifica fórmulas, el formato no se mueve.

Puede encontrar una lista de otros tipos aquí: https://learn.microsoft.com/en-us/office/vba/api/excel.xlpastetype

Conclusión

En lugar de utilizar la función aleatoria mover-mover-mover, agregue la macro VBA en esta publicación a su Libro de macros personal para intercambiar fácilmente rangos en Excel con 1 clic.

Artículos Relacionados

  • Cómo agregar un prefijo o sufijo a cada celda usando VBA
  • Distribuya un valor entre celdas con VBA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir

Este sitio web utiliza cookies para mejorar la experiencia del usuario y garantizar un funcionamiento eficiente. Al utilizar nuestro sitio web, aceptas todas las cookies de acuerdo con nuestra política de cookies. Leer mas...