• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCEL VBAでこんな集計できますか?)

EXCEL VBAでスプレッドシートの集計を簡単に!

このQ&Aのポイント
  • Excel VBAを使用して、スプレッドシート上の数字を集計するインターフェースを作成しました。数値はNoごとに長さ、幅、枚数が記録されており、集計結果を表示します。
  • Noごとに長さと幅が記録されたスプレッドシートの集計を行うExcel VBAのインターフェースを作成しました。各Noの長さと幅を合計して枚数として表示します。
  • Excel VBAを使用して、スプレッドシート上の数字を集計するインターフェースを作成しました。長さと幅がそれぞれNoごとに記録されており、集計結果を表形式で表示します。

質問者が選んだベストアンサー

  • ベストアンサー
  • e10go
  • ベストアンサー率38% (47/122)
回答No.1

A列に「No」、B列に「長さ」、C列に「幅」、D列に「枚数」として、2行~8行にデータがあると仮定して、集計結果をF列2行目以降に書き出すマクロを考えました。 下にマクロコードを載せます。 '--------マクロコード--------始まり Sub sub_Total_1()   Dim i1 As Integer   Dim i2 As Integer   Dim iRow As Integer   Dim iFlag(2 To 8) As Integer   iRow = 1   For i1 = 2 To 8     If iFlag(i1) = 0 Then       iRow = iRow + 1       Cells(iRow, "F") = Cells(i1, "A")       Cells(iRow, "G") = Cells(i1, "B")       Cells(iRow, "H") = Cells(i1, "C")       Cells(iRow, "I") = Cells(i1, "D")       For i2 = i1 + 1 To 8         If Cells(i1, "A") & Cells(i1, "B") & Cells(i1, "C") = _           Cells(i2, "A") & Cells(i2, "B") & Cells(i2, "C") Then           Cells(iRow, "I") = Cells(iRow, "I") + Cells(i2, "D")           iFlag(i2) = 1         End If       Next i2     End If   Next i1 End Sub '--------マクロコード--------終わり >このようにNoが複数になっている場合も上記の集計は出来るでしょうか。(スプレッドシートのNoの列は複数のNoが入るように6つほど空欄で増やしておきます。) >例えば  1   2   6     1200     900    3 のように これは、難しい注文ですね(笑)。 「長さ」と「幅」が同じで、「No」が1つでも同じ物があれば集計する、と言う条件でしょうか?。 一応、考えてみましたが、少し複雑になりました。 とりあえず「No」はA列~F列(6列)で、K列2行目から書き出す様にしています。 '--------マクロコード--------始まり Sub sub_Total_2()   Dim i1 As Integer   Dim i2 As Integer   Dim i3 As Integer   Dim i4 As Integer   Dim iRow As Integer   Dim iColumn As Integer   Dim iFlag(2 To 8) As Integer   iRow = 1   For i1 = 2 To 8     If iFlag(i1) = 0 Then       iRow = iRow + 1       iColumn = 10       For i2 = 1 To 6         If Cells(i1, i2) <> "" Then           iColumn = iColumn + 1           Cells(iRow, iColumn) = Cells(i1, i2)         End If       Next i2       For i2 = 7 To 9         Cells(iRow, 10 + i2) = Cells(i1, i2)       Next i2       For i2 = i1 + 1 To 8         If iFlag(i1) = 0 _         And Cells(i1, "G") & Cells(i1, "H") = Cells(i2, "G") & Cells(i2, "H") Then           For i3 = 1 To 6             If Application.CountIf(Range("A" & i2 & ":F" & i2), Cells(i1, i3)) > 0 Then               Cells(iRow, "S") = Cells(iRow, "S") + Cells(i2, "I")               For i4 = 1 To 6                 If Application.CountIf(Range("A" & i1 & ":F" & i1), Cells(i2, i4)) = 0 _                 And Cells(i2, i4) <> "" Then                   iColumn = iColumn + 1                   Cells(iRow, iColumn) = Cells(i2, i4)                 End If               Next i4               iFlag(i2) = 1               Exit For             End If           Next i3         End If       Next i2     End If   Next i1 End Sub '--------マクロコード--------終わり もし、集計条件が間違っていましたら、すみません。 >出来ればインターフェース上のコマンドボタンで実行したいと考えています。 これは、質問者さんの方でマクロとコマンドボタンの関連付けはできますよね。 #この回答に載せているそれぞれのコードの先頭の空白は、全角にしています。 #もし、コピーして使用される場合は、全角空白を半角に直してください。

kakusan_t
質問者

補足

長文の回答、ありがとうございます。 早速やってみました。残念ながら下記のようになってしまいます。 1  1200    900    2 1  1100    450    1 本当は下記のようにしたいのですが 1  1200   900   3 1  1100   450   1 1   900   500   1 2  1500   900    4 2   900    500    1 Noと枚数が違います。枚数は個数の抽出ではなくて足し算になると思うのですが。もう一つの回答もうまくいきませんでした。  う~ん、でも解決の糸口が見えてきたような。なんとか出来そうな気がしてきました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • e10go
  • ベストアンサー率38% (47/122)
回答No.3

こんばんわ。No.1のe10goです。 何度もすみませんが、A2~C2セル(1,1200,900)をコピーして、A4~C4セルに貼り付けて、再度、マクロを実行しても同じでしょうか。

kakusan_t
質問者

お礼

出来ました!2つ目の回答もばっちりです。感謝します。 行数の変更を試行錯誤しながらやってみました。まだ、コードの解釈が完全ではありませんが使えます。すごいですね!今までこのような集計はEXCELでは不可能だと思っていました。コマンドボタン一発で出来ます。もうちょっと行数を増やしてトライしてみます。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • e10go
  • ベストアンサー率38% (47/122)
回答No.2

こんばんわ。No.1のe10goです。 >早速やってみました。残念ながら下記のようになってしまいます。 >1  1200    900    2 >1  1100    450    1 おかしいな。どうしてでしょう? 私のパソコンでは、上のコードで、 (行),F列,G列,H列,I列 (2),1,1200,900,3 (3),1,1100,450,1 (4),1,900,500,1 (5),2,1500,900,4 (6),2,900,500,1 となりましたが? データは、 (行),A列,B列,C列,D列 (1),No,長さ,幅,枚数 (2),1,1200,900,2 (3),1,1100,450,1 (4),1,1200,900,1 (5),1,900,500,1 (6),2,1500,900,1 (7),2,900,500,1 (8),2,1500,900,3 ですよね。 どこに問題あるんだろう? ちょうっと、私にはわかりません。申し訳ありません。

kakusan_t
質問者

補足

申し訳ありません。 私が自分の作ったEXCELの表でそのままVB Editerにコードを入れてしまったためです。実は私の表は7番目の行から数字が入ります。それから上は項目などの表の体裁です。あなたが書いてくれたコードは2行目からですよね。最初の答えはばっちり出来ました。現在、2つ目の回答のコードを解釈して行数の変更をしているところです。ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excel VBAでの集計マクロについて

    添付画像のような感じで、 C列に存在する同じ列名の数だけE列の数字を足して 合計値を横並び表示させたいのです 出力はGetOpen(?)から既存ファイルを開き、 2行目からデータを集計していきたいです(1行目のデータは固定値(入力済み)) 同じ記号が含まれている文字列(△1~△5)は足して出したいです VBA、まったくの未経験者ですのでご教授のほどよろしくお願いします

  • エクセル 集計について

    立て続けの質問ですいません。 エクセルデータの列がA,B,C,Dとあったとします。 Aをグループ化して Dを集計します。 この場合、集計行のB,C欄は空欄になると思います。 B,C欄の表記が同グループ内では同一の場合、その表記を集計行に 表示することは可能でしょうか。

  • エクセル シート間の集計について

    エクセル(2007)で複数のシートを集計したいです。 行には顧客名、列には売上げやコストなどの数字が入っています。 1月~12月のシートがあり、集計シートにはその合計数字が入るようにします。 月によって顧客名が増えたり減ったりするので、各シートの同じセルに同じ顧客名があるわけではありません。 こういう場合、集計することができるのでしょうか? どのような手順でやればよいのでしょうか?

  • エクセルの集計機能

    エクセルのデータ→集計の設定で例えば品目ごとの売り上げの合計などで、1つの集計行を作成するだけでなく、合計と平均、最大値などの2項目以上の集計行を作成し、同時に複数行それぞれに表示する方法はありますか?必要なだけ行を挿入し、集計等の関数をデータの下に当てはめるということです。お忙しいところ恐れ入ります。

  • Excel VBA

    Excel VBAについて シート1にはデータが入ってます。 G列に日付、L列に商品名、N列に件数。 シート2には集計結果を入力したいです。 セルB2に、日付が10月1日から15日までで、商品名がAの件数の合計。 セルB3は、日付が10月16日から末日まで、セルB4は、日付が11月1日から15日までと半月毎に集計を半年後の末日まで繰返し、B2の数行下には、商品名Bの集計行を作り、その数行下には商品名Cの集計行を作りたいです。 これまでは関数SUMIFSで集計していましたが、複数店舗分のシートの更新・メンテナンスが大変なので、VBAでの集計を考えいろいろ調べてるのですが、方法が思い付かないので、ご教授ください。

  • エクセル2007 集計について

    エクセルである月の集計を複数のセルの合計を別のシートに出したいのですが、ある月とは、2007/1とか年月を打ち込み その行のセルを別シートに集計させます。 そういったデータベース的な使い方は、エクセル2007ではできますか?

  • 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での行集計

    VBAでの行集計 いつもお世話になっております 今 マクロでの行集計で困っております。 お力をお貸し下さい m(__)m したいことは B列最終セルを見つけ出し 列の合計を出す 合計を右横最終セルまでコピーする 最終はR列までです そこで下記のマクロで合計は出しました Dim BeforePos As Long BeforePos = Range("B4").End(xlDown).Row Cells(BeforePos + 1, 2).Formula = "=SUM(B4:B" & BeforePos & ")" このセルの数式を右最終列までコピーをしたい それだけのことですがうまくいきません どうかよろしくお願いします

  • Excelで集計したとき、集計行にその上の行の文字データを表示させたい

     Excelで集計したとき、合計行には数字などの列データは合計されますが、文字列データの列は数字が出てくるので、折りたたんだときに、たとえば(顧客名の列でAさんだとたら)合計行にも、Aさんという文字を表示させたいです。  手順としては集計させたあとに、マクロで合計行にもその上の文字列を単純にコピーできたらいいです。  手作業でもいいのですが、顧客名が多くて大変です。よろしくお願いします。

  • 集計用のVBA

    いつもお世話になります。 今回は、VBAを使った、ブック間での集計について教えてください。 現在、担当者別にExcelブックが15人分あります。(ブック名の定義は"ブック2012(担当者名).xlsx") そのブックには、D3~AH49までデータ(空白セルもあります)が記入されてあり、また月別Sheetが12カ月分存在します。 そして、集計用ブックが存在し、上記のブックと全く同じ配置で構成されています(セル、シート共) やりたいこと ・集計用ブックに、担当者ブックの合計を行いたい。 ・集計用ブックに新たなシートを付加し、そこで年度や担当者名を定義したい。また、そのSheetにコマンドボタンを設置し、そのボタンを押すと自動集計が始まるようにもしたい。  *上記の担当者ブック名の年度が変更されたり、担当者が増減しても、A1セルに2013、B列セルに   担当者を記入していけば、そのブックのみの集計を行ってくれる。 以上が、私のやりたい事で、このVBAを教えていただきたいのです。 皆様、どうかよろしくお願いいたします。