エクセルで下記のようなデータとなっている場合に、


田中 中川
本多 湯沢
山本 田中
岸本 土田
土田 

これを、下記のように並べ替える方法はありますか?
田中 田中
本多 
山本 
岸本 
土田 土田
   中川
   湯沢

つまり、1列目は動かさず、1列目のデータを元に2列目のデータの中で1列目と同じデータがある場合、
そのヨコに持ってくる。
該当するデータがない場合は、そこは空欄となる。
2列目にしかないデータの場合は、1列目の一番下の、データ未入力部のヨコにもってくる。

このようにしたいのですが、どのようにすればよいでしょうか?

回答の条件
  • 1人2回まで
  • 登録:2009/12/04 08:26:17
  • 終了:2009/12/04 12:05:50

ベストアンサー

id:SALINGER No.1

SALINGER回答回数3454ベストアンサー獲得回数9692009/12/04 08:58:10

ポイント60pt

VBAを使えば一発でできます。

以下のコードをコピペして実行してみてください。

コードではA列とB列にデータがある場合を想定して作ってあります。

Sub Macro()
    Application.ScreenUpdating = False
    Dim lastRow1 As Long
    Dim lastRow2 As Long
    Dim i As Long
    Dim j As Long
    Dim f As Boolean
    Dim c As Long
    c = 1
    lastRow1 = Cells(Rows.Count, 1).End(xlUp).Row
    lastRow2 = Cells(Rows.Count, 2).End(xlUp).Row
    Columns("C:C").Insert Shift:=xlToRight
    For i = 1 To lastRow2
        f = False
        For j = 1 To lastRow1
            If Cells(i, 2).Value = Cells(j, 1).Value Then
                f = True
                Exit For
            End If
        Next j
        If f Then
            Cells(j, 3).Value = Cells(i, 2).Value
        Else
            Cells(lastRow1 + c, 3).Value = Cells(i, 2).Value
            c = c + 1
        End If
    Next i
    Columns("B:B").Delete Shift:=xlToLeft
    Application.ScreenUpdating = True
End Sub
id:kanienoteiou

すばらしい!完璧です!

おかげさまで解決しました!!

2009/12/04 12:05:17
  • id:kaiton
    質問の2列目を、4列目あたりにコピーして、関数でしてみました。(参考まで)
    1列目がA1:A5にあり、比較するデータがD1:D4にある場合、

    B1=IF(ISERROR(MATCH(A1,$D$1:$D$6,0)),"",A1)
    これをB5まで下にコピー

    E1=IF(ISERROR(MATCH(D1,$A$1:$A$5,0)),ROW(),"")
    これをE4まで下にコピー

    B6=IF(COUNT(E:E)>=ROW()-5,INDEX($D$1:$D$4,MATCH(SMALL($E$1:$E$4,ROW()-5),$E$1:$E$4,FALSE),1),"")
    これを下に適宜コピー

    データ量によって、範囲とか B6の数式 ROW()-5 の部分は調整が必要です。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません