• ベストアンサー

別シートに分類毎にまとめ合計を算出

シート1の表-1に会社名、区分No.、作業班ごとに工数、金額が入力されておりシート2の表-2に会社別に工数、金額の合計を算出したい、区分、作業班が同じであれば1行に工数、金額を加算し違えば次行区分、作業班が追加され会社毎の合計を出したいのですが表-2の会社名は見やすくセル結合をしていますがセル範囲が一定とならないためそれぞれの行に会社名が入っても構いません。どなたかVBAコードが解る方宜しくお願いします。

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

  • ベストアンサー
  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.1

まず、この質問になかなか、回答がつかない理由は、「Visual Basic」で質問しているからです。 もう一度、同じ内容で、「エクセル」で質問すれば、回答がすぐにつくと思います。 次に、私なりの回答ですが、前提条件から、 「シート1」(「一番左端のシート」、という意味で、名前そのものには意味はありません。どのような名前でも結構です。)の 「A1」=「表1」 2行目は、項目名で、 「A2」=「会社名」、「B2」=「区分」、「C3」=「作業班」、「D3」=「工数」、「E3」=「金額」 「A4」以降にそれぞれのデータが入っているものとします。 「シート2」(「左端から2番目のシート」、という意味。同上)の 「A1」=「表2」 2行目は、項目名で、「シート1」と全く同じです。 という、前提条件の下で、以下のマクロを走らせると、結果が出ているはずです。 (サンプルデータを作り、実際に試しています。) Option Explicit Sub Test() Dim a As String Dim n(), c, i, r As Integer Dim k, t As Long Dim s1, s2 As Worksheet Set s1 = Worksheets(1) Set s2 = Worksheets(2) r = s1.Range("A3").End(xlDown).Row s1.Range(s1.Cells(3, 1), s1.Cells(r, 5)).Copy s2.Range("A3") s2.Range(s2.Cells(3, 1), s2.Cells(r, 5)).Sort Key1:=s2.Range("A3"), Order1:=xlAscending a = s2.Range("A3").Value c = 3 k = s2.Cells(c, 4).Value t = s2.Cells(c, 5).Value Do c = c + 1 If a = s2.Cells(c, 1).Value Then k = k + s2.Cells(c, 4).Value t = t + s2.Cells(c, 5).Value ElseIf a <> s2.Cells(c, 1).Value Then s2.Rows(c).Insert s2.Cells(c, 4).Value = k s2.Cells(c, 5).Value = t c = c + 1 a = s2.Cells(c, 1).Value k = s2.Cells(c, 4).Value t = s2.Cells(c, 5).Value End If Loop Until s2.Cells(c, 1).Value = "" End Sub 簡単なプログラムの説明です。 「r = s1.Range("A3").End(xlDown).Row」は「シート1」の「A」列の最終行が、何行目なのかを取得しています(この場合、途中に空白のセルがあってはいけません)。 「s1.Range(s1.Cells(3, 1), s1.Cells(r, 5)).Copy s2.Range("A3")」 「シート1」のデータのある範囲をコピー(記憶)して、「シート2」の「A3」セルを基点にペースト(貼り付け)しています。 「s2.Range(s2.Cells(3, 1), s2.Cells(r, 5)).Sort Key1:=s2.Range("A3"), Order1:=xlAscending」 今、貼り付けた内容を、「A」列をキーとして、ソートしています(これで、同じ会社が集まります)。 あとは、まず、「A3」セルの「会社名」を読み込み、次から次へと行を調べ、同じ「会社名」だった場合は、「工数」と「金額」を足していきます。 「会社名」がそれまでと変わった場合、1行挿入して、そこに、それまでの「工数」と「金額」の合計を出力。 と、このような処理を繰り返しています。 最後の判断は、「会社名」を読み込んでみて、セルの値が空白だった場合、すべての処理を終了しています。

その他の回答 (1)

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.2

回答No.1です。 すみません、試行錯誤の段階で「Dim n()」とやっていたのですが、最終プログラムでは不要でした。 4行目の「n(),」は削除しておいてください。 申し訳ありません。

関連するQ&A

  • 別シートの合計の取り方について

    社員各人の勤務時間表を作るように言われたのですが、なかなかうまくできず悩んでいます。 Sheet1に9月分(1日~30日まで)の勤務時間が入力されています。 Sheet2に10月分。 お聞きしたいのは、Sheet1の21日(F22)~30日(F31)の合計とSheet2の1日(F2)~20日(F21)の合計を取りたいのですが、シートをまたいでも同じセルにある合計は取れても、違うセルにある合計のやり方がうまくいきません。 どなたか教えてください!!

  • セルの値を別シートの月別合計リストに貼り付けるには

    一社の該当月の請求金額合計がシート名"請求書"のX42に入ってます。これを別のシート"請求書一覧表"の該当する会社の該当月に自動で貼り付けるVBAはありますでしょうか。シート名"請求書"には会社名がE10に、発行年月日がN3に入っています。 貼り付ける側のシート名”請求金額一覧表”のA列のA2から下に会社名が70社入っています。横列はB1からM1まで1月~12月の名前が入っています。今は、"請求書"シートの合計金額をコピーして、”請求金額一覧表”シートの該当する会社の該当月に貼り付けています。 これをVBAで自動処理できればと思っています。 この日付と会社名を使って条件分岐のVBAは可能でしょうか? 今考えているのはN3に入っている発行年月日を、同じシート上で例えば =month(N3)で月だけ取得して、その月と会社名を取得して それを、請求金額一覧表”の特定のセルに貼り付ける事を考えました。Select Case やIf else if を使うと、マクロ分がとんでもなく長くなりそうです。やはり無理でしょうか?

  • 教えてください!エクセルのシートからシートへ行単位で自動転記したいのです。

    エクセルで収支表を作成しています。 区分が入っているセルがあるのですが、その区分ごとに行単位で同ファイルの違うシートへ自動転記することは可能でしょうか? 日付 入金 code  社名  区分  ~  資料計  ~  立替計  ~  前払計  合計  残金 2/3   500   1056   ××  ●表  ~   3000   ~      0   ~     500   500    11100 2/6        1057   ××  △地  ~   500   ~     300    ~       0   800    10300 2/3  800   1056   ××  ★表  ~    1000   ~   200   ~       0   1200    9900 と、いうような収支表があります。 これを「●表」、「△地」、「★表」のそれぞれのシートに、行ごと、できれば合計の前までを、自動転記することができるでしょうか? ☆出来上がりイメージ シート名(●表) 日付 入金 code 社名 区分 ~ 資料計 ~ 立替計 ~ 前払計  2/3   500  1056  ××  ●表   3000      0       500 シート名(△地) 日付 入金 code 社名 区分 ~ 資料計 ~ 立替計 ~ 前払計  2/3   0    1057  ××  △地     500      0       300 シート名(★表) 2/3   500  1058  ××  ★表   1000       0       200 収支表に入力すれば、各シートに自動的に転記され、ぞれぞれの表が作成できるようにしたいのです。 まったくの初心者です。 いままでの質問結果を見ても自分の質問がどれに当たるのかもわかりませんので質問させていただきました。 具体的にどこのセルにどのようにすればいいのか、かみくだいてご説明いただけると大変助かります。 ここに書いた表もぐちゃぐちゃで、分かりずらいとは思いますが、どうぞよろしくお願いいたします。

  • 別のシートで作ったセルの、合計値を表示させる方法を教えてください。

    別のシートで作ったセルの、合計値を表示させる方法を教えてください。 シート1で 元となるデータの一覧をつくり シート2で プルダウンで対象のデータを選ぶと 関連したデータの合計値が表示される という作業をしたいと思っています。 たとえば、下記のような作業です。 ------------------------------------------ ■シート1     A     B     C  │都道府県名│市町村名│ 人 口 │ ─┼─────┼────┼─────┼ 1 │ 北海道 │ ■■■ │ 1,234,567│ ─┼─────┼────┼─────┼ 2 │ 青森県 │ ▼▼▼ │  890,123│ ─┼─────┼────┼─────┼ 3 │     │ ●●● │  456,789│ ─┼─────┼────┼─────┼ 4 │     │ ××× │  901,234│ ─┼─────┼────┼─────┼ 5 │ 岩手県 │ ◆◆◆ │  678,901│ ◆シート2 ・都道府県名 ┌─────┬─┐ │青森県  │▼│ └─────┴─┘ ・人口 ┌───────┐ │2,248,146   │ └───────┘ (「青森」というキーワードを選ぶと、人口の合計値を算出する) ------------------------------------------ VLOOKUPをいじってみたりしたのですが、上手くいかず。。 どなたかエクセルで上記のような作業をご存知の方がいましたら 教えていただけますでしょうか。 よろしくお願いいたします。

  • Excelシートが別になったときの合計を関数でだす

    シート1は商品とその単価を入力するデータ表、 シート2はシート1の合計表とします。 たとえばシート1にセルA1に1000円、セルA2に2000と入力したら、 シート2のセルA1に、商品AとBの計3000円が自動で入力されるようにできる関数がありましたら 教えてください。 Excel2019利用です。

  • 合計を強制的に0にさせ、かつ違うセルに加算させたい。EXCEL2002

    社内の部署毎の経費一覧表作成でちょっと困っておりますので質問させて頂きます。 ・B列に各部署の5ケタの部署コードがあります(200行程度) ・C2~AI2まで日付けが入っており、各部署から申請があった金額を各コード別に1日単位で入力 ・AJ列にC列~AI列までの合計(1ヶ月の合計)が入ってます。 社内の部署変更などで月度の途中でも5ケタの部署コードが頻繁に新規追加されたり廃止されたりします。 例えば10行目にある18002とゆうコードが廃止になり、19001に統合されることになった場合、18002のAJ10の合計を0にし、かつ15行目にある19001の合計AJ15に18002の合計を加算させたいのです。 現状では、廃止の場合、別シートに廃止となったコード一覧表をつくり、合計欄の隣のAK列にVLOOKUPで「廃止コード」と表示させ、AL列に統合先の部署コードを表示させています。そして「廃止コード」とあるものは合計欄に手で0と入力し、統合先の部署コードの合計欄に金額を加算させています。私の実力ではIF関数を使えば合計を0にすることはできるのですが、別のセルに加算させることができません。 手作業の部分を自動できるなにかよい方法はありますでしょうか?シート、列、行の追加、作業列の使用などなんでも構いません。何卒よろしくお願いします。

  • エクセルで項目ごとの合計数を出したい

    会社で、出納に関する表をつけていますが、 例えば各月ごとの交通費の合計はいくらか、 交際費の合計はいくらか、 といった細かい項目ごとに合計金額を出したいと思っています。 あるシートに表があって、同じシートの表の隣に それぞれの合計額を出せたらと思っていますが、 調べてみたのですが、イマイチわからなくて質問致しました。 一番左のセルに項目が書いてあって、 その5個となりに金額が記されています。 どのようにしたら出来るのでしょうか? よろしくお願いします。 エクセル2007使用しています。

  • エクセル2003@(ちょい難)別シートからある固定値の全セルを抽出し、同じ列にある値を合計する

    お世話になります。 エクセルは簡単な関数が扱える程度です。 2時間近くググったり質問サイトの過去ログを 調べたりしても解決出来なかった計算があるので、 ご教授の程よろしくお願い致します。 やりたいことの説明 ↓(ここから) ================================== (1)シート1に次のような表を作成     |A列|B列| ----|---|---|---- 1行 |AA| 5 | 2行 |BB| 4 | 3行 |AA| 3 | 4行 |CC| 7 | 5行 |CC| 9 | 6行 |BB| 6 | (2) シート2の任意、例えばC1に「AA」と入れる。 この時、シート1のA列の中に「AA」が含まれる行を全て抽出し、 その隣のセルの値の合計をシート1のセルに出力されるようにしたい。 例えばこの場合だと、シート2のC1に「AA」と入れることにより、 シート1のB1(値は5)とB3(値は3)を加算し、シート2のD1に計算結果(値は5+3で8)を出力したい。 ================================== ↑(ここまで) 以上、宜しくお願い致します。 質問の内容がちょいややこしいので、 分かり辛ければエクセルの画像をつけて 説明させていただこうと思います。

  • Excelで別シートの合計を1箇所に持ってくる

    Excelで別シートにある1つのセル内に、 同じ日付のものは合計して入力するような方法はございますでしょうか? たとえば、Asheetで1日というならびに3つの違う金額が入っていた場合、Bsheetの1日という1つのセル内に、3つを合計して入力する。 Asheet 1日 1995 1日 7200 1日 1200 Bsheet 1日 10395 どうか教えてください。 よろしくお願いいたします。

  • excelで顧客コード別の売上合計を別シートに一覧として表示したい

    現在いシートに、 A      B     C  顧客番号  顧客名   売上 001    ショップA  ¥5000 001    ショップA  ¥20000 002    ショップB  ¥50000 002    ショップB  ¥3000 003    ショップC  ¥2000 003    ショップC  ¥3000 という表があります。 これを別シートに1行に1顧客売上合計というように 顧客コード別に売上合計を表示したいのです。 A    B       C コード 顧客名     合計金額 001   ショップA   ¥25000 002   ショップB   ¥53000 003   ショップC   ¥5000 どのようにすればよいか教えてくださいませ!  

専門家に質問してみよう