エクセルの処理方法についての質問です。


A列に「部署名」、B列に「人名」が入力されています。
部署名は数十あり、人名は数千あり、人名は必ず部署に属しています。

上記のデータを下記のような形に変換したいのですが、どのような方法があるでしょうか?


【変換前】
 A列:部署名(重複あり)、B列:人名

【変換後】
 A列:部署名(重複なし)、B列:人名,人名,人名・・・
  OR
 A列:部署名(重複なし)、B列:人名、C列:人名、D列:人名・・・


部署名に対して、所属する人名を1行で表現する形に作り替えたいのですが、数が多いので、コピペでなくて自動的に処理できれば、、、というご相談です。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/12/27 15:41:53
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:taknt No.2

回答回数13539ベストアンサー獲得回数1198

ポイント300pt

VBAです。

Sub main()
Dim a As Long
Dim b As Long


元のデータがあるシート = "Sheet1"
新しくデータを入れるシート = "Sheet2"

開始行 = 2

a = 開始行

Do Until Worksheets(元のデータがあるシート).Cells(a, "A") = ""
    b = 開始行
    f = 1
    Do Until Worksheets(新しくデータを入れるシート).Cells(b, "A") = ""
        If Worksheets(元のデータがあるシート).Cells(a, "A") = Worksheets(新しくデータを入れるシート).Cells(b, "A") Then
            Worksheets(新しくデータを入れるシート).Cells(b, Worksheets(新しくデータを入れるシート).Cells(b, "A").End(xlToRight).Column + 1) = Worksheets(元のデータがあるシート).Cells(a, "B")
            f = 2
            Exit Do
        End If
        b = b + 1
    Loop
    
    If f = 1 Then
        Worksheets(新しくデータを入れるシート).Cells(b, "A") = Worksheets(元のデータがあるシート).Cells(a, "A")
        Worksheets(新しくデータを入れるシート).Cells(b, "B") = Worksheets(元のデータがあるシート).Cells(a, "B")
    End If
    a = a + 1
Loop

End Sub

元のシートから 新しいシートに作成し直します。
新しいシートは クリアされている状態にしてください。
あと 開始行や それぞれのシート名は 変更して使用してください。

↓ の箇所です。

元のデータがあるシート = "Sheet1"
新しくデータを入れるシート = "Sheet2"
開始行 = 2

id:hamocha

ありがとうございます。

2012/12/27 15:41:09
id:hamocha

とても助かりました。

2012/12/27 16:41:38

その他の回答1件)

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198

ポイント50pt

まず A列でソートします。
次に B列で 同一部署の行分を コピーします。
そして、その部署の最初のセルで 右クリックして 形式を選択して貼り付け、「行列を入れ替える」にチェックしてOKとします。

部署数が 少ないならば このやり方でいいと思います。


自動的にやるなら VBAで作成するしかないですね。

id:hamocha

部署数がかなり多く、そういったデータが複数ありますのでVBAで作成したいです。
(質問用に分かりやすく書きましたが、実際には部署:人名のデータではありません)
方法は分かるでしょうか?

2012/12/27 14:45:59
id:taknt No.2

回答回数13539ベストアンサー獲得回数1198ここでベストアンサー

ポイント300pt

VBAです。

Sub main()
Dim a As Long
Dim b As Long


元のデータがあるシート = "Sheet1"
新しくデータを入れるシート = "Sheet2"

開始行 = 2

a = 開始行

Do Until Worksheets(元のデータがあるシート).Cells(a, "A") = ""
    b = 開始行
    f = 1
    Do Until Worksheets(新しくデータを入れるシート).Cells(b, "A") = ""
        If Worksheets(元のデータがあるシート).Cells(a, "A") = Worksheets(新しくデータを入れるシート).Cells(b, "A") Then
            Worksheets(新しくデータを入れるシート).Cells(b, Worksheets(新しくデータを入れるシート).Cells(b, "A").End(xlToRight).Column + 1) = Worksheets(元のデータがあるシート).Cells(a, "B")
            f = 2
            Exit Do
        End If
        b = b + 1
    Loop
    
    If f = 1 Then
        Worksheets(新しくデータを入れるシート).Cells(b, "A") = Worksheets(元のデータがあるシート).Cells(a, "A")
        Worksheets(新しくデータを入れるシート).Cells(b, "B") = Worksheets(元のデータがあるシート).Cells(a, "B")
    End If
    a = a + 1
Loop

End Sub

元のシートから 新しいシートに作成し直します。
新しいシートは クリアされている状態にしてください。
あと 開始行や それぞれのシート名は 変更して使用してください。

↓ の箇所です。

元のデータがあるシート = "Sheet1"
新しくデータを入れるシート = "Sheet2"
開始行 = 2

id:hamocha

ありがとうございます。

2012/12/27 15:41:09
id:hamocha

とても助かりました。

2012/12/27 16:41:38

コメントはまだありません

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

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

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

回答リクエストを送信したユーザーはいません