VBAでSUMIF関数と同じ集計を行いたい!
- データ数が膨大なため、SUMIF関数では処理が遅くなってしまいます。そこでVBAを使用して同じ集計を行いたいです。
- 12枚のシートに同じレイアウトのデータがあります。各シートごとに行数が異なります。
- 集計結果Sheetには、品名ごとの収入計と支出計を集計する必要があります。
- ベストアンサー
SUMIF関数と同じ集計をVBAで行いたい
今はSUMIF関数で複数シートデータの集計をしていますが、 データ数が膨大なため処理に多大な時間が掛かっています。 VBAで同じ様な処理がしたく、ご教授の程よろしくお願いします。 Sheetは1~12まであり、同じレイアウトです。 行数は、Sheetごとに異なります。 集計結果Sheetに、品名ごとの収入計と支出計を集計したい。 Sheet1 A B C D 1 月日 品名 収入 支出 2 5/10 りんご 30000 20000 3 5/15 さかな 20000 30000 4 5/20 きのこ 50000 20000 5 5/25 さかな 30000 10000 6 5/30 おかし 15000 10000 7 5/30 おかし 20000 20000 5 5/10 りんご 40000 20000 Sheet2 A B C D 1 月日 品名 収入 支出 2 6/13 きのこ 10000 30000 3 6/25 さかな 20000 20000 4 6/30 おかし 55000 30000 5 6/10 りんご 20000 10000 6 6/15 さかな 10000 10000 集計結果Sheet A B C 1 品名 収入 支出 2 きのこ 3 さかな 4 おかし 5 りんご
- yuripp
- お礼率14% (60/407)
- Visual Basic
- 回答数2
- ありがとう数3
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>なお、一番後ろのシート名は何でも良いのでしょうか? なんでも(白紙)でいいです。 >申し訳ございませんが、下記の部分で実行エラー13 型が一致しません >とエラーが出ます。 >: x(2, k) = x(2, k) + v(i, 2) シートの左から1~12番目で間違いないですか? 収入・支出はC・D列の2行目からで、数字(文字列)ではないですよね? 空白セルとかが途中にありますか?
その他の回答 (1)
- n-jun
- ベストアンサー率33% (959/2873)
Sub test() Dim Dic As Object Dim ws As Integer Dim v As Variant Dim x As Variant Dim i As Long, j As Long, k As Long Set Dic = CreateObject("Scripting.Dictionary") ReDim x(1 To 3, 1 To 1) For ws = 1 To 12 With Worksheets(ws) v = .Range(.[B2], .Cells(Rows.Count, 2).End(xlUp).Resize(, 3)) End With For i = 1 To UBound(v, 1) If Not Dic.exists(v(i, 1)) Then j = j + 1 Dic(v(i, 1)) = j x(1, j) = v(i, 1): x(2, j) = v(i, 2): x(3, j) = v(i, 3) ReDim Preserve x(1 To 3, 1 To j + 1) Else k = Dic(v(i, 1)) x(1, k) = v(i, 1): x(2, k) = x(2, k) + v(i, 2): x(3, k) = x(3, k) + v(i, 3) End If Next Erase v Next With Worksheets(Worksheets.Count) .Cells.ClearContents .Range("A1:C1").Value = Array("品名", "収入", "支出") .Range("A2").Resize(j, 3).Value = Application.Transpose(x) End With Erase x Set Dic = Nothing End Sub シート1~シート12の結果が一番後ろに新規でシートを作っておけば そこに表示されるはずです。 試してみて下さい。
補足
ご教授の程、ありがとうございました。 申し訳ございませんが、下記の部分で実行エラー13 型が一致しませんとエラーが出ます。 : x(2, k) = x(2, k) + v(i, 2) なお、一番後ろのシート名は何でも良いのでしょうか?
関連するQ&A
- 【再質問】SUMIF関数と同じ集計をVBAで行いたい
恐縮なのですが、今一度質問させてください。 今はSUMIF関数で複数シートデータの集計をしていますが、 データ数が膨大なため処理に多大な時間が掛かっています。 VBAで同じ様な処理がしたく、ご教授の程よろしくお願いします。 Sheetは1~12まであり、同じレイアウトです。 行数は、Sheetごとに異なります。 集計結果Sheetに、品名ごとの月集計をしたい。 Sheet1 A B C D 1 月日 品名 収入 支出 2 5/10 りんご 30000 20000 3 5/15 さかな 20000 30000 4 5/20 きのこ 50000 20000 5 5/25 さかな 30000 10000 6 5/30 おかし 15000 10000 7 5/30 おかし 20000 20000 5 5/10 りんご 40000 20000 Sheet2 A B C D 1 月日 品名 収入 支出 2 6/13 きのこ 10000 30000 3 6/25 さかな 20000 20000 4 6/30 おかし 55000 30000 5 6/10 りんご 20000 10000 6 6/15 さかな 10000 10000 集計結果Sheet A B C D 1 品名 4月 5月 6月 2 きのこ 3 さかな 4 おかし 5 りんご 例)きのこ 4月の収入-支出を、B2セルに入力したい。 シートは4月・5月と、月別に分かれています。
- ベストアンサー
- Visual Basic
- ExcelのVBAで集計をしたいです。
EXCELで、VBAを使用して元データのシートから、集計シートを作成したいです。 Sheet1 A B C D E F 1 品名 サイズ1 サイズ2 サイズ3 元のサイズ 売り上げた量 2 A 1 100 150 200 1000 50 3 B 2 100 200 100 1500 10 4 A 2 200 300 500 2000 100 5 A 1 150 150 100 1000 80 6 A 2 150 150 600 3000 100 Sheet2(集計用に新規作成されたシート:作成時は空シート) A B C D 1 品名 サイズ1 元のサイズ 売り上げた量の合計 2 A 1 1000 130 3 B 2 1500 10 4 A 2 2000 100 5 A 2 3000 100 元のサイズのものがどれだけ使用されて売れたのかを集計しようとしています。 ちなみにサイズ1は変更されません。 条件が複数個になるので、Sheet2の合計は、SUMPRODUCTを使用することになると思うのですが、 C列までの、品名、サイズ1、元サイズが重複しないように抽出するためには、 どのようにしたらよいのでしょうか?
- ベストアンサー
- オフィス系ソフト
- VBAでSUMIF関数を繰り返す
VBA初心者です。よろしくお願いします。 Book1のSheet1のA2の値を検索条件とし、Book2のsheet1のA列を検索し、条件に合った行のC列の合計値を取得するとします。出力先はBOOK1のA2と同じ行、C2です。 これだけであれば、sumif関数で処理できるのですが、 Book1のA列の最終行までこの処理を繰り返さなければなりません。 また、毎月、Book1,2ともに最終行が変化します。 上記を簡単に書くと以下になります。 ■Book1のsheet1 A B C 1 101 リンゴ (ここにBook2の合計値を出力したい) 2 202 レモン (ここにBook2の合計値を出力したい) 3 510 柿 (ここにBook2の合計値を出力したい) ■Book2のsheet1 A B C 1 202 レモン 10 2 202 レモン 30 3 101 リンゴ 200 4 707 ブドウ 50 5 101 リンゴ 70 6 510 柿 100 上記処理をsumif関数、forを使って作成してますが、どうもうまくいきません。 申し訳ございませんがよろしくお願いします。 環境は、Windows7、Office2010 です。
- 締切済み
- Visual Basic
- excel vba sumif 月間集計
excel vba sumif 月間集計 どなたか教えていただけますか? sheet1に1日毎のデータが打ち込まれています。そのデータを同じブック内の月間シートが開いたときに表示してるのですが、31日間分のコードをsumifで処理しているため、かなりのファイル容量となり重くなります。もっと効率的な方法はないのでしょうか、(範囲指定の繰り返し処理等)お願いいたします。 なお、sheet1からsheet5まで日毎のデータをそれぞれ月間シート1~5に集計してます。 例です。 sheet1は A B C D E F・・・・ 1 日 目的 距離 燃料 2 1 社用 50 3 1 私用 60 10 4 2 社用 30 月間シート1は A B C D E F 1 日 距離 燃料 1110 2 1 110 10 3 2 30 0 Private Sub Worksheet_Activate() UserForm1.Hide Range("A1").Select '距離数 Range("B2").Value = WorksheetFunction.SumIf(Sheets("Sheet1").Range("A2:A300"), Range("A2"), Sheets("Sheet1").Range("C2:C300")) Range("B3").Value = WorksheetFunction.SumIf(Sheets("Sheet1").Range("A2:A300"), Range("A3"), Sheets("Sheet1").Range("C2:C300")) ・ ・ ・ '累計 ・・・は、こんな感じ処理してます Dim myRng As Range Dim c As Range Set myRng = Range("F2:F32") For Each c In myRng c.Value = c.Offset(0, -4).Value + c.Offset(-1, 0).Value Next c End Sub
- 締切済み
- Visual Basic
- エクセル関数でグループ単位に集計を行う
エクセル初心者です。 入力伝票データを元に、集計シートに自動的に品名コード順の合計を作成したいのですが、うまくできません。 データシートのデータをソートせずに関数だけで出来る方法をお教えください。 ※エクセルはExcel2003を使用しています。 《データシート》例 [見出し] A1:年月日,B1:伝票番号,C1:品名コード,D1:数量,E1:単価,F1:金額 [データ] A2:2008/10/1,B2:Z-001,C2:S0001,D2:3,E2:1,000,F2:3,000 A3:2008/10/1,B3:Z-002,C3:S0002,D2:1,E3:2,000,F3:2,000 A4:2008/10/1,B4:Z-003,C4:S0003,D4:2,E4:3,000,F4:6,000 A5:2008/10/2,B5:Z-004,C5:S0002,D5:1,E5:2,000,F5:2,000 A6:2008/10/2,B6:Z-005,C6:S0001,D6:3,E6:1,000,F6:3,000 A7:2008/10/3,B7:Z-006,C7:S0003,D7:2,E7:3,000,F7:6,000 《集計シート》例 [見出し] A1:品名コード,B1:伝票数,C1:数量計,D1:合計金額 [集計値] A2:S0001,B2:2,C2:6,D2: 6,000 A3:S0002,B3:2,C3:2,D3: 4,000 A4:S0003,B4:2,C4:4,D4:12,000 ※品名コードは固定せず、データシートに入力されたものだけを集計したい
- 締切済み
- オフィス系ソフト
- エクセルで集計
エクセルで集計 シート1:A列に日付2000行程度、B列に品名A,B,C,D…500種類程度、C列にその内容。日毎に行は増えていきま、同じ品名が何度も登場してきます。 シート2:ここに新しくシート1の集計をして、同じ品名の多い順に並べ替えてリストを作成したいと思います。 シート1に新しく行が増えると同時にシート2の集計に反映させたいのですが、いい方法はありますか?
- ベストアンサー
- その他MS Office製品
- SUMIF関数の集計が上手くいきません。
「集計」シートのA列に得意先コード・O列に集計欄 「貼付」シートのE列に得意先コード・J列に集計欄があります。 なお、「貼付」シートのE列は重複する場合もあります。 「集計」シートのA列の値を、「貼付」シートのE列から探して、その行のJ列の数値の合計を 「集計」シートのO列に集計したいと思っています。 「集計」シートのA406が「B」で「貼付」シートのE200とE300が「B」で、「貼付」シートのJ200が「150」 ・J300が「250」であれば「集計」シートのO406に「500」(150+250)を表示させたいと思っています。 なお、「貼付」シートのE列には他に「B」の値がないものとします。 そこで、O列に次の関数を入れました。 「=SUMIF(貼付!E:E,A403,貼付!J:J)」 すると、(O4:O405)の範囲では、きちんと「貼付」シートの、各得意先コード別の合計が表示されるの ですが、O406の値が「0」と表示されます。 数式は合っていると思うのですが、何が誤っているのか、わかるかたはいらっしゃいますか? 406行目がA列に得意先コードが入っている最終行であることも関係ありますか? あるいは、どのように集計したら良いのか、教えていただけると助かります。
- 締切済み
- オフィス系ソフト
- エクセルVBA 年月で集計したい
お世話になります。 下記の様にシート1に入力した値をボタンで シート2の集計シートの該当年月に加算させたいたいのですが、 年月で振り分ける方法が分かりませんでした。 ●シート1(個数入力) A B 1 H24/12/25 2りんご 1 3みかん 2 4ばなな 3 5すいか 4 ⇒GOボタン ●シート2(年月毎の集計) A B C D 1 24年10月 24年11月 24年12月 2りんご 0 1 3みかん 0 2 4ばなな 0 3 5すいか 0 4 シート1のB1の日付の年月とシート2のB1の年月が一致したら、値をB2~B5に加算 一致しなければ、C1、D1 という感じで考えております。 IF文の条件式がどのようになれば良いか教えていただけないでしょうか? 分かりづらくて申し訳ございませんが、よろしくお願い致します。 エクセルは2000を使用しております
- ベストアンサー
- その他MS Office製品
- SUMPRODUCT関数で複数条件適用されない
Sheet1 A列:日付 B列:注文番号 C列:品名 D列:整理番号 E列:数量 集計 A列:品名 B~AF列:日付(1~31日) 【集計】B~AF列の日付、A列の品名が 【Sheet1】A列の日付、C列の品名と一致したら 【Sheet1】E列の数量を【集計】の該当するセルに抽出する 式をSUMPRODUCT関数で作成しました。 例)10/1 りんご 20 【集計】B3セルに以下の数式を入れましたが なぜか数量が「0」のままになります。 =SUMPRODUCT('Sheet1'!$A$3:$A$200='集計'!B$2)*('Sheet1'!$C$3:$C$200="りん ご")*('Sheet1'!$E$3:$E$200) 特に数式のミスはないと思うのですが どうしても正しい値が入りません。 数式に間違いがあればご指摘いただけませんでしょうか。 また、他に良き方法があればご教示いただけるとありがたいです。
- ベストアンサー
- その他MS Office製品
- SUMIFの計算結果が0
ブック内に商品別のシートが数枚あり、 それを月別集計する別シートを作っています ■商品シート A B C D E 月日 商品 仕入 出荷 在庫 ↓出荷状況によって入力が増減します ■月別集計シート A1=TODAY() B1=型式 C=在庫 ↓商品別に一覧で在庫表示させる A1には、今日の日時を表示(仕様) C=在庫セルにSUMIFで在庫数計算させているのですが、、、 計算結果が0になってしまいます =SUMIF('型式シート'!$A$1:$A$500,">=MONTH($A$1)",'型式シート'!$C$1:$C$500) -SUMIF('型式シート'!$A$1:$A$500,">=MONTH($A$1)",'型式シート'!$D$1:$D$500) その月の全仕入から全出荷を引いて在庫計算させているのですが、 SUMIFの計算結果が0になってしまいます。 記述もしくは検索条件のやり方が違うのでしょうか? お手上げ状態です、、TT
- ベストアンサー
- オフィス系ソフト
お礼
すみません、出来ました! 丁寧なご回答、ありがとうございました。