[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『二つのキーを使用して、並べ替えを行いたい』(よういち)
シートからコピーしたものを、二つのキーを両方とも昇順に並べ替えたいのですが、
社員番号 氏名 代休予定 代休取得日 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.