[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『重複するデータを1つだけ残し、列を行に移動したい』(KI)
Sheet1に、
A B C D
1 1 山田 山田住所 りんご
2 2 山田 山田住所 みかん
3 3 山田 山田住所 もも
4 1 鈴木 鈴木住所 りんご
5 2 鈴木 鈴木住所 もも
6 1 石井 石井住所 りんご
7 1 本田 本田住所 りんご
とあるものを
Sheet2に、
A B C D E F
1 1 山田 山田住所 りんご みかん もも
2 1 鈴木 鈴木住所 りんご もも
3 1 石井 石井住所 りんご
4 1 本田 本田住所 りんご
としたいのですが、できますでしょうか? 宜しくお願いいたします。 Excel2002 WindowsXP
作業列を配置するものです。配列数式よりは軽いと思いますが、 広範囲に数式を展開しますと、負荷がかかります。 (6UP)
Sheet1のA列に列を挿入し、A1に=COUNTIF(B$1:B1,1)として、A7までフィルドラッグ。 これは、作業列です。
Sheet2のA1に=MATCH(ROW(A1),Sheet1!A$1:A$7,)として、A7までフィルドラッグ。 これも作業列です。
B2に=IF(ISNA($A1),"",INDEX(Sheet1!B$1:B$7,$A1))として、 コピーして、B1:E7に貼り付け。
F1に =IF(ISNA($A1),"",IF(COLUMN(B2)>COUNTIF(Sheet1!A$1:A$7,ROW(A1)),"", INDEX(Sheet1!$E$1:$E$7,$A1+COLUMN(A1)))) として、D7までフィルドラッグ。さらに右の必要な範囲までフィルドラッグ。
== Sheet1 == A B C D E F G 1 1 1 山田 山田住所 りんご 2 1 2 山田 山田住所 みかん 3 1 3 山田 山田住所 もも 4 2 1 鈴木 鈴木住所 りんご 5 2 2 鈴木 鈴木住所 もも 6 3 1 石井 石井住所 りんご 7 4 1 本田 本田住所 りんご ↑ =COUNTIF(B$1:B1,1)
== Sheet2 == 1 1 1 山田 山田住所 りんご みかん もも 2 4 1 鈴木 鈴木住所 りんご もも 3 6 1 石井 石井住所 りんご 4 7 1 本田 本田住所 りんご 5 #N/A 6 #N/A ↑ 7 #N/A =IF(ISNA($A1),"",IF(COLUMN(B2)>COUNTIF(Sheet1!A$1:A$7,ROW(A1)),"", INDEX(Sheet1!$E$1:$E$7,$A1+COLUMN(A1)))) ↑ =IF(ISNA($A1),"",INDEX(Sheet1!B$1:B$7,$A1)) ↑ =MATCH(ROW(A1),Sheet1!A$1:A$7,)
ディクショナリで。
(ROUGE)
'----
Sub test()
Dim tbl, i As Long, x, ky, dic As Object
With Sheets("Sheet1")
tbl = Intersect(.Range("B1").CurrentRegion, .Range("B:B")).Resize(, 3)
End With
Set dic = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(tbl, 1)
ky = tbl(i, 1) & "_" & tbl(i, 2)
If Not dic.Exists(ky) Then
dic.Add ky, Array(tbl(i, 1), tbl(i, 2), tbl(i, 3))
Else
x = dic(ky)
ReDim Preserve x(UBound(x) + 1)
x(UBound(x)) = tbl(i, 3)
dic(ky) = x
End If
Next
Sheets("Sheet2").Cells.ClearContents
i = 0
For Each ky In dic.Keys
x = dic(ky)
i = i + 1
Sheets("Sheet2").Cells(i, 1).Value = 1
Sheets("Sheet2").Cells(i, 2).Resize(, UBound(x) + 1).Value = _
Application.Transpose(Application.Transpose(x))
Next
Set dic = Nothing
Erase tbl
End Sub
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.