[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『相手先・項目別に集計』(アシベ)
A B C D E ・・・ P
1 2004年度(A1とB1は結合) (空欄) 4月 5月 ・・・ 合計
2 相手先 摘要 詳細 (D以降1行と2行結合)
3 Aホテル チケット代 (C列は表示していない) 100
4 チケット代 150
5 Bホテル チケット代
6 協賛金
7 チケット代
8 チケット代
10 A商店 お中元ギフト
11 新店協賛
12 お歳暮ギフト
13 B商店 お中元ギフト
14 新店協賛
15 お歳暮ギフト
16 新店協賛
17 C商店 お歳暮ギフト
50 (空欄) 合計
ちょっと分かりにくいですが、以上のような表があります。 それぞれが発生するたびに行を追加して摘要、特定の摘要には詳細を入力し、 そのご、発生した月にその金額を入力しています。 今は1行に1つの金額しかありません。
これを別のシートに相手先と摘要で分けた表
A B C D E ・・・ P
1 2004年度 4月 5月 ・・・ 合計
2 相手先 摘要 詳細
3 Aホテル チケット代 100 150
4 Bホテル チケット代
5 協賛金
6 A商店 お中元ギフト
7 新店協賛
8 お歳暮ギフト
9 B商店 お中元ギフト
10 新店協賛
11 お歳暮ギフト
12 C商店 お歳暮ギフト
30 合計
としたいのですが、ピポットテーブルを使用すると フィールド名が正しくないというエラーが出てしまいます。 これはどうすればいいのでしょうか? 漠然とした質問になってしまいましたが教えていただけないでしょうか。 ピポットテーブルでなくても構いません。 お願いします。
こんばんわ。 例えば、Aホテルのチケット代が同月に多数発生した場合も行を追加していますか?(seiya)
項目名が2行に分かれている(1,2行目)のがピボットで障害になります。 また、一行にするだけでは、現状のデータ形式では困難。 1 2004年度 2 相手先 摘要 日付 詳細 金額 3 Aホテル チケット代 4月 100 4 Aホテル チケット代 5月 150 5 Bホテル チケット代 5月 110 ・ ・ という風にしておかないとピボット集計できないのでは? ピボットでの集計を目標とするならデータの作成の仕方から再考すべき。 (みやほりん)
seiyaさん、同月に発生することもあります。 c行にはチケットの内容を個別にメモ書きしています。 みやほりんさん、あまりピポットテーブルについて分からないので。 すいません。 (アシベ)
ピボットテーブルについては下記 http://hp.vector.co.jp/authors/VA014071/tips/xl_pvt1.html
A B C D E ・・・ P
1 2004年度
2 相手先 摘要 詳細 4月 5月 ・・・ 合計
3 Aホテル チケット代 100
4 チケット代 150
元となるデータについては上記A4が空白になっていますが、
このままピボットに使用しても4行目のデータは「相手先は未入力のデータ」
として扱われ、Aホテルのデータとしては集計されません。
たとえば「150」という取引が発生したら、その取引の行には「誰と」「何を」
「いつ」取引した、というようなデータが必ず入力されていないと、ピボット
を利用しての集計は意図通りにはできない、ということです。
次のようなリスト形式のデータからなら、
A B C D E
1 2004年度
2 相手先 摘要 日付 詳細 金額
3 Aホテル チケット代 4月 100
4 Aホテル チケット代 5月 150
5 Bホテル チケット代 5月 110
6 Bホテル 協賛金 6月 95
7 Bホテル チケット代 7月 100
8 Bホテル チケット代 8月 140
ピボットテーブル利用で下記のような集計結果になります。
合計 / 金額 日付
相手先 摘要 4月 5月 6月 7月 8月 総計
Aホテル チケット代 100 150 250
Aホテル 集計 100 150 250
Bホテル チケット代 110 100 140 350
協賛金 95 95
Bホテル 集計 110 95 100 140 445
総計 100 260 95 100 140 695
(みやほりん)
下記で試してください。
Sub test()
Dim a, dic As Object, w(), x, y, z
Set dic = CreateObject("scripting.dictionary")
With Sheets("sheet1")
a = .Range("a1").CurrentRegion.Value
For i = 3 To UBound(a, 1)
If IsEmpty(a(i, 1)) Then a(i, 1) = a(i - 1, 1)
z = a(i, 1) & ":" & a(i, 2)
If Not dic.exists(z) Then
ReDim w(1 To 15)
For ii = 1 To 15
w(ii) = a(i, ii)
Next
dic.Add z, w
Else
w = dic(z)
For ii = 4 To 15
w(ii) = w(ii) + a(i, ii)
Next
dic(z) = w
End If
Next
End With
Erase a, w
x = dic.items: dic.removeall
With Sheets("sheet2")
.Rows(1).Value = Sheets("sheet1").Rows(1).Value
With .Range("a2")
For i = 0 To UBound(x)
.Offset(i).Resize(, UBound(x(i))) = x(i)
Next
End With
For Each r In .Range("a2", .Range("a" & Rows.Count).End(xlUp))
If Not dic.exists(r.Value) Then
dic.Add r.Value, Empty
Else
r.Value = Empty
End If
Next
End With
Set dic = Nothing
End Sub
表の構成を再考してください。非常に無駄の多い構成だと思います。 それと、やむを得ない場合を除き、「結合」は × 。後の処理で問題になります。 (seiya)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.