Copiar planilha do Excel e manter referência de célula relativa em fórmulas


35

Outro problema de cópia no Excel:

Como posso copiar uma planilha do Workbook.xlsx para o Workbook.xlsx sem que a planilha copiada ainda faça referência ao WorkbookA.xlsx, por exemplo, a fórmula =B!23 torna-se =[WorkbookA.xlsx]!B!23 quando copiado.

Eu quero manter referências de célula "relativas" em vez de referências de célula "absoluta" (vou inventar esta terminologia no mundo do Excel se ainda não existe).

Outra alternativa possível que não consigo fazer funcionar é a opção de colar apenas "valores" de células. Excel trata "valores" como valores calculados em vez das fórmulas reais na célula. Se eu escolher a fórmula de colar, ela ainda fornece referências absolutas.

Mais sobre por que eu preciso disso: Eu tenho um xlsx de produção em uso para operações diárias. Nós constantemente precisamos fazer "atualizações" para este xlsx e então uma pessoa pode criar uma cópia e suas alterações para uma única folha. Ao mesmo tempo, outra pessoa também pode estar fazendo alterações em outra planilha. Dado que estas folhas não têm células dependentes em outras folhas Como um relatório de resumo, é desejável que apenas copiemos e mesclamos as folhas de volta ao xlsx original. Mas a referência "absoluta" está causando muitos problemas.


Estou meio confuso. Você deseja copiar a planilha 1 do WBA para o WBB e deseja copiar as fórmulas relativas ao WBB em vez do WBA. Isso não é possível a não ser que A folha 2 do WBB é idêntica à folha WBA 2. É esse o caso? Além disso, se você quer apenas valores você pode copiar a folha select all - copy - paste special - values ter apenas valores. Se você quiser fazer tudo isso durante a cópia, em vez de confiar no usuário final para realizar essas etapas, bem, eu tenho trabalhado nisso. Deixe-nos saber exatamente como você quer ir em termos de WorkbookA (ou 1) e WBB (2) e as folhas #s
Raystafarian

Eu já tentei explicar no meu último parágrafo, mas acho que ainda não estava claro. Sim, o WBA e o WBB são idênticos esperados para uma planilha no WBA. Ao projetar essa folha no WBA, pretende-se que toda referência de célula seja relativa à pasta de trabalho da planilha. A função de planilha de cópia anexa todas as fórmulas de célula com o WBA, tornando-a "absoluta" e eu não quero isso.
Jake

os valores especiais de colar colam apenas os valores calculados. Eu preciso que as fórmulas sejam copiadas, SEM WBA.xls anexadas.
Jake

Ok, eu estou claro. Vou postar uma resposta se / quando eu descobrir
Raystafarian

Você não pode simplesmente fazer uma cópia de toda a pasta de trabalho e, em seguida, excluir o que você não precisa da nova cópia?
dwolters

Respostas:


20

Tente usar Ctrl + ~ para exibir as fórmulas. Então use Ctrl + UMA para selecionar tudo, copie-o e cole-o no bloco de notas.

Por fim, copie-o do bloco de notas e cole-o em sua outra pasta de trabalho.


1
@Jake: Mas você disse que sua pasta de trabalho possui botões, menus suspensos e outros; e intervalos nomeados. Esta técnica não as copia (ou coisas mundanas como formatação) - como / por que você considera isso aceitável?
Scott

22

Achei mais fácil, em muitos casos, fazer o seguinte:

  • copiar a folha para uma nova pasta de trabalho
  • ativar a nova planilha na nova pasta de trabalho
  • selecionar tudo ( Ctrl + UMA )
  • fazer um encontrar / substituir
    • encontrar: [WorkbookA.xlsx]!
    • substituir: & lt; deixe em branco & gt;
  • substitua tudo

10

A resposta não assinada logo abaixo desta é a que funcionou para mim, com uma pequena variação.

  1. Crie e salve uma planilha de destino.

  2. Use "mover", "copiar" ou arraste sua página com as fórmulas para a nova planilha. Isso deixa as fórmulas na nova página apontando para a planilha antiga. Em seguida, salve a nova planilha no mesmo local da planilha antiga.

  3. Em seguida, vá para a guia "Dados" & gt; clique em Editar Links. A opção não estará ativa a menos que haja links na página.

  4. Na caixa de diálogo resultante, selecione o nome do arquivo de origem e clique em "Alterar origem".

  5. Na caixa de diálogo de arquivo aberto que aparece em seguida, selecione o nome da nova planilha.

Clique em Fechar e você está acabado.


9

Ou simplesmente faça o seguinte:

Converta isto:

=database_feed!A1

para isso:

=INDIRECT("database_feed!A1")

e não há mais mudanças em suas referências quando você copia entre planilhas.

Se você não tem muitas folhas referenciadas, outra alternativa seria usar

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

e insira o nome da folha de referência na célula B1. Agora você só tem uma célula para atualizar quando copiada para a nova planilha.


1
Boa ideia, funciona se você tiver uma folha de modelo com fórmulas e estiver copiando isso em uma nova pasta de trabalho com o VBA. Descobri que você precisa manter a referência entre aspas e adicionar TRUE para manter as referências do tipo A1. por exemplo. = INDIRECT ("'Folha1'! A1", VERDADEIRO)
RogerB

2
INDIRECT é uma fórmula volátil, por isso será recalculada a cada vez (ao contrário de apenas quando editada), o que pode realmente desacelerar pastas de trabalho mais complexas, portanto, use com cuidado
Andre Terra

3

O código abaixo pode ser adaptado às suas necessidades. Leva todas as fórmulas da folha em wb1 e aplica-os a uma planilha em uma nova pasta de trabalho. As fórmulas são aplicadas como String s, portanto, não há inserção de referências à pasta de trabalho original. Além disso, esse código é super rápido porque não usa a área de transferência e não requer nenhum loop pelas células.

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

2
  • copiar planilha para 'WorkbookB.xlsx'
  • planilha aberta no novo arquivo
  • selecionar tudo
  • vá ao menu Data, clique em editar links
  • editar links para que o link para o arquivo antigo é agora um link para o arquivo atualmente aberto

Isso funciona para mim.


1

Como 99% das respostas nem sequer abordaram a pergunta original, aqui está a resposta apropriada.

  1. Copie as folhas do arquivo original (Original.xlsx) para o novo arquivo do Excel (New.xlsx) como faria normalmente. Geralmente, clico com o botão direito no nome e escolho "Mover ou Copiar ...".

  2. Salve o segundo arquivo recém-criado (New.xlsx).

  3. No novo arquivo, em Dados, clique em "Editar Links"

  4. No pop-up, escolha "Alterar fonte ..."

  5. Localize o arquivo (New.xlsx) e clique em Abrir.

Todas as referências ao original (Original.xlsx) serão removidas.

FEITO!


0

Ambas as pastas de trabalho devem estar abertas para que isso funcione . Você executa essa macro e copia workbookA!sheet 1 a workbookB!sheet1 e depois substituir todo o workbookA referências. É bruto, mas funciona . Obviamente, você pode alterar o código para corresponder aos nomes do WorkbookA.xlsx, mas certifique-se de que eles tenham a extensão correta e permaneçam entre aspas.

Ah, para fazer uma macro, caso você não saiba, acerte alt + F11 para trazer o Editor do Visual Basic. Então clique com o botão direito no WBA insert - module e copie e cole o código abaixo no módulo. Então aperte F5 para executar a macro. Se a macro não for executada, provavelmente é porque as macros não estão habilitadas, então vá em frente e salve-a e reabra-a e quando ela solicitar a habilitação de macros, habilite-as.

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

1
Uma única rotina é boa, pois sou manualmente CTRL+H agora, mas todos estes não fixam as referências para os controlos, e. botões, dropdowns e tal; e intervalos nomeados.
Jake

0

Eu consegui isso copiando as células para a nova planilha como normal, em seguida, fazendo um encontrar uma substituição para remover o caminho do arquivo antigo nas fórmulas.

Por exemplo. se a primeira fórmula é =J2 e isso se torna =[filepath]J2, em seguida, basta encontrar e substituir toda a nova planilha para [filepath] e substitua por nada. Isso exclui e restaura a fórmula para =J2.

Não é necessário VB!


Infelizmente excel parece funcionar apenas intermitentemente quando se trata de encontrar sub-strings dentro de fórmulas: /. Não parece ser capaz de encontrar nada com aspas simples também.
Douglas Gaskell

0

Eu estava tendo um problema semelhante. A razão pela qual as fórmulas foram coladas com o link para o WBA foi que a guia (folha) na qual eu estava trabalhando no WBA recebeu um nome diferente do da WBB. Para mim, era sempre "a última folha", mas uma chamava-se "MinFlow" e a outra, "NormalFlow". Eu renomeiei ambos para 'Resultados' e o copiar / colar funcionou como eu queria - uma "pasta relativa".


0

Selecione as células que você deseja mover. Agora tente movê-los arrastando e soltando a planilha diferente (guia diferente).

Eu sei, rola. Aqui está a parte complicada: basta pressionar cmd (mac) ou alt (win) e ele permitirá que você deixe as células em outra aba.


Você pode expandir sua resposta um pouco? Não está claro como / onde cair em outra guia enquanto arrasta. Obrigado.
fixer1234

0

Oi aqui é uma solução simples para este problema:

  1. Copie as células como de costume.
  2. Na fórmula, selecione e copie o texto que o vincula à pasta de trabalho anterior [WorkbookA.xlsx].
  3. Selecione todas as células que você deseja alterar e pressione CTRL+F e selecione a guia substituir.
  4. Substitua [WorkbookA.xlsx] por espaço vazio (também não escreva nada no Replace with campo, pressione Replace All.

Voila - está feito.


0

Outro "truque" - antes de copiar a planilha de origem, substituir todos os qualificadores de fórmula = com outro conjunto de caracteres (digamos ###= ).

Copie a planilha, depois da cópia, substitua o qualificador de fórmula (substituindo ###= com = ).

Certifique-se de que quaisquer referências de folhas dentro das fórmulas também sejam copiadas para a nova planilha antes da planilha de referência.


0
  1. Copie a folha como de costume. (clique com o botão direito para tab e vá para 'mover ou copiar') Isto é para formatação.

  2. Copie todas as células da folha original (usando Ctrl + UMA ou triângulo superior esquerdo e Ctrl + C )

  3. Colar como Valores para a nova pasta de trabalho (sobre a planilha da "etapa 1") (Opções de Colagem & gt; 123)


0

Se você precisar fazer isso automaticamente, porque você está puxando as folhas em um programa VBA. Usa isto:

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

Basta alterar "String encontrada no nome do livro de origem". para coincidir com os links antigos que você deseja substituir. Você poderia remover esse bloco se quiser substituir todos os links.


-1

Abra as duas pastas de trabalho. Na pasta de trabalho de origem (WorkbookA.xlsx), selecione a folha que você deseja copiar. Clique com o botão direito do mouse na guia da planilha e selecione “Mover ou Copiar…”. Na caixa de diálogo "Mover ou copiar", selecione "WorkbookB.xlsx" na lista suspensa "Para reservar", escolha onde no livro você quer colocá-lo e marque "Criar uma cópia". (E clique em "OK".)


-1

Faça uma cópia da planilha para a qual você deseja mover as planilhas das quais, nesse caso, seria WorkbookA.xlsx. Renomeie para dizer "Copy of WorkbookA.xlsx". Agora abra esta nova pasta de trabalho, bem como a pasta de trabalho para a qual você deseja mover a pasta, para a qual, nesse caso, seria WorkbookB.xlsx. Clique com o botão direito do mouse em planilhas na pasta de trabalho de cópia que você criou, por exemplo, Copy of WorkbookA.xlsx e selecione 'move or copy' e mova essas folhas para WorkbookB.xlsx. Você terminou !


Não está claro como sua resposta resolve o problema da questão. Por que mover funcionará de maneira diferente, então a cópia funcionaria?
Máté Juhász

Eu tentei a sua solução proposta e não funciona. Não há diferença entre copiar e mover folhas inteiras.
nixda
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.