[[20160407085528]] 『二つのキーを使用して、並べ替えを行いたい』(よういち) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『二つのキーを使用して、並べ替えを行いたい』(よういち)

シートからコピーしたものを、二つのキーを両方とも昇順に並べ替えたいのですが、
 

 社員番号   氏名   代休予定              代休取得日   
  12345       田中   H28.2.30       1      日      H28.3.2
  
という表です。氏名は社員番号が書かれたシートから「VLookUP」で拾い出す関数が、曜日はD列は「WEEK DAY」関数から数字を拾った数字が入り、E列はそれを利用して「VLookUP」で、代休予定日の曜日を調べます。

まず、社員番号で昇順にソートし、次は代休取得日でソートをし、最終的にA列からH列まで並べ替えるのが目的です。

    Dim i As Integer

    i = Cells(Rows.Count, 1).End(xlUp).Row

    Worksheets("集計").Activate

    Worksheets("集計").Range(Cells(2, 1), Cells(i, 8)).Sort Key1:=Worksheets("集計").Cells(2, 1), order1:=xlAscending

    Worksheets("集計").Range(Cells(2, 1), Cells(i, 8)).Sort Key2:=Worksheets("集計").Cells(2, 6), order2:=xlAscending

End Sub

変数を宣言するのは、最初に打ち込む表が増えていても最終行が使えるようにするためです。

走らせると、二つ目ソートVBAで

「実行時エラー'1004':1004

 RangeクラスのSortメソッドが失敗しました」で停止してしまいます。

解決策をどなたかお願いいたします。
 

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 一行にする必要があります。
 Dim i As Long
 With Worksheets("集計")
     i = .Cells(Rows.Count, 1).End(xlUp).Row
     .Range(.Cells(2, 1), .Cells(i, 8)).Sort Key1:=.Cells(2, 1), order1:=xlAscending, Key2:= .Cells(2, 6), order2:=xlAscending
End With
(seiya) 2016/04/07(木) 09:41

 これでもいけます。

    Dim i As Integer,sh As Worksheet
    Set sh = Worksheets("集計")
    i = sh.Cells(Rows.Count, 1).End(xlUp).Row

    With sh.Sort
        .SortFields.Clear ' 並べ替え条件をクリア
        .SortFields.Add Key:=sh.Cells(2, 1), Order:=xlAscending ' 第1優先キー(昇順)
        .SortFields.Add Key:=sh.Cells(2, 6), Order:=xlAscending ' 第2優先キー(昇順)
        .SetRange sh.Range(sh.Cells(2, 1), sh.Cells(i, 8)): .Header = xlNo: .Apply
    End With

 ********************************************************************************************
 seiya さんのを拝借してます。m(_ _)mぺこり

 一行が長い場合は、「半角スペース+アンダーバー」を行の途中に挿入して、改行します。
 下記では、「.Range(.Cells(2, 1),〜order2:=xlAscending」までが一行扱いです。

 Dim i As Integer
 With Worksheets("集計")
      i = .Cells(Rows.Count, 1).End(xlUp).Row
     .Range(.Cells(2, 1), .Cells(i, 8)).Sort _
                                        Key1:=.Cells(2, 1), order1:=xlAscending, _
                                        Key2:=.Cells(2, 6), order2:=xlAscending
 End With
(マリオ) 2016/04/07(木) 11:17

 よういちさん
 > Dim i As Integer
 これ Long型にした方が安全です。
(seiya) 2016/04/07(木) 11:50

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.