No.7ベストアンサー
- 回答日時:
追加です。
>シート2に40字弱の別ブックの表へのリンク式を80行30列記入した状態だと54枚程度
の状態で、コードを下記のように変更すると、300枚以上のシートの作成が可能になりました。
この方が使用メモリが押さえられるようです。
'シートのコピー
n = Worksheets(1).Range("a1")
i = 1
Worksheets(2).Cells.Copy
Do While i < n
i = i + 1
Sheets.Add after:=Worksheets(Worksheets.Count)
Worksheets(Worksheets.Count).Paste
Range("a2") = i
Loop
この回答への補足
関係あるか分からないんですが、
前のバージョンのときはWindowsタスクマネージャのアプリケーションのところをみると、マクロを実行したときに1つ増えてしまいます(MicrosoftExcel-Book1とBook1みたいに)。
hana-hana3さんのように作った場合は増えません。
対応策ありがとうございました。
今カレンダー系統のものを作成中で前の形式だと3年分くらいだったのが上記のようにした場合30年分以上は(1sheet/月)作ることができました。
20年出来れば十分過ぎます。
ありがとうございました。
No.8
- 回答日時:
#3のWendy02です。
こんばんは。
>>「Excelに許された『使用可能なメモリ』」というのは、数メガ(私のは約2メ
ガ)しかありません。
>これはどうやって調べるのでしょうか?
実用的ではありませんが、以下のようなAPIから調べました。
http://support.microsoft.com/default.aspx?scid=k …
HOW TO: Excel 2000 での Windows 状態情報の Windows API から取得
"Total Virtual Memory: " が、全仮想メモリのことです。
"Available Virtual Memory: "が使用可能メモリのことです。
Excelは、開いている間に、キャッシュのデータ(古い言葉で、電子のゴミ)を取り込むことがありますから、あまり長期使用に耐えられるファイルではないようです。これは、Wordも同じようです。まるで昔のMS-DOSのように、シングルタスクで使えば、良いのかもしれません。そのファイルの状態は、バイナリ・エディタで、Dumpして分ります。非常に脆弱な部分を持ったファイル構造のように思います。
No.6
- 回答日時:
アップして頂いたコードで少し試して見ました。
(Windows2000/Office2000)
何も無いシートで実行すると300枚以上コピー可能です。
シート1にボタンを1個作成すると254枚
それにプラスして、シート2に40字弱の別ブックの表へのリンク式を80行30列記入した状態だと54枚程度になりました。
シート1に同じ式を記入して、他のシートが空だと149枚になりました。
ブックやシートの情報が増加するとコピー可能数が変動します。
>エラーが一度起きると次からはコピーしてくれません。
こちらの件も確認しました。
手動でのコピーも出来ませんね。
推測ですがシート管理で何か問題が発生しているのかもしれません。
現在の所では、回避策については解りかねます。
No.5
- 回答日時:
ソースとは既に皆さんに回答頂いているように、マクロコードの意味です。
シート数等がメモリーに影響を受けるのは間違いありませんが、25~30枚程度でコピーメソッドが落ちるなら、それはマクロコードに問題があるのではと考えてソースの提示を提案しました。
#2の Sub Test() ~ End Sub のように書かれた内容を提示すれば、問題がある場合、プロフェッショナルな方々がここを直せば良い等の的確なアドバイスを示してくれます。
この回答への補足
すみませんでした。以下のように作ってあります。
シートの2番目をコピーするようにしたつもりです
エラーが一度起きると次からはコピーしてくれません。ファイルを立ち上げなおすとまたできます。
Sub 四角形1_Click()
Dim j As Integer
Dim i As Integer
'3番目を消す
p = ActiveWorkbook.Worksheets.Count
q = 3
If p > 2 Then
Do While q < p + 1
Worksheets(3).Activate
Worksheets(3).Delete
q = q + 1
Loop
End If
'シートのコピー
n = Worksheets(1).Range("a1")
i = 1
Do While i < n
i = i + 1
Worksheets(i).Copy After:=Worksheets(i)
Range("a2") = Range("a2") + 1
Loop
'シート名変更
j = 1
m = Worksheets(1).Range("a1")
Do While j < m + 1
j = j + 1
Worksheets(j).Activate
a = ActiveSheet.Name
Sheets(a).Name = Range("b2") & "." & Range("a2")
Loop
Worksheets(1).Activate
End Sub
ご指摘ありがとうございました。
ソースを提示したところ、早速プロフェッショナルな答えが返ってきました。
改めて皆さんの技術力とネットのすばらしさを知りました。
私も他の人の質問に回答できるように勉強していきたいとおもいます。
No.4
- 回答日時:
>「ソースもアップされては?」というのは・・・
ソースというのは、プログラムのソースコード(マクロ)の事です。
参考URL:http://e-words.jp/w/E382BDE383BCE382B9E382B3E383 …
No.3
- 回答日時:
こんにちは。
昨日、途中で書きかけて、結局は、PCに依存するというのが結論なら、書かないほうがよいのかなって思ったのですが、少し、メモリについて説明をしておきます。
#1さんの言葉どおりなのですが、そのヘルプに書かれてある「使用可能なメモリ」というの『仮想メモリ』のことで、私は、その使用は、以下のような解釈をしています。
「Excelに許された『使用可能なメモリ』」として、シートの大きさにも依存してきます。シートにデータを入れると、その領域に対してメモリが大きくなります。入力したセル数ではありません。領域が小さければメモリが少ないですから、シート数も増えます。
他にも、
・値を入れたセル + 文字列 (これは全シートには及ばないようです。)
・書式設定の種類(つまり、例えば、スタイルで設定したほうが、#,##0 で個別に設定するよりもメモリ占有率が減ります)
・関数の参照範囲の種類(R1C1方式で見ると良く分ります)
・オブジェクト類
・フォントの種類
・1シートの計算過程で使用するメモリ
・VBAのモジュールを格納する各々のプロシージャ
・アドイン、プリンタドライバ、Excelで使われるユーティリティソフト
・OS のVersion/ CPU
・ExcelのVersion
などが、その仮想メモリに影響するようです。物理的メモリとは直接関係がないようです。それが、ブック全体で影響するものと、各シート、モジュールで影響するだけのものと分かれるようです。(今のところ、詳しい資料が手に入りませんが。)
ブック自体は、何十メガと大きくすることは出来ますが、その「Excelに許された『使用可能なメモリ』」というのは、数メガ(私のは約2メガ)しかありません。それぞれは、数バイト~10数バイトと微々たるものなのですが、累積的に膨れ上がるものですから、特殊な計算などすると、すぐに一杯になります。VBAのモジュールを使うときは、そのメモリ配分を考えておいたほうが良いときがあります。ひとつのモジュールに偏らせすぎないとか考えなくてはなりません。
こんなことを書いても、問題解決にはなりませんが、一応、情報として出しておきます。
#2のpapayukaさんの
>「ソースもアップされては?」というのはエクセルのバージョンアップということでしょうか?
トラブルのあるVBAコードを掲示してみたらいかがですか?、という意味です。
お礼遅れました。
ソースのアップという言葉も分からないくらいの者なので、メモリーのこともあまり良く分かっていません。
いろいろ勉強になりました。
ちなみに
>「Excelに許された『使用可能なメモリ』」というのは、数メガ(私のは約2メガ)しかありません。
これはどうやって調べるのでしょうか?
No.2
- 回答日時:
Excelのバージョンは?
97だとSheetのCodeNameがSheet11111111111111111 のようになってエラーとなるバグがありました。
下記の例で動きますか?
Sub test()
For i = 1 To 30
Worksheets(1).Copy after:=Worksheets(Worksheets.Count)
Next i
End Sub
ソースもアップされては?
この回答への補足
回答ありがとうございます
エクセルのバージョンは2003です。
書かれていた例でも動きます。
すみません素人なんでよくわからないのですが、
「ソースもアップされては?」というのはエクセルのバージョンアップということでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのファイルサイズが急に大きくなってしまった 4 2022/10/06 13:51
- その他(Microsoft Office) 関数を教えてください 1 2022/12/13 15:56
- Excel(エクセル) エクセルで最下行にデータを追加するVBA 6 2023/05/09 09:30
- Excel(エクセル) エクセルでファイル保存時に複数シートのオートフィルタを全て解除したい 1 2023/05/10 13:23
- Excel(エクセル) エクセル VBAでBook モジュールのプロシージァ(コード)に除外シートを設定したい 1 2023/01/11 15:53
- Excel(エクセル) Excel_マクロ_複数のシートのVLOOKUPで表示された#N/A以外に色付けをしたいです 1 2023/02/16 22:37
- CPU・メモリ・マザーボード メモリー増強 2 2023/05/04 11:59
- Excel(エクセル) エクセルシートのデータを1列飛ばしで別ブックのシートに貼り付けるマクロが知りたい 2 2023/06/05 22:37
- その他(ギャンブル) 【ブラックジャック】ブラックジャックのスプレットは手持ちの2枚のカードを2つの場に分割して2つの賭け 1 2022/08/24 16:23
- Excel(エクセル) エクセルのマクロで複数シートを両面印刷するには? 2 2022/12/08 23:23
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
EXCEL VBA シートをコピーする時にエラーが発生してしまう件
Excel(エクセル)
-
マクロでのシートコピー数制限?
Excel(エクセル)
-
VBA シートをコピーする際に Copyメソッドは失敗しましたのエラーが出てしまいます
Visual Basic(VBA)
-
-
4
エクセル マクロ実行時エラー’1004’
Excel(エクセル)
-
5
worksheetクラスのcopyメソッドが失敗しました。
その他(Microsoft Office)
-
6
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
7
【ExcelVBA】マクロの入ったシートをコピーしても新しいシート内でマクロを動作させるには?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別のシートから値を取得するとき
-
Excel マクロについての相談
-
別のシートを参照して計算する方法
-
エクセルのマクロについて教え...
-
ブック名、シート名を他のモジ...
-
VBA 最終行まで数式をコピーする
-
【ExcelVBA】全シートのセルの...
-
特定の文字を含むシートだけマ...
-
エクセルのマクロについて教え...
-
VBA 入力月で該当シートを選択...
-
一括印刷マクロ シート名を数字...
-
【ExcelVBA】動的にボタン、ボ...
-
VBA 存在しないシートを選...
-
同じ作業を複数のシートに実行...
-
ListViewの画面の更新
-
実行時エラー1004「Select メソ...
-
シートが保護されている状態で...
-
エクセルで通し番号を入れてチ...
-
【VBA】指定した検索条件に一致...
-
ユーザーフォームに入力したデ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別のシートから値を取得するとき
-
ユーザーフォームに入力したデ...
-
【ExcelVBA】全シートのセルの...
-
同じ作業を複数のシートに実行...
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
XL:BeforeDoubleClickが動かない
-
ExcelVBA シート名を複数セルか...
-
実行時エラー'1004': WorkSheet...
-
VBA 存在しないシートを選...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
ブック名、シート名を他のモジ...
-
【Excel VBA】Worksheets().Act...
-
ExcelのVBAのマクロで他のシー...
-
エクセルのシート名変更で重複...
-
特定の文字を含むシートだけマ...
-
シートが保護されている状態で...
-
Excel マクロについての相談
-
VBA 検索して一致したセル...
おすすめ情報