[[20100108084000]] 『連続転記の効率化』(あらくま) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『連続転記の効率化』(あらくま)
  
前の質問、[[20100107155944]]『メモリー不足表示出現!困った』との関係です。
 momoさんの助言で、
 >VBA内でしたら
 >変数に格納しているデータが大きいとか
 >無駄な処理が多いとか
 をもとに、共同作業者(私と同程度の力量)と考えて、次に示すマクロに問題が
 あるのではないかとの結論になりました。
 問題の核心を衝いていないかもしれませんが、とにかくより効率的な処理はな
 いでしょうか。
 現在の記述では、さかんに、処理画面がちらちら変わり・・・、ここで「メモ
 リー不足です。完全に表示できません。」の表示が出ることが多いような気が
 します。
 どなたか、ご指導いただけませんか?

 Sub 祝休日月シート転記()
  'シート(4月)へ祝日・休業名等転記
      Range("AJ7:AJ36").Copy
      Sheets("4月").Range("C3").PasteSpecial Paste:=xlValues
  'シート(5月)へ祝日・休業名等転記
      Range("AJ37:AJ67").Copy
      Sheets("5月").Range("C3").PasteSpecial Paste:=xlValues
  'シート(6月)へ祝日・休業名等転記
      Range("AJ68:AJ97").Copy
      Sheets("6月").Range("C3").PasteSpecial Paste:=xlValues
  'シート(7月)へ祝日・休業名等転記
      Range("AJ98:AJ128").Copy
      Sheets("7月").Range("C3").PasteSpecial Paste:=xlValues
  'シート(8月)へ祝日・休業名等転記
      Range("AJ129:AJ159").Copy
      Sheets("8月").Range("C3").PasteSpecial Paste:=xlValues
  'シート(9月)へ祝日・休業名等転記
      Range("AJ160:AJ189").Copy
     Sheets("9月").Range("C3").PasteSpecial Paste:=xlValues
  'シート(10月)へ祝日・休業名等転記
      Range("AJ190:AJ220").Copy
      Sheets("10月").Range("C3").PasteSpecial Paste:=xlValues
  'シート(11月)へ祝日・休業名等転記
      Range("AJ221:AJ250").Copy
      Sheets("11月").Range("C3").PasteSpecial Paste:=xlValues
  'シート(12月)へ祝日・休業名等転記
      Range("AJ251:AJ281").Copy
      Sheets("12月").Range("C3").PasteSpecial Paste:=xlValues
  'シート(1月)へ祝日・休業名等転記
      Range("AJ282:AJ312").Copy
      Sheets("1月").Range("C3").PasteSpecial Paste:=xlValues
  'シート(2月)へ祝日・休業名等転記
      If Range("$AB$6").Value = 0 Then
             Range("AJ313:AJ340").Copy              '閏年でない場合
        Else
             Range("AJ313:AJ341").Copy              '閏年の場合
      End If
        Sheets("2月").Range("C3").PasteSpecial Paste:=xlValues
  'シート(3月)へ祝日・休業名等転記
      If Range("$AB$6").Value = 0 Then
             Range("AJ341:AJ371").Copy              '閏年でない場合
        Else
             Range("AJ342:AJ372").Copy              '閏年の場合
      End If
        Sheets("3月").Range("C3").PasteSpecial Paste:=xlValues
     Application.CutCopyMode = False
  End Sub
                                  [Excel2003,WindowsXP]


 コピー&ペーストしているからメモリが不足するのかなぁなんて思います。
 なので、コピー&ペースト以外の方法が良いかと思われます。
 それかコピー&ペースト後に、コピーで確保したメモリを開放する方法
 などあるんでしょうかね?

 回答になっていませんね・・・
 (てつろう)

 てつろうさん、早速のご回答、ありがとうございました。
 >コピー&ペーストしているからメモリが不足するのかなぁなんて思います。
 コピー&ペーストって、そんなにメモリを使うのですか?

 >コピー&ペースト以外の方法
 >コピー&ペースト後に、コピーで確保したメモリを開放する方法
 どなたか、ご教示願えないでしょうか。
                              (あらくま)


 上記のコードが問題だとは思えませんが、一つ一つ潰していくことですね!!

    Range("AJ7:AJ36").Copy
      Sheets("4月").Range("C3").PasteSpecial Paste:=xlValues

 これは、

 With Range("AJ7:AJ36")
    Sheets("4月").Range("C3").Resize(.Rows.Count, 1).Value = .Value
 End With

 こんな書き方もできます(若干処理が遅いらしいですが)。

 これで試してみてください

 ichinose


 PC スペックにもよりますが、この程度のコピーでメモリ不足になるとは思えません。
 画面がちらちら変わり、というのはこれ以外の処理があると思うのですが、そちらが
 原因ではないでしょうか。

 タスクマネージャーで EXCEL のメモリ使用量を見ながら、マクロをステップ実行し
 本当に問題である場所を特定してはどうでしょうか。

 この手の問題はやみくもに適当な修正をしてもなかなかな解決しません。
 (Mook)

 全文検索から「完全に表示できません」と言うキーワードで探した結果出てくる関連情報を
一応確認してみるのも良いかと思います。

https://www.excel.studio-kazu.jp/cgi-bin/estindex/estseek2.cgi?phrase=%E5%AE%8C%E5%85%A8%E3%81%AB%E8%A1%A8%E7%A4%BA%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93&perpage=10&attr=&order=@uri+STRD&clip=-1&navi=0

 シートの表示倍率が100%以外の物があったら統一する、ってあたりが簡単に確認出来そうな所でしょうか。
次いで様々なフォントを使用していたらそれを統一する等。
(ご近所PG)

 ↓へ続く?
[[20100110115703]] 『For To Next 処理とコード記述の整理』(あらくま)

 (代理)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.