
EXCELで以下のようなデータを元に表を作成したいのですが、どうすれば良いでしょうか?
データ1(シート1)・個人別所有個数
所属部署コード 社員ID 所有個数
ABC 12345 30
BCD 23456 25
DEF 34567 40
BBB 44444 20
CCC 55555 15
ABC 12348 20
BCD 22222 80
DEF 33333 30
BBB 55555 100
BCD 23417 50
データ2(シート2)・所属部署名
所属部署コード 部署名
ABC AAABBBCCC
BCD BBBCCCDDD
DEF DDDEEEFFF
BBB BBBXXXYYY
CCC CCCAAAXXX
上記のデータ1とデータ2を元に別シートに以下の2つの表を作成したいのです。
表1・所有個数の多い社員から順番に並べる。
所属部署コード 部署名 社員ID 所有個数
BBB BBBXXXYYY 55555 100
BCD BBBCCCDDD 22222 80
BCD BBBCCCDDD 23417 50
DEF DDDEEEFFF 34567 40
ABC AAABBBCCC 12345 30
DEF DDDEEEFFF 33333 30
BCD BBBCCCDDD 23456 25
BBB BBBXXXYYY 44444 20
ABC AAABBBCCC 12348 20
CCC CCCAAAXXX 55555 15
表2・所有個数の多い部署を多い順に並べる
部署名 部署名 個数
BCD BBBCCCDDD 155
BBB BBBXXXYYY 120
DEF DDDEEEFFF 70
ABC AAABBBCCC 50
CCC CCCAAAXXX 15
以上です。よろしお願いします。
No.1ベストアンサー
- 回答日時:
以下でどうなりますか
データ1のシート名:Sheet1
データ2のシート名:Sheet2
それぞれの表は A1 から出来上がっているものと仮定します
Public Sub Samp1()
Dim dic As Object
Dim vA As Variant, vB As Variant, v As Variant
Dim i As Long, k As Long
Set dic = CreateObject("Scripting.Dictionary")
With Worksheets("Sheet2")
vA = .Range("A1", .Cells(Rows.Count, "A").End(xlUp)) _
.Resize(, 2).Value
End With
ReDim Preserve vA(1 To UBound(vA), 1 To 3)
vA(1, 3) = "個数"
For i = 2 To UBound(vA)
dic(vA(i, 1)) = i
Next
With Worksheets("Sheet1")
vB = .Range("A1", .Cells(Rows.Count, "A").End(xlUp)) _
.Resize(, 3).Value
End With
ReDim Preserve vB(1 To UBound(vB), 1 To 4)
vB(1, 4) = vB(1, 3)
vB(1, 3) = vB(1, 2)
vB(1, 2) = vA(1, 2)
For i = 2 To UBound(vB)
vB(i, 4) = vB(i, 3)
vB(i, 3) = vB(i, 2)
k = dic(vB(i, 1))
If (k > 0) Then
vB(i, 2) = vA(k, 2)
vA(k, 3) = vA(k, 3) + vB(i, 4)
Else
vB(i, 2) = ""
End If
Next
' ★~
Application.ScreenUpdating = False
For Each v In Array(vB, vA)
Worksheets.Add After:=Worksheets(Worksheets.Count)
With Range("A1").Resize(UBound(v), UBound(v, 2))
.Value = v
.Sort .Cells(.Columns.Count), xlDescending _
, .Cells(1), , xlAscending, Header:=xlYes
With .Rows(1)
.Interior.ColorIndex = 15
.HorizontalAlignment = xlCenter
End With
.Borders.LineStyle = xlContinuous
.EntireColumn.AutoFit
End With
Next
Application.ScreenUpdating = True
' ~★
Set dic = Nothing
End Sub
上記では、結果を別々のシートに出力していますが
★~ ~★ 間を以下に変更すると、別シート1枚に連続出力します
出力順は Array(vB, vA) の記述順
Application.ScreenUpdating = False
Worksheets.Add After:=Worksheets(Worksheets.Count)
i = 1
For Each v In Array(vB, vA)
With Cells(i, "A").Resize(UBound(v), UBound(v, 2))
.Value = v
.Sort .Cells(.Columns.Count), xlDescending _
, .Cells(1), , xlAscending, Header:=xlYes
With .Rows(1)
.Interior.ColorIndex = 15
.HorizontalAlignment = xlCenter
End With
.Borders.LineStyle = xlContinuous
End With
i = i + UBound(v) + 1
Next
Columns.AutoFit
Application.ScreenUpdating = True
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excelの不要な行の削除ができな...
-
エクセルファイルのシート毎の容量
-
複数シートからデータを拾って...
-
シート削除して同名シート追加...
-
時間帯の重複を除いた集計について
-
EXCELで2つのファイルから重複...
-
Excelでシートの違うデータでグ...
-
Excelで日付変更ごとに、自動的...
-
エクセル VBA VLOOKUP
-
Excelファイルの容量が異常に大...
-
エクセル 縦に長い表の印刷時...
-
(VBAにて)日付でデータを抽出す...
-
ユーザーフォームで別シートを...
-
エクセル 在庫管理で入力時同一...
-
Excel 売上管理シートに入力し...
-
エクセルマクロ Vlookupに似た...
-
ファンモータが作動しない。
-
オートフィルタで抽出したデー...
-
EXCEL の表を一行ずつシートに...
-
Excelですが、同一データが複数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
excelの不要な行の削除ができな...
-
エクセルファイルのシート毎の容量
-
複数シートからデータを拾って...
-
シート削除して同名シート追加...
-
Excelでシートの違うデータでグ...
-
Excelで日付変更ごとに、自動的...
-
他のシートの一番下の行データ...
-
VBAで CTRL+HOMEの位置へ移動...
-
エクセル 縦に長い表の印刷時...
-
EXCELで2つのファイルから重複...
-
トランジスタの選び方
-
エクセル マクロ "特定の日付...
-
ユーザーフォームで別シートを...
-
Excelマクロ 差分抽出の方法が...
-
Excel 売上管理シートに入力し...
-
【マクロ】同じフォルダ内にあ...
-
オートフィルタで抽出したデー...
-
エクセルで名簿を50音で切り分ける
-
【Excel】マクロでグラフ系列に...
-
時間帯の重複を除いた集計について
おすすめ情報