• 締切済み

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

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

みんなの回答

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

マクロの勉強でということならそれでもよいのですが、ご質問の内容でしたらマクロで対応するよりも関数を使って十分に対応出来ますし計算も瞬時にできる内容です。 次のように作業列を作って対応すればよいでしょう。 シート1にお示しの表が有るとしてA1セルからE1セルまでに項目名が、各データは2行目から下方にあるとします。 作業列をF列からH列に作るとしてF2セルには次の式を入力して下方にドラッグコピーします。 =A2&B2&C2 G2セルには次の式を入力して下方にドラッグコピーします。 =IF(F2="","",IF(COUNTIF(F$2:F2,F2)=1,MAX(G$1:G1)+1,"")) H2セルには次の式を入力して下方にドラッグコピーします。 =IF(COUNTIF(D2,"○*")=1,F2&"○","")&IF(COUNTIF(D2,"△*")=1,F2&"△","")&IF(COUNTIF(D2,"□*")=1,F2&"□","")&IF(COUNTIF(D2,"☆*")=1,F2&"☆","") お求めの表ですがシート2に表示させるとして A1セルからC1セルまでには列Aから列Cと項目名を入力します。 D1セルからG1セルまでには○、△、□、☆を入力します。 そこでA2セルには次の式を入力して右横方向にドラッグコピーしたのちに下方にもドラッグコピーします。 =IF(ROW(A1)>MAX(Sheet1!$G:$G),"",IF(COLUMN(A1)<=3,INDEX(Sheet1!$A:$C,MATCH(ROW(A1),Sheet1!$G:$G,0),COLUMN(A1)),IF(COLUMN(A1)<=7,IF(COUNTIF(Sheet1!$H:$H,$A2&$B2&$C2&A$1)=0,"",COUNTIF(Sheet1!$H:$H,$A2&$B2&$C2&A$1)),"")))

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

>VBA、まったくの未経験者ですのでご教授のほどよろしくお願いします VBAでも、そうですが、エクセルに機能についても勉強しましょう。 まずは、ピボットテーブルをご存知ですか? 別シートに、ピボットテーブル作成して、配置するとご希望の集計結果表が 自動で作成されます。 次に、既存のファイルを開いて、コピー&貼り付けして、上書き保存 これでうまくいくようであれば マクロの記録を実行して自動作成されたコードを修正するなりして 使いやすいものにしていきます。

関連するQ&A

  • EXCEL VBAマクロについて質問です

    Excel VBAマクロについて質問です ※Excel Ver.は2005でやってます 例のような感じで、 同じ列(列1)に或る同じ列名の数字(列2)を足して 違うセル、または違うブックの指定行に合計値を横並び表示させたいのですがうまくいきません 例のように 同じ言葉が含まれているもの(りんご・青りんご)は足して出したいと思ってます 【理想】実行前 ****************************** 番号  名前  個数 001   りんご  1 002   ばなな  2 003   いちご  3 001   青りんご 2 ****************************** 【理想】実行後 ****************************** 番号   りんご  ばなな  いちご 001    3      -     - 002    -      2     - 003    -      -      3 ****************************** ※「-」記号はついてなくても大丈夫です 現在、組んでいるコード・実行結果をのせておきました どなたか享受ください、お願いいたします j = 1 For i = 0 To Range("A65536").End(xlUp).Row cnt = cnt + Range("列2" & i).Value If Range("C" & i + 1).value <> Range("C" & i).value Then 'もし次の行が違う名 Range("任意セル" & j).Value = Range("A" & i).Value '列1 Range("任意セル" & j).Value = Range("B" & i).Value '列2 Range("任意セル" & j).Value = cnt '数字合計 j = j + 1 '出力行カウントアップ cnt = 0 End If Next

  • EXCEL VBAでこんな集計できますか?

    ECEL VBAでスプレッドシートの上の行から以上のような数字を入力出来るインターフェースを作りました。(計算後の数字が表記されます) No  長さ  幅  枚数 ← この項目はEXCEL上に作っておきます。 1  1200   900   2 1  1100   450   1 1  1200   900   1 1  900   500    1 2  1500   900   1 2  900   500   1 2  1500   900   3 この数字を見ますとNo1の中には1200 900 という大きさのものが計3枚 あります。No2にも1500 900が合計4枚あります。これらを下記のように集計できないものでしょうか。 No  長さ   幅   枚数  1  1200   900   3 1  1100   450   1 1   900   500   1 2  1500   900    4 2   900    500    1 また、 No   長さ   幅   枚数  1  2   1200   900    2 1  3   1100   450    1 1  6   1200   900   1 1      900   500    1 2  4   1500    900    1 2      900    500    1 2     1500   900    3 このようにNoが複数になっている場合も上記の集計は出来るでしょうか。(スプレッドシートのNoの列は複数のNoが入るように6つほど空欄で増やしておきます。) 例えば  1   2   6     1200     900    3 のように 出来ればインターフェース上のコマンドボタンで実行したいと考えています。

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

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

  • エクセルマクロ、集計行の上に空白行挿入

    エクセルデータがA、B、C、D、E列1000行まであります。 C列基準でE列を合計するマクロを作成しましたが(集計行はデータの下に挿入)、実行の結果、新たに挿入される集計行の上に空白行を1行挿入していくということを、作成したマクロに付加できるでしょうか? ご教授頂きたく、お願いします。

  • エクセルVBA

    A1からE20までの範囲に数字が表示されています。 そしてその表の行ごとの数値の合計をG列に算出して表示させたいのですが どのようにすれば良いのでしょうか。 VBA初心者なので、分かりやすく教えていただけると助かります。 よろしくお願いいたします。

  • エクセルの集計について教えてください

    エクセルの集計について教えてください 添付のように、A列からは入力用 A列 日付(複数月にまたがる) B列 金額 C列 項目 E列からは集計用として E列 項目 F列からは月ごとに集計できるような表を作りました 集計用は、また別途ほかのシートで参照して使用する予定です A列には、今後も次々データを足していく予定です 月単位でデータを抽出したのち、項目ごとに合計を算出したいのですが、どの関数を組み合わせればいいのかわかりません。 エクセルはほぼ初心者です ピボットテーブルを使用してもよいのですが、ほかのシートで参照できる方法を教えてください よろしくお願いします

  • 【Excel】マクロを使って、自動集計ができるようにしたいと思っています。

    こんにちは。 宜しくお願い致します。 アクセスがあったデータをピポッドテーブルでまとめ、さらに集計結果を出したいと思っています。 ピポッドテーブルを作成するまではマクロの自動記録でどうにかなったのですが、その後の集計結果のところでとまどっています。 <データの現状> ※ピポッドテーブルで出したデータは、1・2行目が空白、3~5行目に項目名が入っており、6行目からデータが入っています。何行までデータが入っているかはその月によって異なり、行の一番最後はA列に「総計」と入力されています。 ※A~C列は項目名(日付や商品名など)が入っています。 D列以降は合計などが入っており、ここで基準として使いたい項目はすべて4行目に入っています。 列の数は項目によって増減します。 項目の一番最後は「総計」です。 マクロで集計したいのは次の作業です。 (1)「Sheet1」を全コピー→「Sheet2」に形式を選択して貼り付け→値貼り付け (2)貼り付けたシートで、D列以降、4行目の項目が「集計1」「集計2」「詳細集計」「総計」以外のものも列を表示しないにする ※D列から始まって、「集計1」の前の列までを表示しないにするのと、「集計1」の次の列から「集計2」の前の列までを表示しないにしたい。 例えば、H列に「集計1」・L列に「集計2」が入力されている場合は「D~G列」「I~K列」を表示しないにしたい。 (3)詳細集計の列を1列選択し、列を1行挿入。挿入した列4行目のセルに「合計」と入力。 (4)挿入した列のところに、6行目以降、A列に「総計」と入っている行まで数字のデータが入っているところ(A列で「総計」と表示されている行まで)は、「集計1」と「集計2」のセルの合計をそれぞれ表示し、枠線を入れる。 (5)一番先頭に1列挿入し、6行目から元A列の「総計」と表示されている前までの通し番号を入れる。 (6)「総計」の次の列の4行目に、「ゼロ数」と入力し、5行目に(3)で挿入した列、A列に「総計」と入っている1行前までの範囲で「0」表示があるセル数を表示。 (7)ゼロ数と入力したの次の列の4行目に「ゼロ率」と入力し、先に出した「ゼロ数」を(5)で入力した通し番号の一番最後の数で割った数を表示。 (8)入力終えた後はA1のセルを選択。 以上になります。 長いですが、どなたか教えてください。 宜しくお願い致します。

  • エクセルのVBAマクロについて

    エクセルのVBAマクロについて、添付のような物を考えているのですが、宜しくお願いします。 B3~E15に関数を入れて、TRUE となったデーターを表示 させるまでは出来たのですが、このデーターをF~I列へ上から順に (空白行は詰めて)順次記録して行きたいのです。 B3~E15に表示させるデーターは、別シートから抽出し、 切り替えますので、結果を表示させたら、ボタンを押して記録し、 再度別データーを入れたらその下に記録して行くような仕組み を考えております。 宜しくお願いします。

  • エクセルマクロでピボットと集計

    エクセルのマクロを使ってピボットと集計を行いたいのですが、データは毎日更新するため行は変わります。 1.ピポットの範囲で一番下の行にデータの合計行が残ってしまうため、その行を削除したい。(=左端から右下を選択したい 余分な集計の行はG列で最終データはH列です)  2.ピボットで作成したものを普通のワークシートに全部値貼り付けした後、集計を行いたい。  A B C D E F G H (列はHまでで常に固定) G列に数値、H列に日付 ピボットの範囲と集計の範囲が都度変わっています。 自動で作成したものを手直ししたいのですが途中箇所のマクロを抜粋しました。 マクロは初心者です。 説明不足もあるかもしれませんがどうぞ宜しくお願いいたします。  ピボットの範囲選択のあたり・・・ ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "Sheet1!R1C1:R1236C8").CreatePivotTable TableDestination:="", TableName:= _ "ピボットテーブル1", DefaultVersion:=xlPivotTableVersion10 ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) 集計のあたり・・? Selection.Subtotal GroupBy:=2, Function:=xlSum, TotalList:=Array(5, 6, 7, 8, _ 9, 10, 11, 12, 13, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41 _ , 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, _ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88), Replace:= _ True, PageBreaks:=False, SummaryBelowData:=True Range("B6").Select Selection.AutoFilter Field:=2, Criteria1:="=*集計*", Operator:=xlAnd Rows("6:900").Select With Selection.Interior .ColorIndex = 34 .Pattern = xlSolid

  • 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での集計を考えいろいろ調べてるのですが、方法が思い付かないので、ご教授ください。

専門家に質問してみよう