Kopieren Sie das Excel-Arbeitsblatt und pflegen Sie den relativen Zellbezug in Formeln

40

Ein weiteres Kopierproblem in Excel:

Wie kann ich ein Arbeitsblatt aus WorkbookA.xlsx in WorkbookB.xlsx ohne das kopierte Arbeitsblatt noch Referenzierung WorkbookA.xlsx kopieren zB die Formel =B!23wird , =[WorkbookA.xlsx]!B!23wenn kopiert.

Ich möchte "relative" Zellreferenzen anstelle von "absoluten" Zellreferenzen pflegen (ich werde diese Terminologie in der Excel-Welt erfinden, wenn sie noch nicht existiert).

Eine andere mögliche Alternative, die ich nicht zum Laufen bringen kann, ist die Option, nur Zellenwerte einzufügen. Excel behandelt "Werte" als berechnete Werte und nicht als tatsächliche Formeln in der Zelle. Wenn ich Formel einfügen wähle, gibt es immer noch absolute Verweise.

Mehr darüber, warum ich das brauche: Ich verwende ein Produktions-XLSX für den täglichen Betrieb. Wir müssen ständig "Upgrades" für dieses xlsx vornehmen, sodass eine Person eine Kopie und seine Änderungen für ein einzelnes Blatt erstellen kann. Gleichzeitig nimmt möglicherweise auch eine andere Person Änderungen an einem anderen Blatt vor. Da diese Blätter keine von anderen Blättern abhängigen Zellen aufweisen , wie z. B. ein zusammenfassender Bericht, ist es für uns wünschenswert, die Blätter nur zu kopieren und wieder in das ursprüngliche xlsx zusammenzuführen. Aber die "absolute" Referenzierung bereitet viel Ärger.

Jake
quelle
Ich bin irgendwie verwirrt. Sie möchten Blatt 1 von WBA in WBB kopieren und möchten, dass die Formeln relativ zu WBB und nicht zu WBA kopiert werden. Dies ist nur möglich, wenn WBB-Blatt 2 mit WBA-Blatt 2 identisch ist. Ist das der Fall? Wenn Sie nur Werte möchten, können Sie das Blatt auch kopieren, select all - copy - paste special - valuesum nur Werte zu erhalten. Wenn Sie alles während des Kopiervorgangs tun möchten, anstatt sich darauf zu verlassen, dass der Endbenutzer diese Schritte ausführt, habe ich daran gearbeitet. Lassen Sie uns genau wissen, wie es in Bezug auf WorkbookA (oder 1) und WBB (2) und die Blatt #s
Raystafarian
Ich habe bereits versucht, in meinem letzten Absatz zu erklären, aber ich denke, es war immer noch nicht klar. Ja, WBA und WBB sind in WBA identisch. Beim Entwerfen dieses Arbeitsblatts in WBA ist vorgesehen, dass sich alle Zellverweise auf die Arbeitsmappe des Arbeitsblatts beziehen. Die Funktion zum Kopieren von Arbeitsblättern hängt alle Zellformeln mit WBA an und macht sie "absolut", und das möchte ich nicht.
Jake
Beim Einfügen von Sonderwerten werden nur die berechneten Werte eingefügt. Ich muss die Formeln kopieren, OHNE WBA.xls anhängen.
Jake
Okay, ich bin klar. Ich werde eine Antwort posten, wenn ich es herausfinde
Raystafarian
Können Sie nicht einfach eine Kopie der gesamten Arbeitsmappe erstellen und dann das, was Sie nicht benötigen, aus der neuen Kopie löschen?
Dwolters

Antworten:

21

Verwenden Sie Ctrl+ ~, um die Formeln anzuzeigen. Wählen Sie dann mit Ctrl+ Aalles aus, kopieren Sie es und fügen Sie es in den Notizblock ein.

Kopieren Sie es schließlich aus dem Editor und fügen Sie es in Ihre andere Arbeitsmappe ein.

SVandenBerg
quelle
1
@Jake: Aber Sie haben gesagt, dass Ihre Arbeitsmappe Schaltflächen, Dropdowns und dergleichen enthält. und benannte Bereiche. Diese Technik kopiert sie nicht (oder alltägliche Dinge wie Formatierung) - wie / warum halten Sie es für akzeptabel?
Scott
In einem großen Arbeitsblatt war die Technik "Links bearbeiten / Quelle ändern" schmerzhaft langsam, aber dies war schnell.
Tony Pulokas
23

Ich habe es in vielen Fällen einfacher gefunden, Folgendes zu tun:

  • Kopieren Sie das Blatt in eine neue Arbeitsmappe
  • Aktivieren Sie das neue Blatt in der neuen Arbeitsmappe
  • Alles auswählen ( Ctrl+ A)
  • Suchen / Ersetzen auf
    • finden: [WorkbookA.xlsx]!
    • ersetzen: <leer lassen>
  • alles ersetzen
Yoheeb
quelle
11

Die unsignierte Antwort direkt unter dieser ist die, die mit einer sehr geringen Abweichung für mich funktioniert hat.

  1. Erstellen und speichern Sie eine Zieltabelle.

  2. Verwenden Sie "Verschieben", "Kopieren" oder ziehen Sie Ihre Seite mit den Formeln in die neue Tabelle. Dadurch bleiben die Formeln auf der neuen Seite, die auf das alte Arbeitsblatt verweisen. Speichern Sie dann das neue Arbeitsblatt am selben Speicherort wie das alte Arbeitsblatt.

  3. Wechseln Sie dann zur Registerkarte "Daten" und klicken Sie auf "Links bearbeiten". Die Option ist nur aktiv, wenn die Seite Links enthält.

  4. Wählen Sie im daraufhin angezeigten Dialogfeld den Namen der Quelldatei aus und klicken Sie auf "Quelle ändern".

  5. Wählen Sie im nächsten Dialogfeld zum Öffnen einer Datei den Namen der neuen Tabelle aus.

Klicken Sie auf Schließen und Sie sind fertig.

Pete
quelle
9

Oder machen Sie einfach folgendes:

Konvertiere dies:

=database_feed!A1

dazu:

=INDIRECT("database_feed!A1")

und keine Änderungen mehr an Ihren Referenzen, wenn Sie zwischen Arbeitsblättern kopieren.

Wenn Sie nicht viele Blätter referenziert haben, wäre eine andere Alternative zu verwenden

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

und geben Sie den Namen des Referenzblatts in Zelle B1 ein. Jetzt müssen Sie nur noch eine Zelle aktualisieren, wenn Sie sie in die neue Tabelle kopieren.

Jason Higbee
quelle
1
Gute Idee, funktioniert, wenn Sie ein Vorlagenblatt mit Formeln haben und dieses mit VBA in eine neue Arbeitsmappe kopieren. Ich habe festgestellt, dass Sie die Referenz zwischen Anführungszeichen beibehalten und TRUE hinzufügen müssen, um Referenzen des Typs A1 beizubehalten. z.B. = INDIREKT ("'Sheet1'! A1", TRUE)
RogerB
2
INDIRECTDa es sich um eine flüchtige Formel handelt, die jedes Mal neu berechnet wird (im Gegensatz zu nur, wenn sie bearbeitet wird), kann dies komplexere Arbeitsmappen erheblich verlangsamen. Seien Sie also vorsichtig
Andy Terra
3

Der folgende Code kann an Ihre Bedürfnisse angepasst werden. Es übernimmt alle Formeln aus dem wb1Arbeitsblatt und wendet sie auf ein Arbeitsblatt in einer neuen Arbeitsmappe an. Die Formeln werden als Strings angewendet , sodass keine Verweise auf die ursprüngliche Arbeitsmappe eingefügt werden. Außerdem ist dieser Code superschnell, da er die Zwischenablage nicht verwendet und kein Durchlaufen von Zellen erfordert.

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
Hervorragend
quelle
3

Da 99% der Antworten nicht einmal die ursprüngliche Frage beantworteten, finden Sie hier die richtige Antwort.

  1. Kopieren Sie die Blätter wie gewohnt aus der Originaldatei (Original.xlsx) in die neue Excel-Datei (New.xlsx). Im Allgemeinen klicke ich mit der rechten Maustaste auf den Namen und wähle "Verschieben oder Kopieren ...".

  2. Speichern Sie die zweite neu erstellte Datei (New.xlsx).

  3. Klicken Sie in der neuen Datei unter "Daten" auf "Links bearbeiten".

  4. Wählen Sie im Popup "Quelle ändern ..."

  5. Suchen Sie die Datei (New.xlsx) und klicken Sie auf Öffnen.

Alle Verweise auf das Original (Original.xlsx) werden entfernt.

GETAN!

David
quelle
Sollte in der Liste der Antworten höher sein
Sabre23t
2
  • Arbeitsblatt nach 'WorkbookB.xlsx' kopieren
  • Arbeitsblatt in der neuen Datei öffnen
  • Wählen Sie Alle
  • Gehen Sie zum Menü Daten und klicken Sie auf Verknüpfungen bearbeiten
  • Bearbeiten Sie die Links so, dass der Link zur alten Datei jetzt ein Link zur aktuell geöffneten Datei ist

Das funktioniert bei mir.

user259817
quelle
0

Beide Arbeitsmappen müssen geöffnet sein, damit dies funktioniert . Sie führen dieses Makro aus und es kopiert workbookA!sheet1 nach workbookB!sheet1und ersetzt dann alle workbookAVerweise. Es ist grob, aber es funktioniert . Sie können den Code natürlich so ändern, dass er mit Ihren WorkbookA.xlsx-Namen übereinstimmt. Stellen Sie jedoch sicher, dass sie die richtige Erweiterung haben und in Anführungszeichen bleiben.

Um ein Makro zu erstellen, klicken Sie auf alt + F11, um den Visual Basic-Editor aufzurufen. Klicken Sie dann mit der rechten Maustaste auf WBA insert - moduleund kopieren Sie den folgenden Code und fügen Sie ihn in das Modul ein. Drücken Sie dann F5, um das Makro auszuführen. Wenn das Makro nicht ausgeführt werden kann, liegt dies wahrscheinlich daran, dass Makros nicht aktiviert sind. Speichern Sie es und öffnen Sie es erneut. Wenn Sie aufgefordert werden, Makros zu aktivieren, aktivieren Sie sie.

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
quelle
1
Eine einzelne Routine ist nett, wie ich es CTRL+Hjetzt manuell mache, aber all dies repariert nicht die Verweise für Steuerelemente, z. B. Schaltflächen, Dropdowns und dergleichen; und benannte Bereiche.
Jake
0

Ich habe dies erreicht, indem ich die Zellen wie gewohnt in das neue Arbeitsblatt kopierte und dann einen Ersatz suchte, um den alten Dateipfad in den Formeln zu entfernen.

Wenn zum Beispiel die erste Formel ist =J2und dies wird =[filepath]J2, suchen und ersetzen Sie einfach die gesamte neue Tabelle [filepath]und ersetzen Sie sie durch nichts. Dies löscht es und stellt die Formel wieder her =J2.

Keine VB erforderlich!

cdpinker
quelle
Leider scheint Excel nur sporadisch zu funktionieren, wenn es darum geht, Teilstrings in Formeln zu finden: /. Es scheint auch nicht in der Lage zu sein, mit einfachen Anführungszeichen etwas zu finden.
Douglas Gaskell
0

Ich hatte ein ähnliches Problem. Der Grund, warum die Formeln mit dem Link zu WBA eingefügt wurden, war, dass die Registerkarte (Tabelle), an der ich in WBA arbeitete, anders benannt wurde als in WBB. Für mich war es immer "der letzte Bogen", aber einer hieß "MinFlow" und der andere "NormalFlow". Ich habe beide in "Ergebnisse" umbenannt und das Kopieren / Einfügen hat so funktioniert, wie ich es wollte - eine "relative Einfügung".

Janet
quelle
0

Wählen Sie die Zellen aus, die Sie verschieben möchten. Versuchen Sie nun, sie durch Ziehen und Ablegen auf ein anderes Arbeitsblatt (anderes Register) zu verschieben.

Ich weiß, es rollt. Hier ist der schwierige Teil: Drücken Sie einfach cmd (Mac) oder alt (Win) und Sie können die Zellen auf eine andere Registerkarte ablegen.

Andy Abel
quelle
Kannst du deine Antwort ein wenig erweitern? Es ist nicht klar, wie / wo beim Ziehen auf einer anderen Registerkarte abgelegt werden soll. Vielen Dank.
Fixer1234
0

Hallo hier ist eine einfache Lösung für dieses Problem:

  1. Kopieren Sie die Zellen wie gewohnt.
  2. Wählen Sie in der Formel den Text aus, der mit der vorherigen Arbeitsmappe [WorkbookA.xlsx] verknüpft ist, und kopieren Sie ihn.
  3. Markieren Sie alle Zellen, die Sie ändern möchten, und drücken Sie CTRL+Fund wählen Sie die Registerkarte Ersetzen.
  4. Ersetzen Sie [WorkbookA.xlsx] durch Leerzeichen (auch wenn Sie nichts in das Replace withFeld schreiben , drücken Sie Replace All.

Voila - es ist geschafft.

Niklas
quelle
0

Ein weiterer Trick: Ersetzen Sie vor dem Kopieren des Quellarbeitsblatts alle Formelqualifikatoren =durch andere Zeichen (z ###=. B. ).

Kopieren Sie das Arbeitsblatt über, dann nach dem Kopieren, ersetzen Sie die Formel Qualifier zurück (ersetzt ###=mit =).

Stellen Sie sicher, dass alle Blattreferenzen innerhalb der Formeln vor dem Referenzierungsblatt auch auf das neue Blatt kopiert werden.

Zähmer Salama
quelle
0
  1. Kopieren Sie das Blatt wie gewohnt. (Klicken Sie mit der rechten Maustaste auf die Registerkarte und wählen Sie "Verschieben oder Kopieren".) Dies dient zum Formatieren.

  2. Kopieren Sie alle Zellen aus dem Originalblatt (mit Ctrl+ Aoder Dreieck oben links und Ctrl+ C)

  3. Einfügen als Werte in die neue Arbeitsmappe (über Blatt "Schritt 1") (Einfügeoptionen> 123)

eru
quelle
0

Wenn Sie dies automatisch ausführen müssen, weil Sie in einem VBA-Programm Blätter einziehen. Benutze das:

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

Ändern Sie einfach "Zeichenfolge im Namen des Quellbuchs gefunden". passend zu den alten Links, die Sie ersetzen möchten. Sie können diesen if-Block entfernen, wenn Sie alle Links ersetzen möchten.

HackSlash
quelle
-1

Öffnen Sie beide Arbeitsmappen. Wählen Sie in der Quellarbeitsmappe (WorkbookA.xlsx) das Blatt aus, das Sie kopieren möchten. Klicken Sie mit der rechten Maustaste auf die Blattregisterkarte und wählen Sie "Verschieben oder Kopieren ...". Wählen Sie im Dialogfeld "Verschieben oder Kopieren" in der Dropdown-Liste "Buchen" die Option "ArbeitsmappeB.xlsx" aus, wählen Sie die Position in diesem Buch aus, an der Sie es ablegen möchten, und aktivieren Sie "Kopie erstellen". (Und klicken Sie auf "OK".)

Scott
quelle
-1

Erstellen Sie eine Kopie des Blatts, von dem Sie Blätter verschieben möchten. In diesem Fall lautet die Kopie WorkbookA.xlsx. Benennen Sie es um, um "Copy of WorkbookA.xlsx" zu sagen. Öffnen Sie nun diese neue Arbeitsmappe sowie die Arbeitsmappe, in die Sie das Blatt verschieben möchten, in diesem Fall WorkbookB.xlsx. Klicken Sie mit der rechten Maustaste auf die Blätter in der von Ihnen erstellten Arbeitsmappe, z. B. Kopie von WorkbookA.xlsx, und wählen Sie "Verschieben oder Kopieren" und verschieben Sie diese Blätter nach WorkbookB.xlsx. Du bist fertig !

Nishant
quelle
Es ist nicht klar, wie Ihre Antwort das Problem der Frage löst. Warum funktioniert das Verschieben anders als das Kopieren?
Máté Juhász
Ich habe versucht, Ihre vorgeschlagene Lösung und es funktioniert nicht. Es gibt keinen Unterschied zwischen dem Kopieren und Verschieben ganzer Blätter.
Nixda