A列に「部署名」、B列に「人名」が入力されています。
部署名は数十あり、人名は数千あり、人名は必ず部署に属しています。
上記のデータを下記のような形に変換したいのですが、どのような方法があるでしょうか?
【変換前】
A列:部署名(重複あり)、B列:人名
【変換後】
A列:部署名(重複なし)、B列:人名,人名,人名・・・
OR
A列:部署名(重複なし)、B列:人名、C列:人名、D列:人名・・・
部署名に対して、所属する人名を1行で表現する形に作り替えたいのですが、数が多いので、コピペでなくて自動的に処理できれば、、、というご相談です。
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
まず A列でソートします。
次に B列で 同一部署の行分を コピーします。
そして、その部署の最初のセルで 右クリックして 形式を選択して貼り付け、「行列を入れ替える」にチェックしてOKとします。
部署数が 少ないならば このやり方でいいと思います。
自動的にやるなら VBAで作成するしかないですね。
部署数がかなり多く、そういったデータが複数ありますのでVBAで作成したいです。
(質問用に分かりやすく書きましたが、実際には部署:人名のデータではありません)
方法は分かるでしょうか?
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
ありがとうございます。
とても助かりました。
ありがとうございます。
2012/12/27 15:41:09とても助かりました。
2012/12/27 16:41:38