Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


17235 / 76732 ←次へ | 前へ→

【64954】Re:列によるソート
発言  kanabun  - 10/3/29(月) 16:42 -

引用なし
パスワード
   ▼もーはん さん:
>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) とする単一セルのことです。

0 hits

【64902】列によるソート もーはん 10/3/25(木) 22:10 質問
【64903】Re:列によるソート kanabun 10/3/25(木) 23:10 発言
【64947】Re:列によるソート もーはん 10/3/29(月) 10:09 質問
【64951】Re:列によるソート kanabun 10/3/29(月) 13:18 発言
【64953】Re:列によるソート もーはん 10/3/29(月) 15:47 発言
【64954】Re:列によるソート kanabun 10/3/29(月) 16:42 発言
【64961】Re:列によるソート もーはん 10/3/30(火) 13:02 発言
【64962】Re:列によるソート kanabun 10/3/30(火) 14:03 発言
【64965】Re:列によるソート もーはん 10/3/30(火) 17:29 お礼
【64958】Re:列によるソート Hirofumi 10/3/29(月) 23:31 回答

17235 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free