エクセルのデータで
A B C D E F G H I
1 氏名 項目① 金額 項目② 金額 項目③ 金額 項目④ 金額
2 鈴木太郎 雑費 10 3 松本次郎 その他 5
4 鈴木太郎 給与 50 5 大手三郎 交通費 30 6 鈴木太郎 その他 10 7 松本次郎 給与 40
といったデータを、下記のようにまとめたいと思っています。
A B C D E F G H I
氏名 項目① 金額 項目② 金額 項目③ 金額 項目④ 金額
鈴木太郎 給与 50 雑費 10 その他 10
松本次郎 給与 40 その他 5
大手三郎 交通費 30
というように、名前ごとで複数の項目を1行にまとめたいのですが、どのようにしたらまとめることができるでしょうか。
2000件近くあるデータを名寄せし、コピペしながら1行にしようかと思っていたのですが、もっと効率よく正確にまとめられたらと思っております。
宜しくお願い致します。
No.3ベストアンサー
- 回答日時:
以下でどうでしょうか
Public Sub Samp1()
Dim dic As Object, dicE As Object
Dim vA As Variant, vK As Variant, v As Variant
Dim i As Long, j As Long
Set dic = CreateObject("Scripting.Dictionary")
Set dicE = CreateObject("Scripting.Dictionary")
With ActiveSheet
vA = Intersect(.Range("A1").CurrentRegion, .Range("A:I")).Value
End With
For i = 2 To UBound(vA)
If (Not dic.Exists(vA(i, 1))) Then
dic.Add vA(i, 1), CreateObject("Scripting.Dictionary")
End If
For j = 2 To UBound(vA, 2) Step 2
If (vA(i, j) <> "") Then
dic(vA(i, 1))(vA(i, j)) = _
dic(vA(i, 1))(vA(i, j)) + vA(i, j + 1)
dicE(vA(i, j)) = Empty
End If
Next
Next
If (dic.Count > 0) Then
ReDim vA(1 To dic.Count + 1, 1 To dicE.Count + 1)
vA(1, 1) = "氏名"
v = mySort(dicE.Keys)
For i = 0 To UBound(v)
j = i + 2
vA(1, j) = v(i)
dicE(v(i)) = j
Next
i = 2
For Each vK In mySort(dic.Keys)
vA(i, 1) = vK
For Each v In dic(vK).Keys
vA(i, dicE(v)) = dic(vK)(v)
Next
i = i + 1
Next
Worksheets.Add
Range("A1").Resize(UBound(vA), UBound(vA, 2)).Value = vA
' Columns.AutoFit
End If
Set dic = Nothing
Set dicE = Nothing
End Sub
Private Function mySort(ByVal vA As Variant) As Variant
Dim v As Variant
Dim i As Long, j As Long
For i = 0 To UBound(vA) - 1
For j = i + 1 To UBound(vA)
If (vA(i) > vA(j)) Then
v = vA(i)
vA(i) = vA(j)
vA(j) = v
End If
Next
Next
mySort = vA
End Function
No.4
- 回答日時:
関数やフィルタ等での実現は難しそうですね。
手動でやるなら、まれチャンお得意の単純な「地道にコツコツ」しかなさそう。
単純なら、マクロにお縋りすべきですね。
ただし、私はマクロ音痴なので此処でサヨナラです。
No.1
- 回答日時:
別シート(集計シート)を追加し、そこに名前をキーにして現シートの内容を1名1行でデータを入れて行くマクロを作成すればよいと思います。
大まかには以下のような感じです。見出し行があるとか、現シートのA列は通し番号だが、集計結果にはそれは不用とか、そういった細かな事はご自身でお考えください。
(1) 準備として集計シートを作成しておく
(2) 現シートの1行目からA列が空欄となるまで以下の処理を行うマクロを作成する。マクロの起動は集計シート状に設ける「集計」ボタンで行う。
[前提]現シートのデータ行間に空行は無い
1)名前を取り出し集計シートのA列に同名を探す。無い場合は最終行に名前を追加
2)原稿シートの該当行の各列のうち、値が入ったセル(空ではないセル)の内容を集計シートの1)で探した行の同じ列のセルにコピーする。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) パワークエリの複数ファイルのデータ統合について 3 2022/07/14 17:06
- Excel(エクセル) エクセルの散布図で新たに入力した値のデータラベルが空欄になる現象 1 2022/04/26 09:31
- 確定申告 令和4年確定申告にかかる損益通算について 2 2023/01/22 21:32
- その他(税金) 給与所得の源泉徴収票の欄の中のどの項目が年収に相当するのでしょうか? 5 2023/04/17 17:40
- 所得・給料・お小遣い 確定拠出年金について質問です。 確定拠出年金の掛金を毎月3000円の契約?として、先月の給料分から適 5 2023/02/10 12:09
- 所得・給料・お小遣い 給与明細に詳しい方お願いします。給与からプライベートの費用を引いた場合のデメリット 3 2022/12/22 21:43
- その他(Microsoft Office) EXCELの1行を1枚の用紙にそれぞれ印刷したい。 3 2022/10/10 11:35
- 確定申告 医療費控除の書き方について 4 2023/02/10 16:00
- Excel(エクセル) 列を自動で追加したい 3 2022/07/11 12:58
- 医療 医療費のお知らせ 2 2023/02/13 10:04
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数シートからデータを拾って...
-
excelの不要な行の削除ができな...
-
Excelでシートの違うデータでグ...
-
エクセルファイルのシート毎の容量
-
シート削除して同名シート追加...
-
Excelで日付変更ごとに、自動的...
-
エクセル VBA VLOOKUP
-
エクセルで名簿を50音で切り分ける
-
VBAで CTRL+HOMEの位置へ移動...
-
【マクロ】同じフォルダ内にあ...
-
EXCEL 複数行のデータを1行にま...
-
エクセルVBAで、特定文字から始...
-
EXCELで2つのファイルから重複...
-
Excelファイルの容量が異常に大...
-
excel2013で、マスターシートの...
-
エクセルのデータからフィルタ...
-
電子部品のデータシートの探し方
-
ユーザーフォームで別シートを...
-
EXCELのシートの保護機能につい...
-
エクセル マクロ "特定の日付...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数シートからデータを拾って...
-
excelの不要な行の削除ができな...
-
エクセルファイルのシート毎の容量
-
Excelでシートの違うデータでグ...
-
シート削除して同名シート追加...
-
Excelで日付変更ごとに、自動的...
-
VBAで CTRL+HOMEの位置へ移動...
-
【エクセルマクロ】複数シート...
-
トランジスタの選び方
-
EXCEL 複数行のデータを1行にま...
-
EXCELで2つのファイルから重複...
-
別々のシートの表をピボットテ...
-
エクセル VBA VLOOKUP
-
他のシートの一番下の行データ...
-
エクセルのカメラ機能について
-
時間帯の重複を除いた集計について
-
EXCEL の表を一行ずつシートに...
-
ファンモータが作動しない。
-
エクセルで名簿を50音で切り分ける
-
エクセル マクロ "特定の日付...
おすすめ情報
質問の際にはずれていなかったのですが、投稿した際にずれてしまったようで、分かりずらくすみません。