[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『並び替え』(ねこ)
初めて質問します。
生年月日を基準に入社日が「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
ただ、新卒者は年齢ではなく、入社順で並び替えたいので、
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
.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
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.