|
▼もーはん さん:
>kanabun さんへ
>
>内容はやりたいことズバリでした。
>コードについてお聞きしたいのですが、
>
>この部分のコードの意味が良く理解出来ません。お教え願います。
>> If Len(c(1).ID) Then
>> ok = 1
>> If i > 1 Then
>> If c(0, 1).Value = c(1, 1).Value Then ok = 0
>> End If
>> c.Cut c(ok, 5)
>> If ok = 0 Then Rows(i).Delete
>> End If
>> Next
>>
>>End Sub
> '[A]列データのうちIDのあるものを 元のE列に戻す
'Sort後のA列を一番下のデータセルから順に調べていきます
'(なぜ下からかというと、行削除することがあるため)
> For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
'↓変数c に i行のA:B列分をセットします
> Set c = Cells(i, 1).Resize(, 2)
'↓c範囲のA列のIDに何か文字列が入っていたら、元の列に
' 戻す処理を行います
> If Len(c(1).ID) Then
'移動先行はi行のことと(i-1)行のことがあるので
'その分岐をする変数ok の初期値を1にします
'(ok=1 のときは 同じi行です)
> ok = 1
> If i > 1 Then
'↑調査行が2行目以降のときだけ
' ↓ひとつ上のセルの値と同じかどうか、調べます
' 同じであれば、変数okを 0 に代えます
> If c(0, 1).Value = c(1, 1).Value Then ok = 0
> End If
'以上で、上のセルの値との比較が実行されました。
'↓i行のA,B列範囲をCutしてE列に移動します。
範囲c をCut して、範囲cから見て
ok行目の5列目に範囲を移動します。
(A列のi行の値が(i-1)行の値と同じなら ok = 0、
ちがっていれば ok = 1 です)
ok = 1 なら、いま調査しているi行のこと、
ok = 0 なら、ひとつ上の(i-1)行へ、ということです。
> c.Cut c(ok, 5)
' ↓ひとつ上の行へ移動したときは元のi行全体を削除します
> If ok = 0 Then Rows(i).Delete
> End If
> Next '以上を1行目まで繰り返します
|
|