[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『複数列の一括入れ替え方法(至急)』(ちゃーーこ)
下記のような一覧表で、
(それぞれの人が、その日付に何色を選んだか…のリストです。1行目が項目名)
なんらかの作業をして(なるべく簡単な)一括で、人名ごとに、左から日付順に並び替え&入れ替えを行いたいのですが、方法を教えてください。
人名 日付 色 日付 色 日付 色
A氏 5/30 緑 1/16 赤 8/12 黄
B氏 9/17 白 4/15 青 5/22 桃
↓
この表を一括で
↓
人名 日付 色 日付 色 日付 色
A氏 1/16 赤 5/30 緑 8/12 黄
B氏 4/15 青 5/22 桃 9/17 白
こうなるように左から日付順になるように
並び替え?入れ替え?を行いたいです。
Excel2003 WindowsXPです。
宜しくお願い致します。
A B C D E F G 1 人名 日付 色 日付 色 日付 色 2 A氏 5月30日 緑 1月16日 赤 8月12日 黄 3 B氏 9月17日 白 4月15日 青 5月22日 桃 4 5 6 7 8 A氏 1月16日 赤 5月30日 緑 8月12日 黄 9 B氏 4月15日 青 5月22日 桃 9月17日 白 10
A8 =A2 B8 =IF(B2="","",SMALL(2:2,COLUMN(B1)/2)) C8 =IF(B8="","",INDEX(2:2,MATCH(B8,2:2,0)+1))
B8:C8 右へコピー。
8行目 下にコピー。
8行目以下を元の票に値貼り付け
※同一行に同じ日付があるとNG
(GobGob)
1)範囲そのものを変換 Sub test() With Cells(1).CurrentRegion .Value = Application.Index(.Value, Evaluate("row(1:" & .Rows.Count & ")"), Array(1, 4, 5, 2, 3, 6, 7)) End With End Sub
2)範囲の下に変換したければ
Sub test2() With Cells(1).CurrentRegion .Offset(.Rows.Count + 2).Value = _ Application.Index(.Value, Evaluate("row(1:" & .Rows.Count & ")"), Array(1, 4, 5, 2, 3, 6, 7)) End With End Sub (seiya) Array のIndexを修正 11:03
こんにちは
配列の一括転記では対応出来ないケースのような気がします。
Sub test() Dim mSh As Worksheet Dim tSh As Worksheet Dim h As String
Set mSh = Worksheets("Sheet1") '修正元シート名 Set tSh = Worksheets("Sheet2") '一時使用シート名
With mSh h = .Range("A1").CurrentRegion.Rows(2).Address(0, 1, xlA1, True) .Range("A1").CurrentRegion.Copy tSh.Range("A1") With tSh.Range("A1").CurrentRegion With .Offset(1, 1).Resize(.Rows.Count - 1, .Columns.Count - 1) .Formula = _ "=IF(" & mSh.Name & "!B2="""",""""," & _ "IF(MOD(COLUMN(" & mSh.Name & "!B2),2)=0," & _ "SMALL(" & h & ",INT(COLUMN(" & mSh.Name & "!B2)/2))," & _ "OFFSET(" & mSh.Name & "!$A2,0,MATCH(A2," & h & ",0))))" End With End With .Range("A1").CurrentRegion.Value = tSh.Range("A1").CurrentRegion.Value End With tSh.Range("A1").CurrentRegion.ClearContents End Sub
(ウッシ)
> 配列の一括転記では対応出来ないケースのような気がします。 出来てるよ? (seiya)
こんにちは
人名 日付 色 日付 色 日付 色 A氏 5/30 緑 1/16 赤 8/12 黄 B氏 9/17 白 4/15 青 5/22 桃 ↓ 人名 日付 色 日付 色 日付 色 A氏 1/16 赤 5/30 緑 8/12 黄 B氏 4/15 青 9/17 白 5/22 桃
B氏の並びが日付順になってないと思います。 違うかな・・・
(ウッシ)
ああ.. >日付順 これ見逃し... (seiya)
これかな? Sub test() Dim a, i As Long, ii As Long, t As Long, e, w With Cells(1).CurrentRegion a = .Value With CreateObject("System.Collections.SortedList") For i = 2 To UBound(a, 1) For ii = 2 To UBound(a, 2) Step 2 If Not .Contains(a(i, ii)) Then ReDim w(1 To 1) Else w = .Item(a(i, ii)) ReDim Preserve w(1 To UBound(w) + 1) End If w(UBound(w)) = a(i, ii + 1) .Item(a(i, ii)) = w Next t = 1 For ii = 0 To .Count - 1 For Each e In .GetByIndex(ii) t = t + 1 a(i, t) = .GetKey(ii) t = t + 1 a(i, t) = e Next Next .Clear Next End With .Value = a End With End Sub (seiya)
40分返事が無いだけで「至急」なんて描き足してマルチポストしてる割には全く返事無しとは全然「至急」ではないようだな。
(マルチーズ)
皆さん、回答ありがとうございました。
seiyaさんの教えてくださったやり方で出来ました。
本当に本当に助かりました。
感謝です。
(ちゃーーこ)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.