アプリ版:「スタンプのみでお礼する」機能のリリースについて

ワークシートが増えるように組んだのですが、
増やす数が多いと(25枚くらい)copyのところでひっかかってしまいます。
少ないと正常に動くのですが、それも例えば3枚増やすのを10回繰り返すと同じ現象でcopyできません。
いま、シートを3枚固定して4枚目以降を増やすようにしています。また、次に実行するときには4枚目以降を削除してから増やすように作ってあります。
ワークシートは255枚まで増やせるのでは?と思っていますが。

A 回答 (8件)

追加です。


>シート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さんのように作った場合は増えません。

補足日時:2005/10/04 11:36
    • good
    • 1
この回答へのお礼

対応策ありがとうございました。
今カレンダー系統のものを作成中で前の形式だと3年分くらいだったのが上記のようにした場合30年分以上は(1sheet/月)作ることができました。
20年出来れば十分過ぎます。
ありがとうございました。

お礼日時:2005/10/03 14:36

#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して分ります。非常に脆弱な部分を持ったファイル構造のように思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
これからメモリーとか勉強していきます。

お礼日時:2005/10/04 11:35

アップして頂いたコードで少し試して見ました。


(Windows2000/Office2000)
何も無いシートで実行すると300枚以上コピー可能です。
シート1にボタンを1個作成すると254枚
それにプラスして、シート2に40字弱の別ブックの表へのリンク式を80行30列記入した状態だと54枚程度になりました。
シート1に同じ式を記入して、他のシートが空だと149枚になりました。

ブックやシートの情報が増加するとコピー可能数が変動します。

>エラーが一度起きると次からはコピーしてくれません。

こちらの件も確認しました。
手動でのコピーも出来ませんね。
推測ですがシート管理で何か問題が発生しているのかもしれません。
現在の所では、回避策については解りかねます。
    • good
    • 0

ソースとは既に皆さんに回答頂いているように、マクロコードの意味です。



シート数等がメモリーに影響を受けるのは間違いありませんが、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

補足日時:2005/10/03 09:12
    • good
    • 0
この回答へのお礼

ご指摘ありがとうございました。
ソースを提示したところ、早速プロフェッショナルな答えが返ってきました。
改めて皆さんの技術力とネットのすばらしさを知りました。
私も他の人の質問に回答できるように勉強していきたいとおもいます。

お礼日時:2005/10/03 14:56

>「ソースもアップされては?」というのは・・・



ソースというのは、プログラムのソースコード(マクロ)の事です。

参考URL:http://e-words.jp/w/E382BDE383BCE382B9E382B3E383 …
    • good
    • 0

こんにちは。



昨日、途中で書きかけて、結局は、PCに依存するというのが結論なら、書かないほうがよいのかなって思ったのですが、少し、メモリについて説明をしておきます。

#1さんの言葉どおりなのですが、そのヘルプに書かれてある「使用可能なメモリ」というの『仮想メモリ』のことで、私は、その使用は、以下のような解釈をしています。

「Excelに許された『使用可能なメモリ』」として、シートの大きさにも依存してきます。シートにデータを入れると、その領域に対してメモリが大きくなります。入力したセル数ではありません。領域が小さければメモリが少ないですから、シート数も増えます。

他にも、
・値を入れたセル + 文字列 (これは全シートには及ばないようです。)
・書式設定の種類(つまり、例えば、スタイルで設定したほうが、#,##0 で個別に設定するよりもメモリ占有率が減ります)
・関数の参照範囲の種類(R1C1方式で見ると良く分ります)
・オブジェクト類
・フォントの種類
・1シートの計算過程で使用するメモリ
・VBAのモジュールを格納する各々のプロシージャ
・アドイン、プリンタドライバ、Excelで使われるユーティリティソフト
・OS のVersion/ CPU
・ExcelのVersion

などが、その仮想メモリに影響するようです。物理的メモリとは直接関係がないようです。それが、ブック全体で影響するものと、各シート、モジュールで影響するだけのものと分かれるようです。(今のところ、詳しい資料が手に入りませんが。)

ブック自体は、何十メガと大きくすることは出来ますが、その「Excelに許された『使用可能なメモリ』」というのは、数メガ(私のは約2メガ)しかありません。それぞれは、数バイト~10数バイトと微々たるものなのですが、累積的に膨れ上がるものですから、特殊な計算などすると、すぐに一杯になります。VBAのモジュールを使うときは、そのメモリ配分を考えておいたほうが良いときがあります。ひとつのモジュールに偏らせすぎないとか考えなくてはなりません。

こんなことを書いても、問題解決にはなりませんが、一応、情報として出しておきます。

#2のpapayukaさんの
>「ソースもアップされては?」というのはエクセルのバージョンアップということでしょうか?

トラブルのあるVBAコードを掲示してみたらいかがですか?、という意味です。
    • good
    • 0
この回答へのお礼

お礼遅れました。
ソースのアップという言葉も分からないくらいの者なので、メモリーのこともあまり良く分かっていません。
いろいろ勉強になりました。
ちなみに
>「Excelに許された『使用可能なメモリ』」というのは、数メガ(私のは約2メガ)しかありません。
これはどうやって調べるのでしょうか?

お礼日時:2005/10/03 14:48

Excelのバージョンは?


97だとSheetのCodeNameがSheet11111111111111111 のようになってエラーとなるバグがありました。
下記の例で動きますか?

Sub test()
 For i = 1 To 30
   Worksheets(1).Copy after:=Worksheets(Worksheets.Count)
 Next i
End Sub

ソースもアップされては?

この回答への補足

回答ありがとうございます
エクセルのバージョンは2003です。
書かれていた例でも動きます。
すみません素人なんでよくわからないのですが、
「ソースもアップされては?」というのはエクセルのバージョンアップということでしょうか?

補足日時:2005/10/02 06:08
    • good
    • 0

>ワークシートは255枚まで増やせるのでは?



お使いになっているPCの使用可能なメモリ量などに依存するので、どのPCでもその枚数まで可能であると言うことはありませんし、何枚までなら大丈夫と言うこともありません。

この回答への補足

回答ありがとうございます
使用しているPCはPen4の2.8GHZでメモリーは1G搭載しています。
そのファイルの実行時にタスクマネージャのパフォーマンスの利用可能メモリは500MB以上残っているのですが、これは関係ないのでしょうか。

補足日時:2005/10/02 06:02
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています