web-dev-qa-db-de.com

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

Ein weiteres Kopierproblem in Excel:

Wie kann ich ein Arbeitsblatt aus WorkbookA.xlsx in WorkbookB.xlsx kopieren, ohne dass das kopierte Arbeitsblatt noch auf WorkbookA.xlsx verweist, z. Die Formel =B!23 wird beim Kopieren zu =[WorkbookA.xlsx]!B!23.

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 die tatsächlichen 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 habe eine Produktions-XLSX im Einsatz 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 abhängigen Zellen zu anderen Blättern haben , wie bei einem zusammenfassenden Bericht, ist es wünschenswert, dass wir die Blätter einfach kopieren und wieder in das ursprüngliche xlsx zusammenführen. Aber die "absolute" Referenzierung bereitet viel Ärger.

37
Jake

Versuchen Sie es mit Ctrl + ~ um die Formeln anzuzeigen. Dann benutze Ctrl + A Um alles auszuwählen, 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.

20
SVandenBerg

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
  • wählen Sie Alle (Ctrl+A)
  • suchen/Ersetzen am
    • find: [WorkbookA.xlsx]!
    • ersetzen: <leer lassen>
  • alles ersetzen
23
Yoheeb

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. Gehen Sie dann zur Registerkarte Daten und klicken Sie auf Verknüpfungen 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.

10
Pete

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.

9
Jason Higbee

Der folgende Code kann an Ihre Bedürfnisse angepasst werden. Es übernimmt alle Formeln aus dem Blatt in wb1 und wendet sie auf ein Blatt 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 Durchschleifen 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
3
Excellll
  • arbeitsblatt nach 'WorkbookB.xlsx' kopieren
  • arbeitsblatt in der neuen Datei öffnen
  • wählen Sie Alle
  • gehen Sie zum Menü Daten und klicken Sie auf Links 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.

2
user259817

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.

ERLEDIGT!

1
David

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+F. Wählen Sie dann die Registerkarte Ersetzen.
  4. Ersetzen Sie [WorkbookA.xlsx] durch ein Leerzeichen (oder schreiben Sie nichts in das Feld Replace with, drücken Sie Replace All.

Voila - es ist geschafft.

0
Niklas

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.

0
Andy Abel

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.

Z.B. Wenn die erste Formel =J2 lautet und dies zu =[filepath]J2 wird, suchen und ersetzen Sie einfach die gesamte neue Tabelle für [filepath] und ersetzen Sie sie durch nichts. Dadurch wird es gelöscht und die Formel in =J2 wiederhergestellt.

Nein VB erforderlich!

0
cdpinker
  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+A oder Dreieck oben links und Ctrl+C)

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

0
eru

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

Kopieren Sie das Arbeitsblatt und ersetzen Sie nach dem Kopieren das Formelqualifikationsmerkmal zurück (ersetzen Sie ###= durch =).

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

0
Tamer Salama

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.

0
HackSlash

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".

0
Janet

Beide Arbeitsmappen müssen geöffnet sein, damit dies funktioniert. Sie führen dieses Makro aus und es kopiert workbookA!sheet1 nach workbookB!sheet1 und ersetzt dann alle workbookA-Referenzen. 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.

Oh, um ein Makro zu erstellen, falls Sie es nicht wissen, drücken Sie alt + F11 um den Visual Basic Editor aufzurufen. Klicken Sie dann mit der rechten Maustaste auf WBA insert - module und kopieren Sie den folgenden Code und fügen Sie ihn in das Modul ein. Dann drück 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
0
Raystafarian