[[20151008104708]] 『並び替え』(ねこ) ページの最後に飛ぶ

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

 

『並び替え』(ねこ)

初めて質問します。
生年月日を基準に入社日が「H1.4.1」以外の場合は
入社日を優先して並び替えしたいのですが、うまくできません。
どうしたらいいでしょうか。教えてください。

     A      B
1 生年月日  入社日
2 S58.3.22   H1.4.1
3 S59.8.14   H22.4.1
4 S60.3.20   H21.4.1
5 S60.12.13  H1.4.1

並び替えたい順番としては、A2>A4>A3>A5となるようにしたいです。
宜しくお願いします。

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


 A列昇順 →B列昇順なら例表のままでいいんでないの?
 生年月日が基準ならA3とA4が入れ替わる理由がわかんない。

 ※同じ生年月日で入社が違う場合は入社が早いほうにするって意味じゃないの?
 
(GobGob) 2015/10/08(木) 11:21

GobGob様
ご回答ありがとうございます。

ただ、新卒者は年齢ではなく、入社順で並び替えたいので、
A3とA4が入れ替えたいのです。

方法があれば教えてください。

宜しくお願いします。
(ねこ) 2015/10/08(木) 13:17


 よーわからん。。。

 早い話が、生年月日でなく

 A列 4/2〜4/1の範囲 を B列「入社日」で昇順。
 ってことかい?
 
(GobGob) 2015/10/08(木) 13:46

	A	B	C
1	生年月日	入社日	基準
2	S58.3.22	H1.4.1	1982
3	S60.3.20	H21.4.1	1984
4	S59.8.14	H22.4.1	1984
5	S60.12.13	H1.4.1	1985

 C列作業列  C2 =YEAR(A2)-(MONTH(A2-1)<4)  下へコピー。

 A:C列 並び替え。 C列昇順 → B列昇順 の順番で。
  
(GobGob) 2015/10/08(木) 13:50

Sub main()
Dim var As Variant, cl As Range
With Sheets("Sheet1")
    .Sort.SortFields.Clear
    .Sort.SortFields.Add Key:=.Range("A:A"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With .Sort
        .SetRange Range("A:B")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

    var = .Range("A1").CurrentRegion.Value
    .Columns("C:D").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    .Range("C1").Resize(UBound(var, 1), UBound(var, 2)).Value = var

    .Sort.SortFields.Clear
    .Sort.SortFields.Add Key:=.Range("D:D"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With .Sort
        .SetRange Range("C:D")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

    For Each cl In Intersect(.Columns("B").Cells, .UsedRange)
        If IsDate(cl.Value) Then
        If cl.Value <> DateSerial(1989, 4, 1) Then cl.Value = ""
        End If
    Next cl
    For Each cl In Intersect(.Columns("D").Cells, .UsedRange)
        If IsDate(cl.Value) Then
            If cl.Value <> DateSerial(1989, 4, 1) Then
            .Range("B1").End(xlDown).Offset(1, -1).Value = cl.Offset(, -1).Value
            .Range("B1").End(xlDown).Offset(1).Value = cl.Value
            End If
        End If
    Next cl
    .Columns("C:D").Delete Shift:=xlToLeft
End With
End Sub
(mm) 2015/10/08(木) 15:14

お礼が遅くなりスイマセン。
お二人ともご回答ありがとうございます。

GobGob様
上記の4人に関してはうまくいったのですが、
下記の人たちのように順番が変わってしまう方が出てきてしまいました。
   A      B    C   
1 生年月日   入社日  基準
2 S59.8.14  H22.4.1  1984
3 S60.12.13  H1.4.1   1985
4 S60.3.20  H21.4.1  1985

文章力がなく、説明下手でスイマセン。

最優先は生年月日順です。
ただ、入社日が「H1.4.1」以外が入っている場合には
入社日を基準にして下記のように並び替えたいんです。
   A      B    
1 生年月日   入社日
3 S60.3.20  H21.4.1
2 S59.8.14  H22.4.1
3 S60.12.13  H1.4.1

mm様
ソース試してみましたが、下記のようになってしまい、うまくいきませんでした。
   A     B      C     D 
1 生年月日  入社日   生年月日 入社日
2 S58.3.22  H1.4.1   S58.3.22 H1.4.1
3 S60.3.20  H21.4.1  S60.12.13 H1.4.1
4 S59.8.14  H22.4.1  S60.3.20 H21.4.1
5 S60.12.13  H1.4.1   S59.8.14 H22.4.1

(ねこ) 2015/10/09(金) 12:32


 例題行が少なすぎて、ある程度想像で書いたけど
 こういうこと?

 Sub test()
    Dim x, i As Long
    Const myDate As String = "1989/4/1"
    With Cells(1).CurrentRegion
        With .Offset(1).Resize(.Rows.Count - 1)
            x = Filter(Evaluate("transpose(if(" & .Columns(2).Address & "=datevalue(""" & _
                myDate & """),row(1:" & .Rows.Count & "),char(2)))"), Chr(2), 0)
            If UBound(x) > -1 Then
                For i = 0 To UBound(x) - 1
                    With .Rows(x(i) + 1 & ":" & x(i + 1) - 1)
                        If .Rows.Count > 1 Then .Sort .Cells(1), 1
                    End With
                Next
            End If
        End With
    End With
End Sub

 もし違っていたら、10行程度の例題を提示した方がいいと思う。
(seiya) 2015/10/09(金) 13:07

 オイラは思い通りに並び変わるけど。。。。。

 >A:C列 並び替え。 C列昇順 → B列昇順 の順番で。

 並び替えの優先度、あってる? C列が1番、B列が2番

 ※参考に。。。
  >4 S60.3.20  H21.4.1  1985 
   は、1985でなく 1984 だよね?
 
(GobGob) 2015/10/09(金) 13:12

.Columns("C:D").Delete Shift:=xlToLeft
→ C,D列(作業列)は削除されませんか?
(mm) 2015/10/09(金) 13:33

コメント返信:

[ 一覧(最新更新順) ]


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