Excel çalışma sayfasını kopyalayın ve formüllerde göreli hücre başvurusunu koruyun


40

Excel'de başka bir kopyalama sorunu:

Çalışma sayfasını WorkbookA.xlsx'ten WorkbookB.xlsx'e kopyalanan Çalışma Sayfasını yine de WorkbookA.xlsx'e gönderme yapmadan nasıl kopyalayabilirim, örneğin formül kopyalandığında =B!23olur =[WorkbookA.xlsx]!B!23.

"Mutlak" hücre başvuruları yerine "göreceli" hücre başvurularını sürdürmek istiyorum (henüz mevcut değilse bu terminolojiyi Excel dünyasında icat edeceğim).

Çalışmasını sağlayamadığım bir diğer olası alternatif ise sadece "değerler" hücresini yapıştırma seçeneği. Excel, "değerleri", hücredeki gerçek formüllerden ziyade hesaplanan değerler olarak değerlendirir. Yapıştırma formülünü seçersem, yine de mutlak referanslar veriyor.

Buna Neden İhtiyacım Var Hakkında Daha Fazla Bilgi: Günlük işlemler için kullanılan xlsx üretimine sahibim. Bu xlsx için sürekli "yükseltme" yapmamız gerekiyor ve böylece bir kişi bir kopyasını oluşturabilir ve orada tek bir sayfa için değişiklik yapabilir. Aynı zamanda, başka bir kişi başka bir sayfada da değişiklik yapabilir. Bu sayfaların başka sayfalarda bağımlı hücrelere sahip olmadıkları düşünülürse , özet rapor gibi, sayfaların tekrar orijinal xlsx'e kopyalanması ve birleştirilmesi istenir. Ancak “mutlak” referanslama çok fazla sorun yaratıyor.


Kafam karıştı. Sayfa 1'i WBA’dan WBB’ye kopyalamak ve WBA’dan ziyade WBB’e göre formülleri kopyalamak istiyorsunuz. WBB sayfa 2, WBA sayfa 2 ile aynı olmadıkça bu mümkün değildir. Ayrıca, yalnızca değerleri istiyorsanız, sayfayı select all - copy - paste special - valuesyalnızca değerlere sahip olacak şekilde kopyalayabilirsiniz . Kopyalama sırasında hepsini yapmak istiyorsanız, bu adımları gerçekleştirmek için son kullanıcıya güvenmek yerine, bunun üzerinde çalışıyorum. Çalışma Kitabı A (veya 1) ve WBB (2) ve #s
Raystafarian

Son paragrafımda zaten açıklamaya çalıştım, ancak hala net olmadığını düşünüyorum. Evet, WBA ve WBB, WBA'daki bir sayfa için aynı beklentidir. Bu sayfayı WBA'da tasarlarken, tüm hücre referanslarının sayfanın çalışma kitabına göre olması amaçlanmıştır. Kopya çalışma sayfası işlevi, tüm hücre formüllerini WBA'ya ekleyerek "mutlak" yapar ve bunu istemiyorum.
Jake

Özel değerleri yapıştır sadece hesaplanan değerleri yapıştır. WBA.xls ekli olmadan kopyalanacak formüllere ihtiyacım var.
Jake

Tamam temizim. Anladığımda / ne zaman bir cevap
göndereceğim

Çalışma kitabının tamamının bir kopyasını alıp, yeni kopyadan ihtiyacınız olmayan şeyleri silemez misiniz?
dwolters

Yanıtlar:


21

Kullanmayı deneyin Ctrl+ ~formülleri görüntülemek için. Sonra her şeyi seçmek için Ctrl+ tuşlarını Akullanın, kopyalayın ve not defterine yapıştırın.

Son olarak, not defterinden kopyalayın ve diğer çalışma kitabınıza yapıştırın.


1
@Jake: Ancak çalışma kitabınızın düğmelere, açılanlara ve benzerlerine sahip olduğunu söylediniz ; ve adlandırılmış aralıklar. Bu teknik onları kopyalamaz (veya biçimlendirme gibi sıradan şeyleri) - bunu nasıl / neden kabul edilebilir buluyorsunuz?
Scott

Büyük bir çalışma sayfasında, Bağlantıları Düzenle / Kaynağı Değiştir tekniği acı vericiydi, ama bu hızlıydı.
Tony Pulokas

23

Birçok durumda aşağıdakileri yapmayı daha kolay buldum:

  • sayfayı yeni bir çalışma kitabına kopyala
  • yeni çalışma kitabındaki yeni sayfayı etkinleştir
  • tümünü seç ( Ctrl+ A)
  • bul / değiştir
    • bulmak: [WorkbookA.xlsx]!
    • değiştirin: <boş bırakın>
  • hepsini değiştir

11

Bunun hemen altındaki imzasız cevap benim için işe yaradı, çok küçük bir değişiklikle.

  1. Bir hedef e-tablo oluşturun ve kaydedin.

  2. "Taşı", "kopyala" kullanın ya da sayfanızı formüllerle yeni elektronik tabloya sürükleyin. Bu, yeni sayfadaki formülleri eski çalışma sayfasına işaret eder. Ardından, yeni e-tabloyu eski çalışma sayfasının bulunduğu yere kaydedin.

  3. Ardından Veri Sekmesine gidin> Bağlantıları Düzenle'yi tıklayın. Sayfada linkler olmadığı sürece, seçenek aktif olmayacaktır.

  4. Sonuçlanan iletişim kutusunda, kaynak dosyanın adını seçin ve "Kaynağı Değiştir" i tıklayın.

  5. Daha sonra görüntülenen açık dosya iletişim kutusundan, yeni elektronik tablonun adını seçin.

Kapat'ı tıkladığınızda işiniz biter.


9

Veya sadece aşağıdakileri yapın:

Bunu dönüştür:

=database_feed!A1

buna:

=INDIRECT("database_feed!A1")

ve çalışma sayfaları arasında kopyaladığınızda referanslarınızda değişiklik yapmanıza gerek yok.

Başvurulan çok fazla sayfanız yoksa, kullanmak için başka bir alternatif

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

ve referans sayfasının adını B1 hücresine girin. Şimdi yeni e-tabloya kopyalandığında güncellenecek tek bir hücreniz var.


1
İyi fikir, formüller içeren bir şablon sayfanız varsa ve bunu VBA ile yeni bir çalışma kitabına kopyalıyorsanız işe yarar. A1 tipi referansları tutmak için referansı tırnak arasında tutmanız ve TRUE eklemeniz gerektiğini tespit ettim. Örneğin. = INDIRECT ("'Sayfa1'! A1", DOĞRU)
RogerB

2
INDIRECTuçucu bir formül olduğu için daha karmaşık çalışma kitaplarını gerçekten yavaşlatabilen her seferinde (yalnızca düzenlendiğinde olduğu gibi) yeniden hesaplanacaktır, bu nedenle dikkatli olun
Andy Terra

3

Aşağıdaki kod ihtiyaçlarınıza göre uyarlanabilir. Sayfadaki tüm formülleri alır wb1ve yeni bir çalışma kitabındaki bir sayfaya uygular. Formüller Strings olarak uygulanır , bu nedenle orijinal çalışma kitabına referans eklenmez. Ayrıca, bu kod süper hızlıdır çünkü panoyu kullanmaz ve hücreler arasında döngü gerektirmez.

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

Yanıtların% 99'u orijinal soruyu bile ele almadığından, doğru cevap.

  1. Sayfaları normal dosyadaki gibi (Original.xlsx) yeni Excel dosyasına (New.xlsx) kopyalayın. Genellikle, isme sağ tıklayın ve "Taşı veya Kopyala ..." seçeneğini seçin.

  2. İkinci - yeni oluşturulan dosyayı kaydedin (New.xlsx).

  3. Yeni dosyada Veri altında "Bağlantıları Düzenle" yi tıklayın

  4. Açılır pencerede "Kaynağı Değiştir ..." i seçin.

  5. Dosyayı (New.xlsx) bulun ve Aç'ı tıklayın.

Orijinal belgeye yapılan tüm referanslar (Original.xlsx) kaldırılacaktır.

YAPILAN!


Cevaplar listesinde daha yüksek olmalı
sabre23t

2
  • çalışma sayfasını 'WorkbookB.xlsx' dosyasına kopyala
  • çalışma sayfasını yeni dosyada aç
  • hepsini seç
  • Veri menüsüne gitmek, bağlantıları düzenlemek tıklayın
  • Bağlantıları düzenleyin, böylece eski dosyaya bağlantı şimdi açık dosyaya bağlantı

Bu benim için çalışıyor.


0

Bunun çalışması için her iki çalışma kitabının da açık olması gerekir . Bu makroyu çalıştırırsanız, workbookA!sheet1'e kopyalar workbookB!sheet1ve ardından tüm workbookAreferansları değiştirir . Ham, ama işe yarıyor . Kodu, WorkbookA.xlsx adlarınızla eşleşecek şekilde değiştirebilirsiniz, ancak doğru uzantılara sahip olduklarından ve tırnak içinde kaldıklarından emin olun.

Oh, makro yapmak için, bilmemeniz durumunda alt + F11, Visual Basic Düzenleyicisi'ni açmak için tuşuna basın. Ardından WBA'ye sağ tıklayın insert - moduleve aşağıdaki kodu kopyalayıp modüle yapıştırın. Ardından F5makroyu çalıştırmak için tıklayın. Makro çalışmazsa, büyük olasılıkla makrolar etkin olmadığından, devam edin ve kaydedin, yeniden açın ve makroları etkinleştirmek istediğinde bunları etkinleştirin.

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
Tek bir rutin, CTRL+Hşu anda manuel olarak olduğum gibi güzel , ancak bunların tümü kontroller için referansları düzeltmiyor; örneğin, düğmeler, düşmeler vb. ve adlandırılmış aralıklar.
Jake

0

Bunu, hücreleri yeni çalışma sayfasına normal olarak kopyalayıp, eski dosya yolunu formüllerde kaldırmak için bir değişiklik yaparak buldum.

Örneğin, eğer ilk formül =J2bu hale gelirse =[filepath]J2, o zaman tüm yeni e-tablonun yerini bulup [filepath]değiştirin ve hiçbir şey olmadan değiştirin. Bu onu siler ve formülü geri yükler =J2.

VB gerekli değil!


Ne yazık ki excel sadece zaman zaman formüller içinde alt dizeleri bulmak söz konusu olduğunda işe görünmektedir:. Tek tırnaklı bir şey de bulabilecek gibi görünmüyor.
Douglas Gaskell

0

Ben de benzer bir problem yaşıyordum. Formüllerin WBA bağlantısıyla yapıştırılmasının nedeni, WBA'da üzerinde çalıştığım sekmenin (sayfanın) WBB'deki adından farklı olarak adlandırılmış olmasıdır. Benim için her zaman "son sayfa" dı ancak biri 'MinFlow', diğeri 'NormalFlow' olarak adlandırıldı. Her ikisini de 'Sonuçlar' olarak yeniden adlandırdım ve kopyala / yapıştır istediğim gibi çalıştı - bir "göreceli yapıştırma".


0

Taşımak istediğiniz hücreleri seçin. Şimdi n bırakarak onları farklı çalışma sayfasına (farklı sekme) sürükleyerek taşımayı deneyin.

Biliyorum, kaydırıyor. İşte zor kısım: sadece cmd (mac) veya alt (win) tuşlarına basın, hücreleri başka bir sekmeye bırakmanıza izin verecek.


Cevabınızı biraz genişletebilir misiniz? Sürüklerken başka bir sekmede nasıl / nereye düşeceği belli değil. Teşekkürler.
fixer1234

0

Merhaba, bu soruna basit bir çözüm:

  1. Her zamanki gibi hücrelerin üzerine kopyalayın.
  2. Formülde, önceki çalışma kitabına [WorkbookA.xlsx] bağlayan metni seçin ve kopyalayın.
  3. Değiştirmek istediğiniz tüm hücreleri seçin ve CTRL+F ve değiştirme sekmesini seçin.
  4. [WorkbookA.xlsx] 'i boş alanla değiştirin (diğer bir deyişle, Replace withalana hiçbir şey yazmayın ,Replace All .

Voila - bitti.


0

Başka bir 'numara' - kaynak çalışma sayfasını kopyalamadan önce, tüm formül niteleyicilerini =başka karakter grubuyla değiştirin (örneğin###= ).

Çalışma sayfasını üzerine kopyalayın, sonra kopyaladıktan sonra formül niteleyicisini geri değiştirin (değiştirme ###= birlikte =).

Formauller içindeki tüm referansların referans sayfasından önce yeni sayfaya kopyalandığından emin olun.


0
  1. Sayfayı her zamanki gibi kopyalayın. (sekmeye sağ tıklayın ve 'taşı veya kopyala' ya gidin) Bu biçimlendirme içindir.

  2. Tüm hücreleri orijinal sayfadan kopyalayın ( Ctrl+ Aveya sol üst üçgen ve Ctrl+ kullanarakC )

  3. Yeni çalışma kitabına Değerler olarak yapıştırın ("adım-1" sayfanın üstünde) (Yapıştırma Seçenekleri> 123)


0

Bunu otomatik olarak yapmanız gerekiyorsa, çünkü VBA programındaki sayfaları çekiyorsunuzdur. Bunu kullan:

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

Sadece "Kaynak kitap adında bulunan dizgiyi" değiştirin. Değiştirmek istediğiniz eski bağlantıları eşleştirmek için Eğer tüm linkleri değiştirmek istiyorsanız blok varsa bunu kaldırabilirsiniz.


-1

Her iki çalışma kitabını da açın. Kaynak çalışma kitabında (WorkbookA.xlsx), kopyalamak istediğiniz sayfayı seçin. Sayfa sekmesine sağ tıklayın ve “Taşı veya Kopyala…” seçeneğini seçin. “Taşı veya Kopyala” iletişim kutusunda, “Kitap” açılır menüsünde “Çalışma KitabıB.xlsx” seçeneğini seçin, kitapta nereye koymak istediğinizi seçin ve “Bir kopya oluştur” seçeneğini işaretleyin. (Ve “Tamam” ı tıklayın.)


-1

Sayfalarını taşımak istediğiniz sayfanın bir kopyasını alın; bu durumda WorkbookA.xlsx olacaktır. "WorkbookA.xlsx kopyası" demek için yeniden adlandırın. Şimdi bu yeni çalışma kitabını ve bu durumda WorkbookB.xlsx olan sayfayı taşımak istediğiniz çalışma kitabını açın. Oluşturduğunuz kopya çalışma kitabındaki sayfalara sağ tıklayın, örneğin WorkbookA.xlsx'in Kopyası ve 'taşı ya da kopyala'yı seçin ve bu sayfaları WorkbookB.xlsx'e taşıyın. Bitirdiniz !


Cevabınızın sorunun sorununu nasıl çözdüğü açık değildir. Neden hareket farklı şekilde çalışacak, sonra kopya işe yarayacak?
Máté Juhász

Önerdiğin çözümü denedim ama işe yaramadı. Tüm sayfaların kopyalanması ve taşınması arasında fark yoktur.
nixda
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.