Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2101 / 13645 ツリー ←次へ | 前へ→

【69889】表の集計方法について うしろ 11/9/18(日) 21:32 質問[未読]
【69890】Re:表の集計方法について Yuki 11/9/19(月) 10:56 発言[未読]
【69897】ReRe:表の集計方法について うしろ 11/9/21(水) 23:04 質問[未読]
【69902】Re:ReRe:表の集計方法について Yuki 11/9/22(木) 13:42 発言[未読]
【69936】Re:ReRe:表の集計方法について うしろ 11/9/26(月) 8:41 お礼[未読]
【69898】Re:表の集計方法について ちん 11/9/22(木) 11:42 回答[未読]
【69934】Re:表の集計方法について うしろ 11/9/26(月) 8:34 お礼[未読]
【69901】Re:表の集計方法について ちん 11/9/22(木) 13:35 発言[未読]
【69908】Re:表の集計方法について ちん 11/9/22(木) 16:37 発言[未読]
【69935】ReRe:表の集計方法について うしろ 11/9/26(月) 8:37 お礼[未読]
【69903】Re:表の集計方法について SS 11/9/22(木) 13:46 発言[未読]
【69933】Re:表の集計方法について うしろ 11/9/26(月) 8:32 お礼[未読]

【69889】表の集計方法について
質問  うしろ  - 11/9/18(日) 21:32 -

引用なし
パスワード
   年月日    種別    店舗名       内容       金額
9月2日    食費    業務用スーパー    烏龍茶×2    216
9月2日    食費    業務用スーパー    麻婆茄子の素    88
・・・・・・・・・続く
上表のようにA列に年月日、B列:種別、C列:店舗名、D列:内容、E列:金額の順で入力された1ケ月毎の家計簿があります。種別毎に集計をしたいのですが、月によって種別の数が異なるのでマクロ(EXCEL2007)で対応したいと考えています。
2003までのマクロと異なり自動記録機能ができないようなので相談に上がりました。考え方はおそらく以下のようにすればよいと思うのですがコードの記述方法を
ご教示願います。(Win7 excel2007)
1.(オート)フィルタ―
2.B列の種別(1つ)を選択
3.種別に対するE列の集計
4.一時的に新しいシートに種別、金額をコピー(または内部メモリに記憶)
5.F列に種別、G列に集計金額をコピーまたは記載(集計毎に行を下にずらす)
6.新しいシートを削除
→2.に戻り次の種別(1つ)を選択(種別が終了するまで繰り返す)
7.(オート)フィルターの解除

【69890】Re:表の集計方法について
発言  Yuki  - 11/9/19(月) 10:56 -

引用なし
パスワード
   ▼うしろ さん:
こんにちは。

種別でソートしてから
データ -> 集計 をマクロの記録で実行してみて下さい。

>年月日    種別    店舗名       内容       金額
>9月2日    食費    業務用スーパー    烏龍茶×2    216
>9月2日    食費    業務用スーパー    麻婆茄子の素    88
>・・・・・・・・・続く
>上表のようにA列に年月日、B列:種別、C列:店舗名、D列:内容、E列:金額の順で入力された1ケ月毎の家計簿があります。種別毎に集計をしたいのですが、月によって種別の数が異なるのでマクロ(EXCEL2007)で対応したいと考えています。

【69897】ReRe:表の集計方法について
質問  うしろ  - 11/9/21(水) 23:04 -

引用なし
パスワード
   ご意見いただいた方法を用いる場合について教えてください。

集計してからマクロを記録すると、種別数が毎月異変化
するので、エラーが出てしまいます。

エラー処理を設けるか、先に種別データを読み込んで種
別分ループすれば良いと考えますが、種別を取り出すい
い方法が見つかりません。

一旦、ソート後、同じ文字列が連続した場合は無視し、
変化した場合カウントするなどして種別データと種別数
を取得するのが良いのでしょうか?

この場合、ソートを元の表に戻す必要がありますが
こんな方法で対応するのでしょうか?

1.先に全データを配列に入れ読込み再度集計後再度データを
  全て書き出す。
2.通し番号(ID)を振ってこれについて再ソートして
  ID順に振り返る。

私はこの程度しか思い浮かびませんが、もっと良い手があれば
教えてください。

※ポイントは、種別数が毎月変わる点です。

【69898】Re:表の集計方法について
回答  ちん  - 11/9/22(木) 11:42 -

引用なし
パスワード
   こんにちわ、ちんといいます。
合計金額を求める式を入れて下さい。
=SubTotal(9,E2:E1000)

このSUBTOTALは、フィルターで選択したものの合計金額を表示します。
以上、

【69901】Re:表の集計方法について
発言  ちん  - 11/9/22(木) 13:35 -

引用なし
パスワード
   こんにちわ、うしろ さん:
集計表の作り方について、
Sheet1 家計簿
Sheet2 月別・種別ごとの 集計表を説明します。

SHEET1(家計簿)
行  A     B     C       D      E     F
2  年月日   種別  店舗名   内容   金額   年月
3 2011/9/10  食費  業務スーパー      216   =Text(A3,"yyyy/mm")
4 2011/9/15  外食  パスタ店       2,300   =Text(A4,"yyyy/mm")
5 2011/10/15 外食  ラーメン       1,300   =Text(A5,"yyyy/mm")

SHEET2(集計表)
行   A       B       C        D
2  種別   2011/9/1  2011/10/1  2011/11/1  
3  食費  式を埋め込む
4  外食  
5  旅行

B3セルに式を入れます。
=SUMPRODUCT((家計簿!$B$3:$B$500=A3)*(家計簿!$F$3:$F$500=TEXT(集計表!$B$2,"yyyy/mm")),(家計簿!$E$3:$E$500))

あとは、コピー・ペしてください。

SUMPRODUCT関数で、集計できます。

以上、

【69902】Re:ReRe:表の集計方法について
発言  Yuki  - 11/9/22(木) 13:42 -

引用なし
パスワード
   ▼うしろ さん:
>集計してからマクロを記録すると、種別数が毎月異変化
>するので、エラーが出てしまいます。

集計したのに又集計というのは1年分位のデータが入っているのを
月単位で集計しようとしているのですか?
合計の出力場所は何処にするのでしょうか。

もう少し具体的に説明をお願いします。
年月日    種別    店舗名    内容    金額
9月2日    食費    業務用スーパー    烏龍茶×2    216
9月2日    食費    業務用スーパー    麻婆茄子の素    88
9月12日    雑費    業務用スーパー    ティッシュ    500
9月12日    雑費    業務用スーパー    洗剤    400
10月2日    食費    業務用スーパー    烏龍茶×2    216
10月2日    食費    業務用スーパー    麻婆茄子の素    88
10月12日    雑費    業務用スーパー    ティッシュ    500
10月12日    雑費    業務用スーパー    洗剤    400
10月12日    医療費    業務用スーパー    風邪薬    1500
10月12日    衣料費    業務用スーパー    パンツ    600
のような場合ですか?
それとも他の場合とか

【69903】Re:表の集計方法について
発言  SS  - 11/9/22(木) 13:46 -

引用なし
パスワード
   ▼うしろ さん:
オートフィルタ―を用いたものではないのですが
Dictionaryの勉強がてら作ってみました。
参考になれば幸いです。

Option Explicit

Sub Sample()
  Dim Dic As Variant, Keys As Variant
  Dim i As Long, j As Long
  Dim buf1 As String, buf2 As Currency
  
  Set Dic = CreateObject("Scripting.Dictionary")
  j = Cells(Rows.Count, 2).End(xlUp).Row
  For i = 2 To j
    buf1 = Cells(i, 2).Value      '種別をbuf1に格納する
    buf2 = Cells(i, 5).Value      '金額をbuf2に格納する
    If Not Dic.Exists(buf1) Then    'まだ登録されていなかったら…
      Dic.Add buf1, buf2       '種別と金額を連想配列に登録する
    Else
      Dic(buf1) = Dic(buf1) + buf2  '金額を追加する
    End If
  Next i
  Keys = Dic.Keys
  For i = 0 To Dic.Count - 1
    Cells(i + 2, 7) = Keys(i)
    Cells(i + 2, 8) = Dic(Keys(i))
  Next i
  Set Dic = Nothing
End Sub


>年月日    種別    店舗名       内容       金額
>9月2日    食費    業務用スーパー    烏龍茶×2    216
>9月2日    食費    業務用スーパー    麻婆茄子の素    88
>・・・・・・・・・続く
>上表のようにA列に年月日、B列:種別、C列:店舗名、D列:内容、E列:金額の順で入力された1ケ月毎の家計簿があります。種別毎に集計をしたいのですが、月によって種別の数が異なるのでマクロ(EXCEL2007)で対応したいと考えています。
>2003までのマクロと異なり自動記録機能ができないようなので相談に上がりました。考え方はおそらく以下のようにすればよいと思うのですがコードの記述方法を
>ご教示願います。(Win7 excel2007)
>1.(オート)フィルタ―
>2.B列の種別(1つ)を選択
>3.種別に対するE列の集計
>4.一時的に新しいシートに種別、金額をコピー(または内部メモリに記憶)
>5.F列に種別、G列に集計金額をコピーまたは記載(集計毎に行を下にずらす)
>6.新しいシートを削除
>→2.に戻り次の種別(1つ)を選択(種別が終了するまで繰り返す)
>7.(オート)フィルターの解除

【69908】Re:表の集計方法について
発言  ちん  - 11/9/22(木) 16:37 -

引用なし
パスワード
   式修正 $の付け方に誤り。

集計表 B3セルの式修正して、もう一度。
=SUMPRODUCT((家計簿!$B$3:$B$500=$A3)*(家計簿!$F$3:$F$500=TEXT(集計表!B$2,"yyyy/mm")),(家計簿!$E$3:$E$500))

【69933】Re:表の集計方法について
お礼  うしろ E-MAIL  - 11/9/26(月) 8:32 -

引用なし
パスワード
   SSさんへ
PCの調子が悪く、お返事が大変遅くなりました。
まさに考えていた通りの処理を行っております。

>  Set Dic = CreateObject("Scripting.Dictionary")
>    buf1 = Cells(i, 2).Value     
>    buf2 = Cells(i, 5).Value
>    If Not Dic.Exists(buf1) Then
>      Dic.Add buf1, buf2   

このような処理が簡単に思いつくといいですね。
ありがとうございました。


▼SS さん:
>▼うしろ さん:
>オートフィルタ―を用いたものではないのですが
>Dictionaryの勉強がてら作ってみました。
>参考になれば幸いです。
>
>Option Explicit
>
>Sub Sample()
>  Dim Dic As Variant, Keys As Variant
>  Dim i As Long, j As Long
>  Dim buf1 As String, buf2 As Currency
>  
>  Set Dic = CreateObject("Scripting.Dictionary")
>  j = Cells(Rows.Count, 2).End(xlUp).Row
>  For i = 2 To j
>    buf1 = Cells(i, 2).Value      '種別をbuf1に格納する
>    buf2 = Cells(i, 5).Value      '金額をbuf2に格納する
>    If Not Dic.Exists(buf1) Then    'まだ登録されていなかったら…
>      Dic.Add buf1, buf2       '種別と金額を連想配列に登録する
>    Else
>      Dic(buf1) = Dic(buf1) + buf2  '金額を追加する
>    End If
>  Next i
>  Keys = Dic.Keys
>  For i = 0 To Dic.Count - 1
>    Cells(i + 2, 7) = Keys(i)
>    Cells(i + 2, 8) = Dic(Keys(i))
>  Next i
>  Set Dic = Nothing
>End Sub
>
>
>>年月日    種別    店舗名       内容       金額
>>9月2日    食費    業務用スーパー    烏龍茶×2    216
>>9月2日    食費    業務用スーパー    麻婆茄子の素    88
>>・・・・・・・・・続く
>>上表のようにA列に年月日、B列:種別、C列:店舗名、D列:内容、E列:金額の順で入力された1ケ月毎の家計簿があります。種別毎に集計をしたいのですが、月によって種別の数が異なるのでマクロ(EXCEL2007)で対応したいと考えています。
>>2003までのマクロと異なり自動記録機能ができないようなので相談に上がりました。考え方はおそらく以下のようにすればよいと思うのですがコードの記述方法を
>>ご教示願います。(Win7 excel2007)
>>1.(オート)フィルタ―
>>2.B列の種別(1つ)を選択
>>3.種別に対するE列の集計
>>4.一時的に新しいシートに種別、金額をコピー(または内部メモリに記憶)
>>5.F列に種別、G列に集計金額をコピーまたは記載(集計毎に行を下にずらす)
>>6.新しいシートを削除
>>→2.に戻り次の種別(1つ)を選択(種別が終了するまで繰り返す)
>>7.(オート)フィルターの解除

【69934】Re:表の集計方法について
お礼  うしろ E-MAIL  - 11/9/26(月) 8:34 -

引用なし
パスワード
   ▼ちん さん:
>こんにちわ、ちんといいます。
>合計金額を求める式を入れて下さい。
>=SubTotal(9,E2:E1000)
>
>このSUBTOTALは、フィルターで選択したものの合計金額を表示します。
>以上、


ありがとうございました。
試してみたと思います。

【69935】ReRe:表の集計方法について
お礼  うしろ E-MAIL  - 11/9/26(月) 8:37 -

引用なし
パスワード
   ご返答が遅くなりました。
ありがとうございました。
=SUMPRODUCT((家計簿!$B$3:$B$500=A3)*(家計簿!$F$3:$F$500=TEXT(集計表!$B$2,"yyyy/mm")),(家計簿!$E$3:$E$500))
SUMPRODUCTという関数の勉強になりました。

【69936】Re:ReRe:表の集計方法について
お礼  うしろ  - 11/9/26(月) 8:41 -

引用なし
パスワード
   Yukiさんへ

大変ご返答が遅くなりました。

SSさんより、容易に対応できる手法をお教え
頂きました。

いろいろとありがとうございました。

▼Yuki さん:
>▼うしろ さん:
>>集計してからマクロを記録すると、種別数が毎月異変化
>>するので、エラーが出てしまいます。
>
>集計したのに又集計というのは1年分位のデータが入っているのを
>月単位で集計しようとしているのですか?
>合計の出力場所は何処にするのでしょうか。
>
>もう少し具体的に説明をお願いします。
>年月日    種別    店舗名    内容    金額
>9月2日    食費    業務用スーパー    烏龍茶×2    216
>9月2日    食費    業務用スーパー    麻婆茄子の素    88
>9月12日    雑費    業務用スーパー    ティッシュ    500
>9月12日    雑費    業務用スーパー    洗剤    400
>10月2日    食費    業務用スーパー    烏龍茶×2    216
>10月2日    食費    業務用スーパー    麻婆茄子の素    88
>10月12日    雑費    業務用スーパー    ティッシュ    500
>10月12日    雑費    業務用スーパー    洗剤    400
>10月12日    医療費    業務用スーパー    風邪薬    1500
>10月12日    衣料費    業務用スーパー    パンツ    600
>のような場合ですか?
>それとも他の場合とか

2101 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free