エクセル2003
1~4 はファイルの状態の説明です。
やりかたを質問したい部分は 5です。
1、ファイル(ブック)A.xls → 計算式が大量に入った数シートからなるファイル があるとする。
2、A.xls を そのままコピーし コピーされたファイルは B.xls に リネーム。
3、A.xls は 計算式等は変更しないが、データを変更し通常業務で使用。
4、A.xls の新バージョンを作るために B.xls を使って計算式等を編集。
(複数あるシートのうち一部シート(シート名 「あいうえ」 とする)のみの変更に加え
さらに新シート「さしすせ」を作成)
5、A.xls のシート名 「あいうえ」をB.xlsで作った シート名 「あいうえ」と置き換え、
さらに新シート「さしすせ」もB.xlsからコピーして追加する。
普通にシート名 「あいうえ」や 新シート「さしすせ」を選択し
コピーを行うと B.xls からリンクを張った状態でコピーされて
しまう。たとえば シート「あいうえ」セルA1の中身を見ると
=[B.xls]あいうえ!A1*2+1 といったように [B.xls]が付いて
コピーされる。
これを回避して、単にそのまま丸ごと(A.xlsの中だけで編集したかのように)
シートをコピーするにはどうしたら よいのでしょうか?
長くなってすいません。
よろしくおねがいいたします。
A 回答 (9件)
- 最新から表示
- 回答順に表示
No.9
- 回答日時:
ANo.8の補足です。
「'=」にしてしまうと、式に戻すとき、一気に置換できなくて面倒でしたね。
「=」→「#」辺りに置換して文字列にして下さい。
また、試してみて判りましたが、Excel2003の場合、セル内の式が912文字以上の場合、置換も出来ない様です。
もし、B.xls内のセル式が912文字以上の場合は1つ1つ文字列に変換してやる必要が有ります。
No.8
- 回答日時:
ANo.5です。
セル式の文字数制限に引っかかるんですね。
それなら、B.xlsの追加したいシート上のセル式を「=」→「'=」の置換で一旦文字列にしてしまっては如何でしょう。ただし、文字列であってもシートのコピーでは255バイトで切られてしまいます(Excel2003の場合)ので、文字列にしたうえでシートの移動でA.xlsに持っていきます。
その後、置換をしなおしてセル式に戻します。
なお、B.xlsからシートを移動しますので、B.xlsはあらかじめコピーを取って置きます。
No.7
- 回答日時:
この質問は、
[B.xls]を付けずにコピーする方法...ではなく
[B.xls]が付くとセルの文字数制限(255文字でしたっけ?)に引っかかって、式が壊れるのを回避する方法...な訳ですよね
さて、シートのコピーを逆にしたらどうなりますか?
B.xlsにA.xlsの参照される方のシートをコピーするのです
これで問題(式が壊れるなど)なければ
B.xlsの現在参照されているシートを削除します
そうすると参照している式には #REF! が付きます
あいうえ!A1*2+1 -> #REF!A1*2+1
エラーにはなりますが、文字数が増えなければ式は壊れないはずです
そこで、「置換」を使って
#REF! -> 新シート名!
に置換えてはどうでしょうか?
(新シート名は短い名前に変えておいた方が良いかも)
No.5
- 回答日時:
こんな手はどうでしょう。
質問の5まで行ってあるとします。
1.B.xlsを終了して一時的に名前を変えます。例:B.xls→BB.xls
2.[B.xls]が付いてしまっているA.xlsを名前をつけて保存でB.xlsとして保存終了します。
3.上記2で保存したB.xls(元A.xls)を開く。
これで[B.xls]が消えているはずです。後は正しい名前A.xlsで保存しなおし、BB.xlsを元のB.xlsに戻して完了。
この回答への補足
回答ありがとうございます。
返信が遅れ申し訳ありません。
結果として下記理由からNGですが、
しかし、こんな単純な発想があるのに、
思いつかないものですねぇ・・・
自分の頭の固さが身にしみました。
NO3までの補足でも示しているとおり
1つのセルに入っている計算式があまりに長く
加えて、パス名とファイル名が式の中のそれぞれの参照セル名の
頭に付加されるととんでもなく長い式となり、「長すぎます」との
エラーで式がすべて壊れてしまいます。
つまり B.xlsからA.xlsにコピーした時点で
リンクが張っていない状態でないと、だめなのです。
気持ちのよい回答ありがとうございます。
No.4
- 回答日時:
アクティブブックの他ブックへのリンクを、アクティブブック自身へのリンクに書き換える(実質削除)マクロですが、お役に立たないでしょうか?
Sub test()
Dim alinks As Variant
Dim i As Long
alinks = ActiveWorkbook.LinkSources(xlExcelLinks)
If Not IsEmpty(alinks) Then
For i = 1 To UBound(alinks)
ActiveWorkbook.ChangeLink Name:=alinks(i), NewName:=ActiveWorkbook.Name, Type:=xlExcelLinks
Next i
End If
End Sub
この回答への補足
ご意見ありがとうございます。
返信が遅れ申し訳ありません。
NO3までの補足でも示しているとおり
1つのセルに入っている計算式があまりに長く
加えて、パス名とファイル名が式の中のそれぞれの参照セル名の
頭に付加されるととんでもなく長い式となり、「長すぎます」との
エラーで式がすべて壊れてしまいます。
つまり B.xlsからA.xlsにコピーした時点で
リンクが張っていない状態でないと、だめなのです。
しかし、参考にはなりました。
ありがとうございます。
No.3
- 回答日時:
質問が良く理解できませんが
シートを別のブックにコピーする方法です。
この方法だとリンクは張られないはずですが
http://ii.cmt.kpu-m.ac.jp/~asano/kiso/topics/exc …
「A.xls 」が開いていれば移動先ブック名に「A.xls 」が表示されます
この回答への補足
それはすでにやりましたが
どうしても
元は =あいうえ!A1*2+1 なのに
=[B.xls]あいうえ!A1*2+1 といったように [B.xls]にリンクが
張られてコピーされてしまいます。
No.2
- 回答日時:
[B.xls]を「置換」で削除すればどうでしょう
この回答への補足
1セルに入っている計算式が
とてつもなく長いため
[B.xls]がいくつも付いてしまい
式が壊れたり
または
「長すぎます」とのことで置換もききません。
もちろん一度保存してからでも同じです。
たとえばE12のセルには
=IF(あああ!$F6>SUMPRODUCT((いいい!O$4:O$203<>"")*(いいい!P$4:P$203=$C$7)*(いいい!N$4:N$203=$B$8)*(いいい!K$4:K$203<>"t")*(いいい!K$4:K$203<>"T")*(いいい!K$4:K$203<>"t")*(いいい!K$4:K$203<>"T")*(いいい!I$4:I$203=$B$5)),"",INDEX(INDIRECT($AR$3&"!"&$C$5&"$1:"&$C$5&"203"),SMALL(INDEX(SUBSTITUTE((いいい!O$4:O$203<>"")*(いいい!P$4:P$203=$C$7)*(いいい!N$4:N$203=$B$8)*(いいい!K$4:K$203<>"t")*(いいい!K$4:K$203<>"T")*(いいい!K$4:K$203<>"t")*(いいい!K$4:K$203<>"T")*(いいい!I$4:I$203=$B$5),0,10^6)*ROW(いいい!$M$4:いいい!$M$203),),あああ!$F6)))
という式が入っており(「あああ」と「いいい」は実際には異なる名称)
それが1シーに40~100セルにもわたって入っており
ブック自体の要領は5Mほどにもなっています。
このそれぞれのセル位置の前にいちいち[B.xls](実際にはもっと長いファイル名とパス名が入ってしまう)が挿入されめちゃめちゃに
なってしまう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
- Visual Basic(VBA) エクセルVBA 既存エクセルを開きその中のシートとしてCSVファイルを開く 3 2023/05/31 13:11
- Excel(エクセル) VBA ふたつの同じ様式シートのセルをコピーしたい 2 2023/03/08 15:28
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/24 08:33
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Excel(エクセル) マクロを教えてください 1 2022/11/28 14:52
- Visual Basic(VBA) VBAマクロでシートコピーした新シートにコピー元シートとの計算式の入れ方を教えて下さい。 5 2022/11/20 09:48
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの選択範囲以外を削除...
-
Excel 関数を使ってデータと一...
-
【VBA】コピー&複数個所のペー...
-
EXCELで別のブックから式をコピ...
-
エクセルの1シートの内容を複...
-
EXCELのVBAでシートコピーをし...
-
【Excel】数式をそのまま他のシ...
-
Excel 数式の保護をしたセルを...
-
エクセルシートを別のエクセル...
-
PDFファイルをコピーしてエクセ...
-
Excelの行をコピーして貼り付け...
-
エクセルでシートを「移動また...
-
EXCEL VBA シートをコピーする...
-
ExcelVBAで、ユーザーフォーム...
-
Excel シートのコピーの際、ペ...
-
VBAで任意のファイルを読み出し...
-
エクセルVBA 1行飛ばしで転記す...
-
【エクセル】プルダウン設定の...
-
【Excel】シート全体から一部を...
-
Excel シートに別のExcelシート...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 関数を使ってデータと一...
-
エクセルの選択範囲以外を削除...
-
EXCELのVBAでシートコピーをし...
-
EXCELで別のブックから式をコピ...
-
【Excel】数式をそのまま他のシ...
-
【VBA】コピー&複数個所のペー...
-
Excelの行をコピーして貼り付け...
-
CSVファイルについて質問です。
-
【エクセル】プルダウン設定の...
-
Excel シートのコピーの際、ペ...
-
Excel 数式の保護をしたセルを...
-
【Excel VBA】シートコピー時、...
-
エクセルの1シートの内容を複...
-
ExcelVBAで、ユーザーフォーム...
-
Excel シートに別のExcelシート...
-
シートが保護されていないのに...
-
PDFファイルをコピーしてエクセ...
-
エクセルシートを別のエクセル...
-
エクセルVBA 1行飛ばしで転記す...
-
エクセルでシートを「移動また...
おすすめ情報