[[20120213131048]] 『「選択範囲が大きすぎます」の理由を教えて下さい』(ひっぽ) ページの最後に飛ぶ

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

 

『「選択範囲が大きすぎます」の理由を教えて下さい』(ひっぽ)

 複数のシートがあり、それぞれ異なる数のデータがあります。
それぞれのシートはデータに対してあらかじめベースとなる数式が入力されており、
その数式をコピーしデータの個数に合わせて貼り付けを行っています。
シートは複数あるため全てのシートに対してコピー貼り付けを連続処理させています。
これらの作業はマクロで処理しています。

 例)
 A1:D2000にデータがあり、F1:H1にベースの数式があります。
 このベースをコピーしF2:H2000に貼り付けをしています。
 データ数2000行はシートごとにランダムで変わります。

 最初は順調に動いていたのですが、なぜか途中で「選択範囲が大きすぎます」とエラーが出てしまいます。

 調べると次のようなものが見つかったのですが、データ数は2000〜3000に納まり、全て連続したデータなのでこれが原因ではないようです。
http://support.microsoft.com/kb/832293/ja 

 コードはあまりにも膨大なためあえて記載しませんが、原因と対策を教えていただけないでしょうか?
 (必要であれば抜粋して載せます)

 抜粋を載せておきます。
 For Each ws In Worksheets
    For i = 1 To 3
        DataMaxRow = Range("A1").Offset(0, i - 1).End(xlDown).Row
        Range("F1").Offset(0, i - 1).Resize(1, 2).Copy
        Range("F1").Offset(1, i - 1).Resize(DataMaxRow(i) - 1, 1).PasteSpecial
        Application.CutCopyMode = False
    Next
 Next

 ひっぽ

 色々試した結果、どうやらマクロが原因ではないことは確かなようです。
データが2009行分あるシートに対して手動でコピペしたら貼り付けが出来たのですが、
マクロでエラーが出たシートは2009行以上あり、ためしに2009行分だけ貼り付けを行おうとしたら、
貼り付けが出来ませんでした。 1500でもだめで1000くらいで貼り付けできました。

 エクセルの仕様なんでしょうか?
 XP EL2003 です。

 ひっぽ

 マクロでエラーが出ないシートで、2009行以上あるシートに対して手動でコピペ もOKでしょうか?
 それから、マクロでコピペした場合もOKなのでしょうか?

 マクロでエラーが出るシートだけ、1000程度のコピーしか出来ないなら
 そのシートに何か問題が有るのではないかと思えますが。。。

 >なぜか途中で「選択範囲が大きすぎます」とエラーが出てしまいます。
 このエラーは、いつも同じシートで出るのでしょうか?
 それとも、同じデータを使っていても 実行する毎にエラーが出るシートは違うのでしょうか?

 (HANA)


 回答ありがとうございます。

 >マクロでエラーが出ないシートで、2009行以上あるシートに対して手動でコピペ もOKでしょうか?
 >それから、マクロでコピペした場合もOKなのでしょうか?
2009行以上あるほかのシートでは問題ないようです。

 >マクロでエラーが出るシートだけ、1000程度のコピーしか出来ないなら
 >そのシートに何か問題が有るのではないかと思えますが。。。
問題のシートで少しずつ列を削除していくと、2009行以上でもコピペが可能になりました。
どのシートも「フォーム」というベースとなるシートをリネームしてデータを貼り付けて数式をコピペするだけの作業しかしていないため、
シートに問題があるとすれば、全てのシートに起きる気がするのですが…
特定のシートだけ問題が起きることはありえるのでしょうか?

 >>なぜか途中で「選択範囲が大きすぎます」とエラーが出てしまいます。
 >このエラーは、いつも同じシートで出るのでしょうか?
 >それとも、同じデータを使っていても 実行する毎にエラーが出るシートは違うのでしょうか?
必ず同じシートでエラーが発生します。
今回の事象では10個のシート(繰り返し回数10回)に貼り付け作業をしており、10個目のシートでエラーが発生しています。
2009行以上あるシートは5つ目のシートにもあり、こちらは問題なく貼り付け処理が出来るため、順番が原因の可能性も考えられるため、
問題が出たデータだけ(繰り返し回数1回)を対象にマクロ動かしましたが、やはりエラーが出ました。

 現状は、エラーが出ない1000行単位で貼り付け処理を行う方法でエラーを回避させて問題なく動いていますが、
今後のために解決したいと思っています。

 原因や対策をご存知でしたら、ご教授願います。

 ひっぽ より

 >どのシートも「フォーム」というベースとなるシートをリネームして
 この作業は、同じコード内でやっているのでしょうか?
 それとも「そもそもそう言うシートだ」と言う事でしょうか?

 取り敢えず、自分だったら試して見る事を書いてみます。

 >10個目のシートでエラーが発生しています。
 >問題が出たデータだけ(繰り返し回数1回)を対象にマクロ動かしましたが
 の挙動確認はして居られる様ですが
 このシートの位置を変更(3番目とか)してもダメなんですよね?

 >データを貼り付けて数式をコピペするだけの作業しかしていないため
 おなじデータを別のシートに貼り付けて数式をコピペした場合は?
 正常に動くシート名を10個目のシート名にしてみたら?
 10個目のシート名を正常に動くシート名にしてみたら?

 そのシートを一旦削除し、手作業で ベースシートから作り直し&データ貼り付け
 作業をしてから、コピー処理をしてみるとどうなんでしょう?

 (HANA)

 For Each ws In Worksheets 内でcsvデータを開いてベースシートに貼り付け、
ベースシートにあらかじめ用意されている数式をデータの個数分貼り付ける処理をしているため、
同じコード内で行っています。

 ご提案の方法を試してみた結果を報告させていただきます。

 手動で貼り付けを行った結果、
問題となったデータ以外でも貼り付けエラーが起きることが分かりました。
ctrl+cとctrl+vで手動処理を行ったのですが、この方法であると貼り付けエラーが出るようです。
数式貼り付けすると問題ないようです。

 そこでコードを振り返ってみると
Range("F1").Offset(1, i - 1).Resize(DataMaxRow(i) - 1, 1).PasteSpecial
となっているため
Range("F1").Offset(1, i - 1).Resize(DataMaxRow(i) - 1, 1).PasteSpecial  Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
のように数式貼り付けにコードを変更することでエラーが出なくなりました。

 ただし、貼り付け処理を1つのシートで3つ行っているのですが、
その内の1つだけ数値貼り付けコードに変更してもエラーが発生する現象が起きました。
手動で数式貼り付けを行うと問題ないのですがく、なぜかマクロだとエラーが起きます。
貼り付け処理のコードの前に
貼り付け場所をSelectしてから
貼り付け処理をするとエラーなく動くようになりました
なぜSelectが必要かはなぞですが…

 手動ではエラーが起き、修正前のコードではエラーが起きなかったケースですが
手動貼り付けは自動記録でコードを確認すると
Selection.Paste
です。
今回、修正前では
.PasteSpecial
としていたのですが、PasteSpecialの後に何も書かなければ
Paste=PasteSpecial
と思っていたのですが、違うんですね。

 それと、ベースシートにcsvデータを張り付け数式の手動コピペを行うとエラーが出たため、
新規のシートにcsvデータを貼り付け、数式の手動コピペを行ったら、エラーが出ませんでした。
ベースシートには他にもグラフやがあったり、新規に対して色々な情報がたくさん入っているため
この辺が悪さの原因なのかもしれません。
どのくらい余計な情報があると貼り付けに支障をきたすのか知りたいところです。
エクセルの限界を垣間見た感じがしました。

 アドバイスにより色々なことが分かりました。
ありがとうございました。

 ひっぽ より

 回避策が見つかりましたか。
 ただ、理由が分からないのは すっきりしないですね。
 5枚目はOKだけど、10枚目はNG とか。。。

 コピーする範囲が違ったりするなんて事は無いんですよね?

 その内何か思い当たる点が見つかったら
 追加情報でも載せておいてもらえると良いと思います。

 (HANA)

コメント返信:

[ 一覧(最新更新順) ]


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