プロが教える店舗&オフィスのセキュリティ対策術

エクセルにてデータが同じものを横列に並べ替えたデータ
を作成したいのですがどなたか簡単に出来る方法を教えて
下さい。

元データ(A,Bとも文字データ)
A1 B1
A1 B2
A1 B3
A2 B1
A2 B3
A2 B4
A3 B1

を以下のように(Aが同じ場合に横にBを並べ替え)
A1 B1 B2 B3
A2 B1 B3 B4
A3 B1

よろしくお願いします。

A 回答 (3件)

皆さんの難しい式は読解しておりませんが、A列が仲間同士で並んでいなくても対応できるVBAコードです。


非連続セルをコピー貼り付けすると、エクセルが勝手に詰めてくれた事を思い出して組んでみました。
正統的でも、分かりやすくもないコードですが、ご参考まで。
’Sheet1のデータをSheet2に転記します。
Sub test()
Dim targetRange As Range, myCell As Range, destCell As Range
Dim myDic As Object, myKey As Variant

Set myDic = CreateObject("Scripting.Dictionary")
Set targetRange = Sheets("Sheet1").Range("A1").CurrentRegion
Set destCell = Sheets("Sheet2").Range("A1")
For Each myCell In targetRange.Columns(1).Cells
If Not myDic.exists(myCell.Value) Then
myDic.Add myCell.Value, myCell.Offset(0, 1)
Else
Set myDic.Item(myCell.Value) = Union(myDic.Item(myCell.Value), myCell.Offset(0, 1))
End If
Next myCell
For Each myKey In myDic.keys
destCell.Value = myKey
myDic.Item(myKey).Copy
destCell.Offset(0, 1).PasteSpecial Paste:=xlValues, Transpose:=True
Set destCell = destCell.Offset(1, 0)
Next myKey
Set myDic = Nothing
End Sub
    • good
    • 1

シート1のAおよびB列の2行目から下方にデータがあるとします。


シート1のC列は作業列としてC2セルには次の式を入力して下方にオートフィルドラッグします。

=IF(A2="","",IF(COUNTIF(A$2:A2,A2)=1,INT(MAX(C$1:C1)+1)+0.0001,INT(MAX(C$1:C1))+COUNTIF(A$2:A2,A2)*0.0001))

シート2にはお望みの表を作るとしてA2セルには次の式を入力して横方向にオートフィルドラッグしたのちに下方にもオートフィルドラッグします。

=IF(COUNTIF(Sheet1!$C:$C,ROW(A1)+0.0001)=0,"",IF(COLUMN(A1)=1,INDEX(Sheet1!$A:$A,MATCH(ROW(A1)+0.0001,Sheet1!$C:$C,0)),IF(COUNTIF(Sheet1!$C:$C,ROW(A1)+(COLUMN(A1)-1)*0.0001)=0,"",INDEX(Sheet1!$A:$B,MATCH(ROW(A1)+(COLUMN(A1)-1)*0.0001,Sheet1!$C:$C,0),2))))

この方法は配列数式にするなどの複雑なしかも計算に負担がかかるような方法を使用しておりません。
    • good
    • 5
この回答へのお礼

ご回答ありがとうございます。
関数でもできるとこをがわかり大変勉強になりました。

お礼日時:2011/04/23 23:32

こんにちは!


一例です。
↓の画像のようにSheet1のデータをSheet2に表示するようにしてみました。

Sheet1に作業用の列を設けています。
作業列C2セルに
=IF(COUNTIF($A$2:A2,A2)=1,ROW(),"")
としてオートフィルでずぃ~~~!っと下へコピー!

Sheet2のA2セルに
=IF(COUNT(Sheet1!C:C)<ROW(A1),"",INDEX(Sheet1!A:A,SMALL(Sheet1!C:C,ROW(A1))))

B2セルに
=IF(OR($A2="",COUNTIF(Sheet1!$A:$A,$A2)<COLUMN(A1)),"",INDEX(Sheet1!$B$1:$B$1000,SMALL(IF(Sheet1!$A$1:$A$1000=$A2,ROW($A$1:$A$1000)),COLUMN(A1))))
(これは配列数式になってしまいますので、Shift+Ctrlキーを押しながらEnterキーで確定します。)

このB2セルを列方向にコピーしておきます。
最後にA2~最終列2行目を範囲指定し、下へオートフィルでコピーすると画像のような感じになります。

なればよいのですが・・・m(__)m
「EXCELで重複行の横並びについて教えて」の回答画像1
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。
関数でもできるとこをがわかり大変勉強になりました。

この度は、図まで示していただきありがとうございました

お礼日時:2011/04/23 23:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A