Salin lembar kerja Excel dan pertahankan referensi sel relatif dalam rumus

40

Masalah penyalinan lain di Excel:

Bagaimana saya bisa menyalin lembar kerja dari WorkbookA.xlsx ke WorkbookB.xlsx tanpa lembar kerja yang disalin masih merujuk WorkbookA.xlsx misalnya rumus =B!23menjadi =[WorkbookA.xlsx]!B!23ketika disalin.

Saya ingin mempertahankan referensi sel "relatif" alih-alih referensi sel "absolut" (saya akan menemukan terminologi ini di dunia Excel jika belum ada).

Alternatif lain yang mungkin saya tidak dapat membuatnya bekerja adalah opsi untuk menempelkan "nilai" sel saja. Excel memperlakukan "nilai" sebagai nilai yang dihitung alih-alih formula aktual dalam sel. Jika saya memilih rumus tempel, itu masih memberikan referensi absolut.

Lebih Lanjut Tentang Mengapa Saya Membutuhkan Ini: Saya memiliki xlsx produksi yang digunakan untuk operasi harian. Kami terus-menerus perlu membuat "pemutakhiran" untuk xlsx ini sehingga satu orang dapat membuat salinan dan perubahannya di sana untuk satu lembar. Bersamaan, orang lain mungkin juga membuat perubahan ke lembar lain. Mengingat bahwa sheet ini tidak memiliki sel dependen pada sheet lain , seperti laporan ringkasan, diinginkan bagi kita untuk hanya menyalin dan menggabungkan sheet kembali ke xlsx asli. Tetapi referensi "absolut" memberikan banyak masalah.

Jake
sumber
Saya agak bingung. Anda ingin menyalin lembar 1 dari WBA ke WBB dan Anda ingin menyalin rumus relatif ke WBB daripada WBA. Ini tidak mungkin kecuali WBB sheet 2 identik dengan WBA sheet 2. Apakah itu masalahnya? Juga, jika Anda hanya ingin nilai, Anda bisa menyalin lembar select all - copy - paste special - valueshanya memiliki nilai. Jika Anda ingin melakukan semuanya selama penyalinan alih-alih mengandalkan pengguna akhir untuk melakukan langkah-langkah itu, well, saya telah mengerjakannya. Beri tahu kami secara pasti bagaimana Anda menginginkannya dalam hal WorkbookA (atau 1) dan WBB (2) dan sheet
#s
Saya sudah mencoba menjelaskan dalam paragraf terakhir saya, tetapi saya pikir itu masih belum jelas. Ya, WBA dan WBB adalah harapan yang sama untuk satu lembar di WBA. Saat merancang lembar itu di WBA, ini dimaksudkan bahwa semua referensi sel relatif terhadap buku kerja lembar itu. Fungsi lembar kerja salin menambahkan semua rumus sel dengan WBA, menjadikannya "mutlak" dan saya tidak menginginkannya.
Jake
rekatkan nilai khusus hanya rekatkan nilai yang dihitung. Saya perlu rumus yang akan disalin, TANPA WBA.xls ditambahkan.
Jake
Oke saya jelas. Saya akan mengirim jawaban jika / ketika saya mengetahuinya
Raystafarian
Tidak bisakah Anda membuat salinan dari seluruh buku kerja dan kemudian menghapus apa yang tidak Anda butuhkan dari salinan baru?
dwolters

Jawaban:

21

Coba gunakan Ctrl+ ~untuk menampilkan formula. Kemudian gunakan Ctrl+ Auntuk memilih semuanya, salin dan tempel ke notepad.

Terakhir, salin dari notepad dan tempel ke buku kerja Anda yang lain.

SVandenBerg
sumber
1
@ Jake: Tetapi Anda telah mengatakan bahwa buku kerja Anda memiliki tombol, dropdown, dan semacamnya; dan rentang bernama. Teknik ini tidak akan menyalinnya (atau hal-hal biasa seperti pemformatan) - bagaimana / mengapa Anda menganggapnya dapat diterima?
Scott
Pada lembar kerja besar, teknik Edit Tautan / Ubah Sumber sangat lambat, tapi ini cepat.
Tony Pulokas
23

Dalam banyak kasus, saya merasa lebih mudah untuk melakukan hal berikut:

  • salin lembar ke buku kerja baru
  • aktifkan lembar baru di buku kerja baru
  • pilih semua ( Ctrl+ A)
  • lakukan find / replace on
    • menemukan: [WorkbookA.xlsx]!
    • ganti: <biarkan kosong>
  • menggantikan semua
Yoheeb
sumber
11

Jawaban yang tidak ditandatangani tepat di bawah yang satu ini adalah yang bekerja untuk saya, dengan variasi yang sangat sedikit.

  1. Buat dan simpan spreadsheet tujuan.

  2. Gunakan "pindahkan", "salin", atau seret halaman Anda dengan rumus ke dalam spreadsheet baru. Ini meninggalkan rumus pada halaman baru yang menunjuk ke lembar kerja yang lama. Kemudian simpan lembar kerja baru di lokasi yang sama dengan lembar kerja lama.

  3. Lalu pergi ke Tab Data> klik Edit Tautan. Opsi tidak akan aktif kecuali ada tautan di halaman.

  4. Dalam dialog yang menghasilkan, pilih nama file sumber dan klik "Ubah Sumber."

  5. Dari dialog file-terbuka yang muncul berikutnya, pilih nama spreadsheet baru.

Klik Tutup dan Anda selesai.

Pete
sumber
9

Atau cukup lakukan hal berikut:

Konversikan ini:

=database_feed!A1

untuk ini:

=INDIRECT("database_feed!A1")

dan tidak ada lagi perubahan pada referensi Anda saat Anda menyalin di antara lembar kerja.

Jika Anda tidak memiliki banyak lembar referensi, alternatif lain adalah menggunakan

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

dan masukkan nama lembar referensi di sel B1. Sekarang Anda hanya memiliki satu sel untuk diperbarui ketika disalin ke spreadsheet baru.

Jason Higbee
sumber
1
Ide bagus, berfungsi jika Anda memiliki lembar templat dengan rumus dan Anda menyalinnya ke buku kerja baru dengan VBA. Saya menemukan bahwa Anda perlu menyimpan referensi antara kutipan dan menambahkan TRUE untuk menjaga referensi tipe A1. misalnya. = TIDAK LANGSUNG ("'Sheet1'! A1", BENAR)
RogerB
2
INDIRECTadalah rumus yang mudah menguap sehingga akan dihitung ulang setiap waktu (bukan hanya saat diedit) yang benar-benar dapat memperlambat buku kerja yang lebih rumit, jadi gunakan dengan hati
Andy Terra
3

Kode di bawah ini dapat disesuaikan dengan kebutuhan Anda. Semua rumus dari lembar aktif wb1dan menerapkannya ke lembar di buku kerja baru. Rumus diterapkan sebagai Strings, jadi tidak ada penyisipan referensi ke buku kerja asli. Juga, kode ini sangat cepat karena tidak menggunakan clipboard dan tidak memerlukan perulangan melalui sel.

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
sumber
3

Karena 99% dari tanggapan bahkan tidak menjawab pertanyaan awal, inilah jawaban yang tepat.

  1. Salin lembar dari file asli (Original.xlsx) ke file Excel baru (New.xlsx) seperti biasa. Secara umum, saya klik kanan pada nama dan pilih "Pindahkan atau Salin ...".

  2. Simpan file kedua - yang baru dibuat (New.xlsx).

  3. Di file baru, di bawah Data, klik "Edit Tautan"

  4. Di jendela sembul, pilih "Ubah Sumber ..."

  5. Temukan file (New.xlsx) dan klik Open.

Semua referensi ke yang asli (Original.xlsx) akan dihapus.

DIBUAT!

David
sumber
Seharusnya lebih tinggi dalam daftar jawaban
sabre23t
2
  • salin lembar kerja ke 'WorkbookB.xlsx'
  • buka lembar kerja di file baru
  • Pilih Semua
  • buka menu Data, klik edit tautan
  • edit tautan sehingga tautan ke file lama sekarang merupakan tautan ke file yang saat ini terbuka

Ini bekerja untuk saya.

pengguna259817
sumber
0

Kedua buku kerja harus terbuka agar ini berfungsi . Anda menjalankan makro ini dan itu akan menyalin workbookA!sheet1 ke workbookB!sheet1dan kemudian mengganti semua workbookAreferensi. Itu kasar, tetapi berhasil . Anda jelas dapat mengubah kode agar cocok dengan nama WorkbookA.xlsx Anda, tetapi pastikan kode tersebut memiliki ekstensi yang benar dan tetap dalam tanda kutip.

Oh, untuk membuat makro, jika Anda tidak tahu, tekan alt + F11untuk membuka Editor Visual Basic. Kemudian klik kanan pada WBA insert - moduledan salin dan tempel kode di bawah ini ke dalam modul. Lalu tekan F5untuk menjalankan makro. Jika makro tidak akan berjalan, itu mungkin karena makro tidak diaktifkan, jadi silakan simpan dan buka kembali dan ketika diminta untuk mengaktifkan makro, aktifkan.

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
sumber
1
Satu rutinitas bagus seperti saya secara manual CTRL+Hsekarang, tetapi semua ini tidak memperbaiki refences untuk kontrol misalnya tombol, dropdown dan semacamnya; dan rentang bernama.
Jake
0

Saya mencapai ini dengan menyalin sel ke lembar kerja baru seperti biasa, kemudian melakukan mencari ganti untuk menghapus jalur file lama dalam formula.

Misal, jika rumus pertama adalah =J2dan ini menjadi =[filepath]J2, maka lakukan saja pencarian dan ganti seluruh spreadsheet baru untuk [filepath]dan ganti dengan apa pun. Ini menghapusnya dan mengembalikan formula ke =J2.

Tidak diperlukan VB!

cdpinker
sumber
Sayangnya excel tampaknya hanya bekerja sebentar-sebentar ketika menemukan sub-string dalam formula: /. Tampaknya tidak mampu menemukan apa pun dengan tanda kutip tunggal.
Douglas Gaskell
0

Saya mengalami masalah yang sama. Alasan rumus disisipkan dengan tautan ke WBA adalah bahwa tab (lembar) yang saya kerjakan di WBA dinamai berbeda dari yang ada di WBB. Bagi saya, itu selalu "lembar terakhir" tetapi yang satu bernama 'MinFlow' dan yang lainnya bernama 'NormalFlow'. Saya mengganti nama menjadi 'Hasil' dan salin / tempel berfungsi seperti yang saya inginkan - "tempel relatif".

Janet
sumber
0

Pilih sel yang ingin Anda pindahkan. Sekarang coba pindahkan dengan menyeret dan melepaskan ke lembar kerja yang berbeda (tab berbeda).

Saya tahu, itu bergulir. Inilah bagian yang sulit: cukup tekan cmd (mac) atau alt (win) dan itu akan membiarkan Anda menjatuhkan sel ke tab lain.

Andy Abel
sumber
Bisakah Anda sedikit memperluas jawaban? Tidak jelas bagaimana / di mana harus menjatuhkan tab lain sambil menyeret. Terima kasih.
fixer1234
0

Hai di sini adalah solusi sederhana untuk masalah ini:

  1. Salin sel seperti biasa.
  2. Dalam rumus pilih dan salin teks yang menghubungkannya ke buku kerja sebelumnya [WorkbookA.xlsx].
  3. Pilih semua sel yang ingin Anda ubah dan Tekan CTRL+Fdan pilih tab ganti.
  4. Ganti [WorkbookA.xlsx] dengan ruang kosong (alias tidak menulis apa pun di Replace withbidang, tekan Replace All.

Voila - sudah selesai.

Niklas
sumber
0

'Trik' lain - sebelum menyalin lembar kerja sumber, ganti semua kualifikasi rumus =dengan set karakter lainnya (katakanlah ###=).

Salin lembar kerja, lalu setelah salinan, ganti kembali kualifikasi rumus (ganti ###=dengan =).

Pastikan bahwa setiap lembar referensi dalam formauls juga disalin ke lembar baru sebelum lembar referensi.

Tamer Salama
sumber
0
  1. Salin lembar seperti biasa. (klik kanan ke tab dan pergi ke 'pindah atau salin') Ini untuk memformat.

  2. Salin semua sel dari lembar asli (menggunakan Ctrl+ Aatau segitiga kiri atas dan Ctrl+ C)

  3. Rekatkan sebagai Nilai ke buku kerja baru (di atas lembar "langkah-1") (Opsi Tempel> 123)

eru
sumber
0

Jika Anda perlu melakukan ini secara otomatis karena Anda menarik lembaran dalam program VBA. Gunakan ini:

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

Ubah saja "String yang ditemukan dalam nama buku sumber." untuk mencocokkan tautan lama yang ingin Anda ganti. Anda dapat menghapus itu jika memblokir jika Anda ingin mengganti semua tautan.

HackSlash
sumber
-1

Buka kedua buku kerja. Di buku kerja sumber (WorkbookA.xlsx), pilih lembar yang ingin Anda salin. Klik kanan pada tab sheet dan pilih "Pindahkan atau Salin ...". Di kotak dialog "Pindahkan atau Salin", pilih "WorkbookB.xlsx" di menu tarik-turun "Ke buku", pilih di mana di buku itu Anda ingin meletakkannya, dan centang "Buat salinan". (Dan klik "OK".)

Scott
sumber
-1

Buat salinan sheet yang ingin Anda pindahkan sheet dari mana ini adalah WorkbookA.xlsx. Ganti nama itu menjadi "Salin WorkbookA.xlsx". Sekarang buka buku kerja baru ini dan juga buku kerja yang ingin Anda pindahkan lembar yang dalam hal ini adalah WorkbookB.xlsx. Klik kanan pada lembar di buku kerja salin yang Anda buat yaitu Salin WorkbookA.xlsx dan pilih 'pindahkan atau salin' dan kemudian pindahkan lembar ini ke WorkbookB.xlsx. Kamu selesai !

Nishant
sumber
Tidak jelas bagaimana jawaban Anda memecahkan masalah pertanyaan. Mengapa pindah akan bekerja dengan cara yang berbeda maka penyalinan akan berhasil?
Máté Juhász
Saya mencoba solusi yang Anda usulkan dan itu tidak berhasil. Tidak ada perbedaan antara menyalin dan memindahkan seluruh lembar.
nixda