• ベストアンサー

エクセルのブックの値のみのコピー

お世話になります。 エクセルに計算式をたくさん織り込んで作成したら重くなってしまいました。1ブックが1.3メガくらいになってしまいました。毎月40ブック程度使用するため、1年間で換算すると1.3メガ×40ブック×12ヶ月で624メガとなってしまいます。できれば保存しておくのは値だけあればいいので、ブック内の値を計算式を排除して値のみの保存にしたいと考えています。1ブックが30シートほどあるのでシート毎のコピーは大変手間がかかるのでできればブックごとコピーしたいのですが、よい方法はありますでしょうか? ご教授お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

そちらのブックで出来るかどうかはわかりませんが、 ひとつのブックで、最初のシートのタブをクリック Shiftキー押しながら、最後のシートのタブをクリック 全てのシートが選択されます。 最初のシートの左上クリックして、シート全体を選択 コピィ、形式を選択して貼り付け、値にチェックいれてOK 全てのシートの数式が値に変わった、他の名前で保存してください。 アドバイスですが、ぼちぼちアクセスなどのデータベースソフトに変更したほうが良いと思います。 アクセスでエクセルのデータ取り込めますので、今までのデータも無駄にはなりません。

Singaporian
質問者

お礼

うまくいきました!! ありがとうございました。 おっしゃるとおりゆくゆくはアクセスが良いかもしれません。 今のところ展望が見えないのですが、あくまでも応急処置との取り扱いとなるかもしれませんが、とりあえずご忠告のやり方でうまく行きましたので御礼申し上げます。

その他の回答 (3)

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.4

こんにちは csv形式で保存することは検討されましたか? > 「保存しておくのは値だけあればいい」 というのを読むと 私の感覚ではまずcsvを考えます。 csvでは困る事情があるなら、それを相談した方が近道でもあり 後々の発展性も担保した話ができるような気がします。 もしも、ご存じないようでしたら、一度 試しに 「名前を付けて保存」「ファイルの種類」を「CSV」にして保存をして ファイルサイズの違いや Excelで開く実際の操作性 を確かめてみてはどうでしょう。 この問題は 単にファイルサイズを小さくする ということではなく 全体のシステムをどう運用(構築)(再構築)するか、 展望を持って処理しないと結局無駄な手間になると思います。 状況が許すならデータベースソフトの検討もありですが、 先ずは展望の為の情報集めが必要かと思いましたので、、、。

Singaporian
質問者

お礼

ありがとうございます。 CSVにしてみましたが操作性に(処理を行う速度)不便を感じました。私のやり方が下手なのかもしれません。 これからもいろいろ試してみたいと思います。 ありがとうございます。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

考え方として、マクロの記録の応用が出来ます。 ーー 操作は SHIFT+CTRL+* コピー 形式を選択して張り付けー値 自分自身のエリアに複写することにより、これで操作の場合に良く使うように、式が消えます。 形式を選択して張り付けの後は、「値」のほかに(数式は論外として)色々な残すものの選択肢があります。 ーー マクロ記録は、「編集」で見ると Sub Macro1() Range("A2").Select Selection.CurrentRegion.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("A1").Select End Sub ーー データのある範囲を捉えることについて SHIFT+CTRL+* は癖があって、空白行・列があるとそれ以下と右は捉えない。 d = Range("A65536").End(xlUp).Row 操作はENDキー+上矢印でマクロの記録をとるとコードが判る。 やUsedRangeなども定石であります。 ーー 同一ブックのシートの繰り返しは、(マクロの記録では導出はどうしようも無いが)VBAの定石(基本手法)で For Each ws In wb.Worksheets (式を消す処理、上述) Next を使います。 ーー Sub test02() Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets MsgBox ws.Name Next End Sub などをまず実行して、全シートを捉えられることを納得してから、前半を考えて見てください。

Singaporian
質問者

お礼

ありがとうございます。 (勉強不足でマクロはまったくわかりません。。) 将来的には覚えなければ!!と思っておるのですが。

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.1

VBAでアクティブブックの全シートの内容を「値」化するサンプルです。 ユーザーフォームなどに記述し、対象のブックをアクティブにした状態で 実行してください。 Sub test() Dim wb As Workbook Dim ws As Worksheet Set wb = ActiveWorkbook For Each ws In wb.Worksheets With ws.UsedRange .Value = .Value End With Next Set wb = Nothing End Sub

Singaporian
質問者

お礼

お返事遅れてすみません。 ご回答ありがとうございます。

関連するQ&A