|
>つまり、本の並びを一時的に別の場所にコピーし、
>そのコピーした物で重複削除の処理をしていると言う解釈でよろしいのでしょうか?
「本」?と言うのが解りませんが?
多分、イメージが違うと思います?
例として、処理するListが、A、B、C列の3列として、
重複を比較する列がA列だった場合
A列 B列 C列
1 2 B い
2 1 D あ
3 2 B い
4 4 A え
5 4 A え
6 4 A え
7 5 G お
8 3 H う
1、D列に、先頭行を1としてデータ行分の連番を出力します
A列 B列 C列 D列
1 2 B い 1
2 1 D あ 2
3 2 B い 3
4 4 A え 4
5 4 A え 5
6 4 A え 6
7 5 G お 7
8 3 H う 8
2、A列をKeyとして、A〜D列を昇順整列を行います
A列 B列 C列 D列
1 1 D あ 2
2 2 B い 1
3 2 B い 3
4 3 H う 8
5 4 A え 4
6 4 A え 5
7 4 A え 6
8 5 G お 7
3、データ行数分の2元配列を確保します
この時、配列の最初の次元が行、次の次元を列とします
ただ、このコードでは、D列に出力する連番を作成した配列を再利用しています
4、A列(実際には処理速度を上げる為、直接セルを比較するのでは無く、
事前に配列にA列データを取得しています)を上下で比較して、重複している場合
lngNumbの配列に1を立て、重複していない場合0を立てます
5、lngNumbの配列をE列に出力します
A列 B列 C列 D列 E列
1 1 D あ 2 0
2 2 B い 1 0
3 2 B い 3 1
4 3 H う 8 0
5 4 A え 4 0
6 4 A え 5 1
7 4 A え 6 1
8 5 G お 7 0
6、A〜E列までを、E列をKey1、D列をKey2として昇順整列を掛け、
削除行をListの後ろに集め、かつListの順を元に戻します
A列 B列 C列 D列 E列
1 2 B い 1 0
2 1 D あ 2 0
3 4 A え 4 0
4 5 G お 7 0
5 3 H う 8 0
6 2 B い 3 1
7 4 A え 5 1
8 4 A え 6 1
7、Listの後ろに集めた削除行を一括して削除します
A列 B列 C列 D列 E列
1 2 B い 1 0
2 1 D あ 2 0
3 4 A え 4 0
4 5 G お 7 0
5 3 H う 8 0
6
7
8
8、D、E列を削除します
A列 B列 C列 D列 E列
1 2 B い
2 1 D あ
3 4 A え
4 5 G お
5 3 H う
6
7
8
先ず、テスト用のデータを作成して、
'画面更新の停止
Application.ScreenUpdating = False
をコメントアウトして、ステップ実行して見れば解ると思いますが?
|
|