VBAで大きな表の集計をする方法とは?

このQ&Aのポイント
  • エクセル2003を使っていると、大きな表を処理するのは困難です。そこで、VBAを使って集計を行う方法があります。
  • 表全体の大きさはSHEET1(A1:CQ5000)とSHEET2(A1:CQ10000)程あり、品目種類は600種類、1品目につき品番は5〜50種類ほど構成されています。
  • シート1の品目とシート2の品目を照合し、計画予定数と使用数を掛け合わせた結果をシート2の該当セルに表示させることができます。
回答を見る
  • ベストアンサー

VBAで集計をしたい

エクセル2003を使っています。大きな表があり、ファイルサイズも大きい為、VBAで処理したい 表構成: 表全体の大きさは、SHEET1 (A1:CQ5000) SHEET2 (A1:CQ10000)程あり、品目種類は600種類、1品目につき品番は5~50種類ほど構成が付いております SHEET1,B5:B8には、4行分を結合セルにした品目があり、E3:CQ3 (3ケ月分、日付), E4:CQ4(曜日) 、E5:CQ5(計画予定数)となって数値データが入っています、 SHEET2, 行E1:CO3(3ケ月分日付),、A2:A10000列には(SHEET1同様の品目),B2:B10000には品目に使う部品各種の品番、D2:D10000には品目1台あたりの使用数などがあります。 質問内容: シート1品目、シート2品目を照合し、シート1品目毎の計画予定数×シート2品目毎使用数の計算結果を、シート2該当セルに表示させたい、 シート2該当セルはE2:CQ10000です、宜しくおねがいします。

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

  • ベストアンサー
  • ki-aaa
  • ベストアンサー率49% (105/213)
回答No.2

こんにちわ。 いくつか前提があります。 シートの名前が、シート1、シー2になっていること。 計画予定数は、5,9,13・・・行に有ること シート1、シー2の日付は同じ物であること シート2は、A列でソートされていること シート2のデータは3行目から(日付が、二行使っているので) 日付は、E3:CR3にしてあります。・・・一日増やしてあります。 それから、この表がすべてうまくいっても、このままでは使い物になりません。 なぜかというと、表の範囲が広すぎて探すのが大変だからです なので、新しく質問を立ててください。 Sub 集計() Dim myDic As Object Dim 品目配列, シート1配列, シート2配列 Dim i As Long, j As Long, k As Long, n As Long With Sheets("シート1") j = .Range("B" & Rows.Count).End(xlUp).Row + 3 品目配列 = .Range("B1").Resize(j, 1).Value '対象範囲を配列に B列 シート1配列 = .Range("E1").Resize(j, 92).Value '対象範囲を配列に E...CR列 End With With Sheets("シート2") j = .Range("A" & Rows.Count).End(xlUp).Row シート2配列 = .Range("A1").Resize(j, 96).Value '対象範囲を配列に A...CR列 End With Set myDic = CreateObject("Scripting.Dictionary") For i = 3 To UBound(シート2配列) If Not myDic.exists(シート2配列(i, 1)) Then myDic.Add シート2配列(i, 1), i 'keyに追加、itemにi・・iは行数 End If Next i For j = 5 To UBound(品目配列) Step 4 '...5行目から最終行まで If myDic.exists(品目配列(j, 1)) Then For i = 1 To 92 k = myDic.Item(品目配列(j, 1)) Do シート2配列(k, i + 4) = シート2配列(k, 3) * シート1配列(j, i) If シート2配列(k, 1) <> シート2配列(k + 1, 1) Then Exit Do k = k + 1 Loop Next i Else 'マッチしなかったときの処理 End If Next j With Sheets("シート2") .Range("A1").Resize(UBound(シート2配列), 96).Value = シート2配列 End With Set myDic = Nothing Erase シート1配列, シート2配列, 品目配列 End Sub

okamoto6855
質問者

お礼

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

okamoto6855
質問者

補足

おはようございます。ご投稿頂きありがとうございます、私の説明も悪いので申し訳ありません、マクロ実行した所、 "シート2配列(k, i + 4) = シート2配列(k, 3) * シート1配列(j, i)" 部分(箇所)で停止しますが、再度教えて下さい

その他の回答 (1)

  • TAKA_R
  • ベストアンサー率32% (26/79)
回答No.1

読んでいるとVBAのコード自体はそれほど複雑でも、難しくもなさそうです。 (ちなみに間違いがあった先日の質問文のほうが分かりやすいと思います) が、「シート1」の説明がよく分かりません。 品目が600種あって、4行分縦結合? 残りのb列は? 600個が縦に4行分ずつ連なっているんでしょうか? それとも品目1つにつき、1シート。600枚あるんですか? ここが分からないことには前にも後ろにも進めません。

okamoto6855
質問者

補足

説明不足で申し訳ありません >「シート1」の説明がよく分かりません。品目が600種あって、4行分縦結合? はい縦結合です。 >600個が縦に4行分ずつ連なっているんでしょうか? 1品目につき、縦に4行分ずつ連っています、シート1、シート2の2つのシートのみです。

関連するQ&A

  • 表の集計

    エクセルで A1 りんご B1 100 A2 みかんB1300 E1 りんご F1 200 E2 みかん F1300 とあります。 この、りんごと書かれているセルの横のセルの集計をしたいのですが 関数でできますか? また、この表が、2シートにわたってあるのですが 片方のシートの端にまとめて表を作りたいと思っています 何か、方法ないですか?

  • エクセルの集計

    エクセルでの集計(集計と呼べるか解りませんが)についてです。 A列に品番 A-1・A-2・A3・・・が入力されています。B列に品番の残数量 300・500・500・・・が入力されています。品番と残数量で1つの表になっています。 上記の表を基に、他のセルに使用数量を入力して行くと、使用した数量内の品番と数量が自動で集計され、使用数量の下や隣に表示される様にしたいのですがどの様な方法があるでしょうか? (例)C1に使用数量:500と入力すると指定したセル(C2~で品番と数量は別のセルに分けます)にA-1:300 / A-2:200 D1に500と入力すると指定したセル(D2~)にA-2:300 / A-3:200 と、表の上(下からの場合もあります)から使った分を引いて行かれ、集計され、表示したいのです。 宜しくお願いします。 補足 使用した数量と使用した内訳は同じシート内で別の表としています。入力した使用数量の中に、どの品番が何キロ使用されていて、その品番が無くなったら次の品番を何キロ使用したかを自動で集計したいのです。

  • Dictionaryを使い4つの条件の一致で2つの集計列を集計したいのです

    条件4項目 日付&単位&単価&区分(A列、C列、D列、F列)の一致するもののB列及びE列を集計して別シートに書き出したいのです。  sheet1 A   B   C   D   E   F 日付  数   単位  単価  計   区分 3/12  2    人  10000 20000  通常 3/12  1    人  10000 10000  通常 3/12  1    時間  2000 10000  残業 3/14  4    時間  2000  8000  残業 3/15  4    人  10000 40000  通常 このような表を sheet2 A   B   C   D   E   F 日付 数 単位 単価 計 区分 3/12  3    人  10000 30000  通常 3/12  1    時間  2000 10000  残業 3/14  4    時間  2000  8000  残業 3/15  4    人  10000 40000  通常 のようにまとめたいのです。 Dictionaryを用い、A列、C列、D列、F列を一旦結合しkeyとし、同じものが登録されていたら、itemとしてB列及びE列の値を加算させて、登録件数分を書き出しという流れでやりたいのですが、出来ません。 助けて下さい。お願いします。

  • EXCEL2002で集計

    Sheet1に下記のようなシートがあります。 (セルA1)コードA (B1)コードB (C1)コードC (D1)店名 (E1)商品コード (F1)タイトル (G1)価格 (H1)注文数 (J1)備考 このSheet1に受注があるたび入力しています。 教えて欲しいのは、Sheet1にデータを入力する度に、Sheet2以降に該当する行だけを随時出力するにはどうしたらよいでしょうか? たとえば コードA「ABC商事」、商品コード「115-1」に該当する行だけをSheet2に出力したいのです。 Sheet3にはコードA「やまもとや」、商品コード「115-1」・・・のように。 宜しくお願いします。

  • VBAによる在庫管理について

    Sheet1のA1セルからE1セルまで「品名」、「単価」、「単位」、「在庫数量」、「備考欄」が記入されております。10000品目の在庫管理に使用しております。 Sheet2においてinputboxを使用し品名を入れるとSheet1のA1セルを起点とした表のA列「品名」から部分一致で検索し、検索結果のA列からE列までのデータをSheet3に表示するという構文を教えていただけると幸いです。 宜しくお願い致します。

  • 【エクセルVBA】条件に一致した項目の数を別シートへ表示

    はじめまして。VBA初心者です。 sheet1のA列に日付(一ヶ月分)、B列に製品名 sheet2のB2セル~AF1セルに日付、A2セル~A10セルに製品名 が入っています。 Sheet1の製品名の数を日付ごとにカウントして、その結果をSheet2の 各日付へ入力するVBAを作成したいのですが、うまくいきません。 分かり難い質問で、大変申し訳ありませんが、どなたか教えて下さい。 よろしくお願いします。

  • 集計用のVBA

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

  • 日付別集計

    エクセル初心者です。重複しておりましたら申し訳ございません。 切手管理表を作成したいのですが、 日付毎に別シートで使用枚数を抽出したいのですが、 どう関数を入れていいかわかりません。 【Sheet1】80円使用台帳  A    B     C     D 日付 購入枚数  使用枚数  残枚数 1/1    10     0     10 1/1     0     3      7 1/3     0      2       5 1/6      5     15       0 【Sheet2】120円使用台帳  A     B     C      D 日付 購入枚数   使用枚数   残枚数 1/1     5     0        5 1/2     0     1        4 1/3     0      4        0 1/5     10      0       10 【Sheet3】日付別集計  A      B       C     D        E 日付 80円購入分 80円使用分 120円購入分  120円使用分 1/1     10      3      5           0 1/2      0       0       0            1 1/3      0       2       0           4 1/4      0       0       0            0 1/5      0       0      10            0 1/6      5      15       0            0 (1)Sheet1、Sheet2は使用毎に手入力。 (2)Sheet3のA列の日付は1日~31日まで固定。 (3)Sheet1、Sheet2で入力した日付毎に枚数を自動計算してSheet3で日別に表示したい。 できませんでしょうか? わかりにくく申し訳ございません。

  • エクセルで集計

    Excel2013を利用しています。 A1のセルから下に、商品の品番がザーッと並んでいる場合 B1のセルに、何種類のアイテムがあるか表示させたいです。 品番が a501、a503、a501、a501、a501、a503、a508 と並んでいたとすると 3と表示させたいです。 よろしくお願い致します。

  • 串刺し、統計

    複数のシートに複数の伝票があり、 それをまとめのシートに合算したいのですが どの関数を用いればいいでしょうか。 各シートの伝票については 同じ形式ですが、シートに複数伝票があります。 また、 画像のようなまとめの表ですと、 品番、品名を記入しておき、 個数だけ計算させる方法と、 品目が多数ある場合、 出なかった品目を表示させない、 すなわち出た品番のみピックアップして それぞれ個数を出力する方法も 可能であればご教示願います。 http://www.evernote.com/shard/s114/sh/fcbc2a50-9b9b-4186-b513-f389e397641c/791a9745320430662e9b5dbbb4daec63

専門家に質問してみよう