Excelワークシートをコピーして、数式内の相対セル参照を維持する

macros microsoft-excel microsoft-excel-2007 microsoft-excel-2010 vba

エクセルでもう一つコピー問題

コピーしたワークシートをWorkbookA.xlsxを参照せずに、WorkbookA.xlsxからWorkbookB.xlsxにワークシートをコピーするにはどうすればよいですか?

私は、「絶対」セル参照ではなく「相対」セル参照を維持したいと考えています(この用語がまだ存在しない場合、私はExcelの世界でこの用語を発明しなければなりません)

私がうまくいかないもう一つの可能性のある代替案は、セルの「値」のみを貼り付けるオプションです。エクセルは「値」をセル内の実際の数式ではなく、計算値として扱います。式を貼り付けるを選択しても、絶対参照が表示されます

なぜこれが必要なのかについて私は日々の業務で使用している本番用のxlsxを持っています。我々は常にこのxlsxに “アップグレード “を行う必要があるため、一人の人間がコピーを作成して、1つのシートに変更を加えることができます。同時に、別の人が別のシートに変更を加えているかもしれません。これらのシートには、サマリーレポートのように他のシートに依存するセルがないことを考えると、シートをコピーして元のxlsxにマージすることが望ましいです。しかし、「絶対参照」が多くの問題を引き起こしています

  47  Jake  2012-03-06


ベストアンサー

Ctrl + ~で数式を表示してみてください。そして、Ctrl + Aですべてを選択し、コピーしてからメモ帳に貼り付けてください

最後に、メモ帳からコピーして、他のワークブックに貼り付けます

24  SVandenBerg  2012-05-02


の方が楽な場合が多いことがわかりました

  • シートを新しいワークブックにコピーします
  • 新しいワークブックで新しいシートをアクティブにします
  • select all (Ctrl+A)を選択します
  • で検索/置換を行う
    • find: [WorkbookA.xlsx]!
    • に置き換えてください。<空白のままにしておく>
  • replace all

27  Yoheeb  2012-11-29


このすぐ下にある無署名の答えが私には効果があったもので、微妙なバリエーションがあります

  1. 保存先のスプレッドシートを作成して保存します

  2. 移動」、「コピー」、または数式を含むページを新しいスプレッドシートにドラッグします。これにより、新しいページの数式は古いワークシートを指したままになります。その後、新しいスプレッドシートを古いワークシートと同じ場所に保存します

  3. 次に、データタブに移動し、リンクの編集をクリックします。このオプションは、ページ内にリンクがないと有効になりません

  4. 表示されたダイアログで、ソースファイルの名前を選択し、”ソースの変更 “をクリックします

  5. 次に表示されるファイルを開くダイアログから、新しいスプレッドシートの名前を選択します

閉じるをクリックして終了です

12  Pete  2013-11-26


もしくは単純に以下のようにしてください

Convert this:

=database_feed!A1

to this:

=INDIRECT("database_feed!A1")

ワークシート間でコピーしても、参照先を変更する必要はありません

参照しているシートが多くない場合は、別の方法もあります

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

と入力し、セルB1に参照シートの名前を入力します。これで、新しいスプレッドシートにコピーしたときに更新するセルは1つだけになりました

9  Jason Higbee  2014-01-17


99%の回答は元の質問にすら答えていないので、ここが適切な回答です

  1. 元のファイル(Original.xlsx)のシートを、いつものように新しいExcelファイル(New.xlsx)にコピーします。一般的に、私は名前を右クリックして “移動またはコピー… “を選択します

  2. 2つ目 – 新規作成したファイル(New.xlsx)を保存します

  3. 新しいファイルで、「データ」の下の「リンクの編集」をクリックします

  4. ポップアップで「ソースの変更」を選択します

  5. ファイル(New.xlsx)を探して、「開く」をクリックします

オリジナル(Original.xlsx)への参照はすべて削除されます

DONE!

6  David  2016-03-15


以下のコードは、あなたのニーズに合わせることができます。これは、wb1のシートからすべての数式を取り出し、新しいワークブックのシートに適用します。式はStringsとして適用されるので、元のワークブックへの参照を挿入する必要がありません。また、このコードはクリップボードを使用せず、セルをループする必要がないので、超高速です

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  2012-03-07


  • ワークシートを’WorkbookB.xlsx’にコピーします
  • 新しいファイルでワークシートを開きます
  • select all
  • メニューの「データ」から「リンクの編集」をクリックします
  • 古いファイルへのリンクが現在開いているファイルへのリンクになるようにリンクを編集します

これは私には効き目があります

2  user259817  2013-10-04


VBAプログラムでシートを引っ張ってくるので自動でやる必要がある場合。これを使ってください

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

“String found in source book name. “を置換したい古いリンクに合わせて変更するだけです。全てのリンクを置換したい場合はブロックを外しても良いでしょう

1  HackSlash  2018-09-10


この機能を実行するには、両方のワークブックを開いておく必要があります。このマクロを実行すると、workbookA!sheet1をworkbookB!sheet1にコピーし、workbookA参照をすべて置換します。粗雑ですが、動作します。WorkbookA.xlsx の名前に合わせてコードを変更することもできますが、正しい拡張子を持ち、引用符のままであることを確認してください

あ、マクロを作るには、念のために言っておくと、alt + F11を押してVisual Basic Editorを表示させます。そして、WBA insert - moduleを右クリックして、以下のコードをコピーしてモジュールに貼り付けてください。そして、F5を押してマクロを実行してください。マクロが実行されない場合は、マクロが有効になっていないことが考えられますので、先に保存してから開き直し、マクロを有効にするように促されたら、マクロを有効にしてください

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  2012-03-06


私は、通常通りにセルを新しいワークシートにコピーしてから、置換を検索して数式の古いファイルパスを削除することでこれを達成しました

例えば、最初の数式が=J2で、これが=[filepath]J2になった場合、[filepath]の新しいスプレッドシート全体を検索して置換し、何もない状態に置換します。これで削除され、数式は =J2 に復元されます

VB不要!

0  cdpinker  2014-06-24


私も同じような問題を抱えていました。WBAへのリンクと一緒に数式が貼り付けられていたのは、WBAで作業していたタブ(シート)の名前がWBBと違っていたからです。私にとってはいつも「最後のシート」だったのですが、片方は「MinFlow」、もう片方は「NormalFlow」という名前になっていました。私は両方の名前を ‘Results’ に変更しましたが、コピー/ペーストは私が望んでいた通りに動作しました – “相対ペースト”

0  Janet  2015-02-12


移動したいセルを選択します。今すぐ別のワークシート(別タブ)にドラッグ&ドロップして移動してみてください

わかっています、それはスクロールします。ここで厄介なのが、cmd (mac) または alt (win) を押すだけで、セルを別のタブにドロップすることができます

0  Andy Abel  2015-04-25


Hi here is a simple solution to this problem

  1. いつものようにセルをコピーします
  2. 式の中で、前のワークブック[WorkbookA.xlsx]にリンクしているテキストを選択してコピーします
  3. 変更したいセルをすべて選択し、CTRL+Fを押して、置換タブを選択します
  4. WorkbookA.xlsx]を空欄に置き換える(別名Replace withの欄には何も書かずにReplace Allを押す)

完成しました

0  Niklas  2015-12-30


もう一つの「トリック」 – ソース・ワークシートをコピーする前に、すべての数式の修飾子 = を他の文字セット (###= など) に置き換えます

ワークシートをコピーし、コピー後に式の修飾子を元に戻します(###==に置き換えます)

フォルマール内のシートの参照も、参照シートの前に新しいシートにコピーされていることを確認してください

0  Tamer Salama  2016-01-14


  1. いつものようにシートをコピーします。(タブを右クリックして「移動またはコピー」へ) これは書式設定のためのものです

  2. 元のシートからすべてのセルをコピーします(Ctrl+Aまたは左上の三角形とCtrl+Cを使用)

  3. 新しいワークブックに値として貼り付けます(”step-1 “シートの上)(貼り付けオプション>123)

0  eru  2016-04-25


両方のワークブックを開きます。コピー元のワークブック(WorkbookA.xlsx)で、コピーしたいシートを選択します。シートタブを右クリックし、「移動またはコピー…」を選択します。移動またはコピー」ダイアログボックスで、「ブックへ」ドロップダウンで「WorkbookB.xlsx」を選択し、そのブックのどこに配置するかを選択し、「コピーを作成する」にチェックを入れます。そして「OK」をクリックします)

-1  Scott  2014-06-24


シートを移動させたいシートのコピーを作成してください。それを「WorkbookA.xlsxのコピー」という名前に変更します。ここで、シートを移動させたいワークブックと同じように、新しいワークブックを開きます。作成したコピーワークブックのシート(WorkbookA.xlsxのコピー)を右クリックして、「移動またはコピー」を選択し、シートをWorkbookB.xlsxに移動します。これで完了です

-1  Nishant  2015-10-06


タイトルとURLをコピーしました