人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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


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

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


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

●質問者: hamocha
●カテゴリ:ビジネス・経営 コンピュータ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● きゃづみぃ
●50ポイント

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

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


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


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

2 ● きゃづみぃ
●300ポイント ベストアンサー

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


hamochaさんのコメント
ありがとうございます。

hamochaさんのコメント
とても助かりました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ