Copie la hoja de cálculo de Excel y mantenga la referencia de celda relativa en las fórmulas

41

Otro problema de copia en Excel:

¿Cómo puedo copiar una hoja de trabajo de WorkbookA.xlsx en WorkbookB.xlsx sin que la hoja de trabajo copiada siga haciendo referencia a WorkbookA.xlsx, por ejemplo, la fórmula se =B!23convierte =[WorkbookA.xlsx]!B!23cuando se copia?

Quiero mantener referencias de celda "relativas" en lugar de referencias de celda "absolutas" (inventaré esta terminología en el mundo de Excel si aún no existe).

Otra alternativa posible que no puedo hacer que funcione es la opción de pegar solo "valores" de celda. Excel trata los "valores" como valores calculados en lugar de las fórmulas reales en la celda. Si elijo la fórmula de pegar, todavía da referencias absolutas.

Más información acerca de por qué necesito esto: Tengo un xlsx de producción en uso para las operaciones diarias. Necesitamos constantemente hacer "actualizaciones" a este xlsx, por lo que una persona puede crear una copia y sus cambios allí para una sola hoja. Al mismo tiempo, otra persona también puede estar haciendo cambios a otra hoja. Dado que estas hojas no tienen celdas dependientes en otras hojas , como un informe resumido, es conveniente para nosotros copiar y fusionar las hojas nuevamente en el xlsx original. Pero la referencia "absoluta" está dando muchos problemas.

Jake
fuente
Estoy un poco confundido. Desea copiar la hoja 1 de WBA en WBB y desea que copie las fórmulas relativas a WBB en lugar de WBA. Esto no es posible a menos que la hoja WBB 2 sea idéntica a la hoja WBA 2. ¿Es ese el caso? Además, si solo desea valores , puede copiar la hoja select all - copy - paste special - valuespara que solo tenga valores. Si desea hacerlo todo durante la copia en lugar de confiar en que el usuario final realice esos pasos, bueno, he estado trabajando en eso. Háganos saber exactamente cómo quiere que vaya en términos de WorkbookA (o 1) y WBB (2) y la hoja #s
Raystafarian
Ya intenté explicarlo en mi último párrafo, pero creo que aún no estaba claro. Sí, WBA y WBB son idénticos para una hoja en WBA. Al diseñar esa hoja en WBA, se pretende que todas las referencias de celda sean relativas al libro de trabajo de la hoja. La función de copia de la hoja de trabajo agrega todas las fórmulas de celda con WBA, lo que lo hace "absoluto" y no quiero eso.
Jake
los valores especiales de pegar solo pegan los valores calculados. Necesito copiar las fórmulas, sin agregar WBA.xls.
Jake
Ok, estoy claro. Publicaré una respuesta si / cuando lo resuelva
Raystafarian
¿No puede simplemente hacer una copia de todo el libro de trabajo y luego eliminar lo que no necesita de la nueva copia?
disminuye el

Respuestas:

21

Intente usar Ctrl+ ~para mostrar las fórmulas. Luego use Ctrl+ Apara seleccionar todo, cópielo y luego péguelo en el bloc de notas.

Finalmente, cópielo del bloc de notas y péguelo en su otro libro de trabajo.

SVandenBerg
fuente
1
@Jake: Pero has dicho que tu libro tiene botones, menús desplegables y demás ; y rangos con nombre. Esta técnica no los copiará (o cosas mundanas como el formateo): ¿cómo / por qué lo considera aceptable?
Scott
En una hoja de trabajo grande, la técnica Editar enlaces / Cambiar fuente fue muy lenta, pero rápida.
Tony Pulokas
24

Me ha resultado más fácil, en muchos casos, hacer lo siguiente:

  • copiar la hoja a un nuevo libro de trabajo
  • activar la nueva hoja en el nuevo libro de trabajo
  • seleccionar todo ( Ctrl+ A)
  • hacer una búsqueda / reemplazar en
    • encontrar: [WorkbookA.xlsx]!
    • reemplazar: <dejar en blanco>
  • reemplaza todo
Yoheeb
fuente
11

La respuesta sin firmar justo debajo de esta es la que funcionó para mí, con una variación muy leve.

  1. Crea y guarda una hoja de cálculo de destino.

  2. Use "mover", "copiar" o arrastre su página con las fórmulas a la nueva hoja de cálculo. Esto deja las fórmulas en la nueva página apuntando a la hoja de trabajo anterior. Luego guarde la nueva hoja de cálculo en la misma ubicación que la hoja de trabajo anterior.

  3. Luego vaya a la pestaña Datos> haga clic en Editar enlaces. La opción no estará activa a menos que haya enlaces en la página.

  4. En el cuadro de diálogo que aparece, seleccione el nombre del archivo fuente y haga clic en "Cambiar fuente".

  5. En el cuadro de diálogo de archivo abierto que aparece a continuación, seleccione el nombre de la nueva hoja de cálculo.

Haga clic en Cerrar y habrá terminado.

Pete
fuente
9

O simplemente haga lo siguiente:

Convierte esto:

=database_feed!A1

a esto:

=INDIRECT("database_feed!A1")

y no más cambios en sus referencias cuando copia entre hojas de trabajo.

Si no tiene muchas hojas referenciadas, otra alternativa sería usar

=INDIRECT("'"&B1&"'!A1")

e ingrese el nombre de la hoja de referencia en la celda B1. Ahora solo tiene una celda para actualizar cuando se copia a la nueva hoja de cálculo.

Jason Higbee
fuente
1
Buena idea, funciona si tiene una hoja de plantilla con fórmulas y está copiando esto en un nuevo libro de trabajo con VBA. Descubrí que debe mantener la referencia entre comillas y agregar VERDADERO para mantener las referencias de tipo A1. p.ej. = INDIRECTO ("'Sheet1'! A1", VERDADERO)
RogerB
2
INDIRECTes una fórmula volátil, por lo que se volverá a calcular cada vez (en lugar de solo cuando se edite), lo que realmente puede ralentizar los libros de trabajo más complejos, así que úselo con precaución
Andy Terra,
3

El siguiente código se puede adaptar a sus necesidades. Toma todas las fórmulas de la hoja wb1y las aplica a una hoja en un nuevo libro de trabajo. Las fórmulas se aplican como Strings, por lo que no hay inserción de referencias al libro de trabajo original. Además, este código es súper rápido porque no usa el portapapeles y no requiere ningún bucle a través de las celdas.

Sub copyformulas()

Dim wb1 As Workbook, wb2 As Workbook
Dim s1 As Worksheet, s2 As Worksheet
Dim formArr() As Variant

Set wb1 = ThisWorkbook
Set s1 = wb1.Sheets("Sheet1")
Set wb2 = Workbooks.Add
Set s2 = wb2.Sheets("Sheet1")

formArr = s1.UsedRange.Formula
s2.Range("A1").Resize(UBound(formArr, 1), UBound(formArr, 2)).Formula = formArr

End Sub
Excellll
fuente
3

Dado que el 99% de las respuestas ni siquiera abordaron la pregunta original, aquí está la respuesta adecuada.

  1. Copie las hojas del archivo original (Original.xlsx) al nuevo archivo de Excel (New.xlsx) como lo haría normalmente. Generalmente, hago clic derecho en el nombre y elijo "Mover o Copiar ...".

  2. Guarde el segundo archivo recién creado (New.xlsx).

  3. En el nuevo archivo, en Datos, haga clic en "Editar enlaces"

  4. En la ventana emergente, elija "Cambiar fuente ..."

  5. Localice el archivo (New.xlsx) y haga clic en Abrir.

Se eliminarán todas las referencias al original (Original.xlsx).

¡HECHO!

David
fuente
Debería estar más arriba en la lista de respuestas
sabre23t
2
  • copiar la hoja de trabajo a 'WorkbookB.xlsx'
  • abrir hoja de trabajo en el nuevo archivo
  • seleccionar todo
  • vaya al menú Datos, haga clic en editar enlaces
  • editar enlaces para que el enlace al archivo anterior sea ahora un enlace al archivo abierto actualmente

Esto funciona para mi.

usuario259817
fuente
0

Ambos libros de trabajo deben estar abiertos para que esto funcione . Ejecuta esta macro y copiará workbookA!sheet1 workbookB!sheet1y luego reemplazará todas las workbookAreferencias. Es crudo, pero funciona . Obviamente, puede cambiar el código para que coincida con sus nombres WorkbookA.xlsx, pero asegúrese de que tengan la extensión correcta y que permanezcan entre comillas.

Ah, para hacer una macro, en caso de que no lo sepas, presiona alt + F11para abrir el Editor de Visual Basic. Luego haga clic derecho en WBA insert - moduley copie y pegue el siguiente código en el módulo. Luego presione F5para ejecutar la macro. Si la macro no se ejecuta, probablemente sea porque las macros no están habilitadas, así que adelante, guárdelo y vuelva a abrirlo, y cuando se le solicite habilitar macros, actívelas.

Sub copysheetremoveWBref()

    Application.ScreenUpdating = False

    'activate WBA
    Application.Workbooks("workbooka.xlsx").Activate
    'Select WBA Sheet1
    Application.Workbooks("workbooka.xlsx").Sheets("Sheet1").Select
    'copy WBA!sheet1 to WBB!sheet1
    Sheets("Sheet1").copy Before:=Workbooks("WorkbookB.xlsx").Sheets("sheet2")
    'find WBA references and remove them
    Cells.Replace What:="=[workbookA.xlsx]", Replacement:="=", LookAt:=xlPart _
        , SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

    Application.ScreenUpdating = True


End Sub
Raystafarian
fuente
1
Una sola rutina es agradable, ya que CTRL+Hahora estoy manualmente , pero todo esto no repara las referencias para los controles, por ejemplo, botones, menús desplegables y demás; y rangos con nombre.
Jake
0

Logré esto copiando las celdas a la nueva hoja de trabajo de forma normal, luego buscando y reemplazando para eliminar la ruta del archivo anterior en las fórmulas.

Por ejemplo, si la primera fórmula es =J2y esto se convierte =[filepath]J2, entonces solo busque y reemplace toda la nueva hoja de cálculo [filepath]y reemplácela por nada. Esto lo elimina y restaura la fórmula a =J2.

¡No se requiere VB!

cdpinker
fuente
Lamentablemente, Excel parece funcionar solo de manera intermitente cuando se trata de encontrar subcadenas dentro de las fórmulas: /. Tampoco parece ser capaz de encontrar nada con comillas simples.
Douglas Gaskell
0

Estaba teniendo un problema similar La razón por la que las fórmulas se pegaron con el enlace a WBA fue que la pestaña (hoja) en la que estaba trabajando en WBA se llamaba de manera diferente a la de WBB. Para mí, siempre fue "la última hoja", pero una se llamaba 'MinFlow' y la otra se llamaba 'NormalFlow'. Cambié el nombre de ambos a 'Resultados' y la copia / pegado funcionó como quería: un "pegado relativo".

Janet
fuente
0

Seleccione las celdas que desea mover. Ahora intente moverlos arrastrando y soltando a una hoja de trabajo diferente (pestaña diferente).

Lo sé, se desplaza. Aquí está la parte difícil: simplemente presione cmd (mac) o alt (win) y le permitirá colocar las celdas en otra pestaña.

Andy Abel
fuente
¿Puedes ampliar un poco tu respuesta? No está claro cómo / dónde colocar en otra pestaña mientras se arrastra. Gracias.
Fixer1234
0

Hola, aquí hay una solución simple para este problema:

  1. Copie sobre las celdas como de costumbre.
  2. En la fórmula, seleccione y copie el texto que lo vincula al libro anterior [WorkbookA.xlsx].
  3. Seleccione todas las celdas que desea cambiar y presione CTRL+Fy seleccione la pestaña reemplazar.
  4. Reemplace [WorkbookA.xlsx] con un espacio vacío (es decir, no escriba nada en el Replace withcampo, presione Replace All.

Voila, está hecho.

Niklas
fuente
0

Otro 'truco': antes de copiar la hoja de trabajo de origen, reemplace todos los calificadores de fórmula =con otro conjunto de caracteres (digamos ###=).

Copie la hoja de trabajo, luego, después de copiar, reemplace el calificador de fórmula (reemplazando ###=con =).

Asegúrese de que las referencias de las hojas dentro de los formularios también se copien en la nueva hoja antes de la hoja de referencia.

Tamer Salama
fuente
0
  1. Copie la hoja como de costumbre. (haga clic derecho en la pestaña y vaya a 'mover o copiar') Esto es para formatear.

  2. Copie todas las celdas de la hoja original (usando Ctrl+ Ao triángulo superior izquierdo y Ctrl+ C)

  3. Pegar como valores en el nuevo libro de trabajo (sobre la hoja "paso-1") (Opciones de pegado> 123)

eru
fuente
0

Si necesita hacer esto automáticamente porque está extrayendo hojas en un programa VBA. Utilizar esta:

Public Sub ChangeSource()
'
' ChangeSource Macro
' Edit the links to point to the current workbook.
'
    Dim allLinks As Variant
    allLinks = ThisWorkbook.LinkSources(xlExcelLinks)
    If Not IsEmpty(allLinks) Then
        Dim eachLink As Long
        For eachLink = 1 To UBound(allLinks)
            If InStr(3, "String found in source book name.", allLinks(eachLink)) Then
                ThisWorkbook.ChangeLink Name:=allLinks(eachLink), NewName:=ThisWorkbook.FullName, Type:=xlExcelLinks
            End If
        Next eachLink
    End If
End Sub

Simplemente cambie "Cadena encontrada en el nombre del libro fuente". para que coincida con los enlaces antiguos que desea reemplazar. Puede eliminar ese bloque si desea reemplazar todos los enlaces.

HackSlash
fuente
-1

Abra ambos libros de trabajo. En el libro de trabajo de origen (WorkbookA.xlsx), seleccione la hoja que desea copiar. Haga clic derecho en la pestaña de la hoja y seleccione "Mover o Copiar ...". En el cuadro de diálogo "Mover o copiar", seleccione "WorkbookB.xlsx" en el menú desplegable "Al libro", elija en qué lugar del libro desea colocarlo y marque "Crear una copia". (Y haga clic en "Aceptar").

Scott
fuente
-1

Haga una copia de la hoja de la que desea mover las hojas, en este caso sería WorkbookA.xlsx. Cambie el nombre para que diga "Copia de WorkbookA.xlsx". Ahora abra este nuevo libro de trabajo, así como el libro de trabajo al que desea mover la hoja, que en este caso sería WorkbookB.xlsx. Haga clic con el botón derecho en las hojas del libro de copias que creó, es decir, Copia de WorkbookA.xlsx y seleccione 'mover o copiar' y luego mueva estas hojas a WorkbookB.xlsx. Estás listo !

Nishant
fuente
No está claro cómo su respuesta resuelve el problema de la pregunta. ¿Por qué mover funcionará de manera diferente que la copia funcionaría?
Máté Juhász
Intenté su solución propuesta y no funciona. No hay diferencia entre copiar y mover hojas enteras.
nixda