|
>そのまま併用してテストしてみましたが、かなり速いです
>しかし現状65536行まで今は、満たすデータが手元に無く
>しっかり試したわけでわないです。
先ず元々のコードの確認をして置きます
元のコードでは、品番と納期をKeyとして、このKeyが等しい行が合った場合
その行の計画数を合計して、Key重複の行を削除すると言う動作ですね?
一応、当方のコードは、この様に組んだつもりです
ただ、実際のデータで試して居ないので、結果が希望通りに出て居るのかを良く検証して下さい
また、このコードは、シート最終行から上にデータ最終行を探しているので
原理上、扱えるデータの最大行は65535行に成りますので宜しく
>1.再度質問したいのですがこれは、行数が、追加されてもこの速さ維持できますか??。
此れに就いてはどう言う意味なのか解りませんが?
先ず、元のコードに就いて言うと、最後の方で
「オートフィルターで空白以外のセルを絞り込む」の後、抽出された行をCopy、Pasteして居ます
この時、データ行数が多い場合Excelがエラーを出している様です(連続しない範囲が8192?箇所を超える)
此れが、フリーズした様に見える若しくはしている様です
実際、Testデータとして、61503行(内Keyに就いての重複20000行)のデータを用意して
Win98、Excel2000、メモリ256Mで実行した場合はフリーズ
Vista、Excel2007、メモリ2Gで実行した場合も1時間たっても終了しないので実行中止の状態でした
また、当方のコードで同じデータでTestした結果は
Win98、Excel2000、メモリ256Mで実行した場合は、10秒〜16秒程度で完了している様です
Vista、Excel2007の場合、2秒弱?
>2.素人に近い私ですので、この構文が理解できない部分がかなりあります。
>どういう流れの処理か簡潔に教えていただけないでしょうか?
フローは、
1、データの行数を取得
2、データ最終列の後ろの列(E列)に先頭〜最終行までの連番を振ります
3、データを品番順の納期順で整列します
4、データを上から見て行って、前の行と品番が等しく且つの納期が等しい場合
計画数を、品番、納期の同値先頭行に加算て行きます
同時に、同値の場合、2で振った連番を消し(削除する印を付ける)、
削除する行数をカウントします
ただ、連番の消去は直接セルに対して行わず、配列上で行ってLoop後にE列に再出力を行います
5、この作業が終わった所で、連番列(E列)をKeyとして全体を整列します
6、整列すると、連番を消去して行はデータの下に集まります
7、データ行の後ろから、カウントした削除行数分行削除を行います
以上
>3.もしこのままの速さで維持できるならばこのまま使わせていただきたいのですが・・・?
結果が合うなら、使って下さい(コード理解する努力も行って下さい)
後、B列の日付の書式設定を忘れていましたので以下の★印を追加して下さい
'列幅の調整
.Parent.Columns.AutoFit
'B列の書式設定
.Offset(, 1).Resize(lngRows).NumberFormat = "yyyy/m/d" '★追加
End With
Wayout:
|
|