|
▼もーはん さん:
>kanabun さんへ
>
>はい。試してみて、ソートで並び換えが出来、
>戻した後も、小さい順に並んでいるのですが、
>同じ数字通しは、同じ行にはなっていない状態です。
>
>それを同じ行にしたいのです。
はは〜、そういうことでしたか?
Try1()をすこし改良し、こんなのでは?
Sub Try2()
Dim i As Long
Dim c As Range
Dim r As Range
Dim ok As Long
Set r = ActiveSheet.UsedRange.Resize(, 6)
For Each c In r.Columns(5).Cells
'E列データであることをIDプロパティにメモしておく
c.ID = "E"
Next
'[E:F]列を [A:B]列に移動
r.Columns(5).Resize(, 2).Cut r.Item(r.Rows.Count + 1, 1)
'[A:B]列データを A列をキーにしてSort
Set r = ActiveSheet.UsedRange.Resize(, 2)
r.Sort r.Columns(1), Header:=xlNo
'[A]列データのうちIDのあるものを 元のE列に戻す
For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
Set c = Cells(i, 1).Resize(, 2)
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
なお、 変数c はRangeオブジェクトですが、
c(1,1) というのは c.Item(1,1) の簡略表記で、
たとえば、c が [A8:B8]セル範囲のことだとすると、
c.Item(1,1) は [A8]セルのことで、
c.Item(1,2) は [B8]セルを指します。
c.Item(0,1) とは c(1,1)の一行上ですから、[A7]セルのことです。
Itemプロパティによって指定されるセルは
範囲の左上セルを(1,1) とする単一セルのことです。
|
|