• 締切済み

原産国別で商品毎の個数と金額の合計を計算したい。

excel2016にてインボイスを作成しております。 A列に商品名、B列に(原産国)を入力しておりますが、画像の→先のように原産国別に、商品名毎の個数と金額の合計を計算し、結果を別シート(Sheet2)へ貼り付けようとしております。 ピポットテーブルは小計機能は集計行が入り組んでリストとして見にくいので、使用したくはないです。 ご教授いただけたら幸いです。 ちなみに自分はvbaを少し使用できます。簡素なメソッドやステートメントがあればご教授ください。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

操作と関数でやってみました。 操作が入っているので、データの変動に対して、一部やり直しが必要という 欠点があるが。 ーー 例データ A1:D9 商品 原産国 個数 金額 SUNSCREEN CHINA 1 20000 SUNSCREEN JAPAN 2 4000 SUNSCREEN JAPAN 1 5000 SUNSCREEN JAPAN 2 10000 SUNSCREEN JAPAN 1 5000 CAMERA JAPAN 1 100 CAMERA JAPAN 1 100 DOLE INDIA 3 5000 ーーー E1:D9 の結果です。 結合 分離1 分離2 SUNSCREEN CHINA SUNSCREEN CHINA SUNSCREEN JAPAN SUNSCREEN JAPAN SUNSCREEN JAPAN CAMERA JAPAN SUNSCREEN JAPAN DOLE INDIA SUNSCREEN JAPAN CAMERA JAPAN CAMERA JAPAN DOLE INDIA ーー 式と操作は、 E2の式 =A2 & " " & B2 下方向に式複写 E2:E9について、(操作)データーフィルター重複するレコードは無視する で、 SUNSCREEN CHINA SUNSCREEN JAPAN CAMERA JAPAN DOLE INDIA を、F列に出す。 F列について、データー区切り位置でスペースで区切りを指定し、2列(F,G列に)分離して出す。 F1:G5に 分離1 分離2 SUNSCREEN CHINA SUNSCREEN JAPAN CAMERA JAPAN DOLE INDIA ができる。 ーー 最終的な計数算出のための関数。 H2セルの式 =COUNTIFS($A$2:$A$9,F2,$B$2:$B$9,G2) 下方向に式を複写。 G2セルに式 =SUMIFS($D$2:$D$9,$A$2:$A$9,F2,$B$2:$B$9,G2) 下方向に式を複写。 ーー 結果 H1:I5 件数 合計 1 20000 4 24000 2 200 1 5000

  • HohoPapa
  • ベストアンサー率65% (454/692)
回答No.3

SQLを使うとよりシンプルになります。 よかったら使ってみてください。 Sub SampleX()    Dim cn As Object  Dim rs As Object  Dim SQL As String  Dim shF As String  Dim shT As Worksheet    'DBを定義、設定  Set cn = CreateObject("ADODB.Connection")  Set rs = CreateObject("ADODB.Recordset")  cn.Provider = "Microsoft.ACE.OLEDB.12.0"  cn.Properties("Extended Properties") = "Excel 12.0;HDR=Yes;IMEX=1"  cn.Open ThisWorkbook.FullName  shF = "FROM [Sheet1$A1:Z64000]" '検索対象シート名と範囲  Set shT = ThisWorkbook.Sheets("Sheet2") '出力先シートを定義    'SQL文を組立、実行  SQL = "SELECT [商品],[原産国]," & vbCrLf  SQL = SQL & "SUM([個数]) as KTotal,SUM([金額]) as GTotal" & vbCrLf  SQL = SQL & shF & vbCrLf  SQL = SQL & "Group by [商品],[原産国]" & vbCrLf  rs.Open SQL, cn    '出力先をクリアーして結果セットを出力  shT.Cells.ClearContents  shT.Cells(1, 1).Value = "商品"  shT.Cells(1, 2).Value = "原産国"  shT.Cells(1, 3).Value = "個数"  shT.Cells(1, 4).Value = "金額"  shT.Cells(2, 1).CopyFromRecordset rs    '後処理  rs.Close  Set rs = Nothing  cn.Close  Set cn = Nothing End Sub

greenvage
質問者

お礼

ありがとうございます。 SQLはまだやったことがないのですが、参考にさせていただきます。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

Dictionaryオブジェクトを使って計算してみました。結果はSheet2に書いています。 ご参考に。当方、win10、Excel2010です。 Sub Test()  Dim ws1 As Worksheet '// ワークシート1  Dim r As Range    '// セルカウンタ  Dim col As Long    '// 列カウンタ  Dim dicKey As String '// キー  Dim myDic As Object  '// ディクショナリー  Dim work As Variant  '// ワーク変数    Set ws1 = Worksheets("Sheet1")  Set myDic = CreateObject("Scripting.Dictionary")  myDic(0) = Application.Index(ws1.Range("A1").Resize(, 4), 1, 0)    For Each r In ws1.Range("A2", ws1.Range("A" & Rows.Count).End(xlUp))    dicKey = r.Value & Chr(2) & r(, 2).Value    If Not myDic.exists(dicKey) Then      ReDim work(1 To 4)      For col = 1 To 4   '// A-D列を配列に格納        work(col) = r.Offset(0, col - 1).Value      Next      myDic(dicKey) = work '// Itemに格納    Else      work = myDic(dicKey)      work(3) = work(3) + r.Offset(0, 2).Value '// 個数を加算      work(4) = work(4) + r.Offset(0, 3).Value '// 金額を加算      myDic(dicKey) = work    End If  Next  Worksheets("Sheet2").Range("A1").Resize(myDic.Count, 4).Value _            = Application.Index(myDic.items, 0, 0) End Sub

greenvage
質問者

お礼

ありがとうございます。 CreateObject("Scripting.Dictionary")など、私にとっては未体験のvbaですが、 参考にさせていただきます。

  • kon555
  • ベストアンサー率52% (1755/3371)
回答No.1

vbaが使用できるなら、私ならシンプルに配列に入れて計算させます。組み合わせ数が固定なら通常の配列でいいですが、変動するなら2次元配列の方がいいですね。 「商品」「原産国」が一致したら「個数」と「金額」に加算。一致しなかったら配列一個追加、という風にすればいいです。 https://www.tipsfound.com/vba/02016

greenvage
質問者

お礼

ありがとうございます。参考にさせていただきます。

関連するQ&A

  • エクセル★商品別の合計個数を出したいのですが。

    下記のようなA表があります。データは500以上あります。 今までは、一番右の日付の列がなかったので、データ→集計で簡単に商品別の個数を出すことができたのですが、日付が増えたので、商品別かつ日付別の個数を出したいのですが、簡単に出す方法はありますでしょうか?ちなみに、データ→集計のときのように、各商品名のすぐ下の行に合計個数を出したいです。 よろしくお願いしますm(_ _)m A表 商品コード 商品名      個数    日付 1000011111 シュークリーム 100    12.3.5 1000022222 モンブラン 120     12.3.3 1000033333 チーズケーキ 35     12.9.8 1000044444 アップルパイ 30   12.10.11 1000055555 フルーツタルト 25   12.10.11 1000066666 シブースト 11   12.9.6 1000022222 モンブラン  22   12.3.3 1000055555 フルーツタルト  25   12.10.11 1000011111 シュークリーム  100   12.12.24 1000044444 アップルパイ  30   12.10.11 1000055555 フルーツタルト  25   12.12.12 1000055555 フルーツタルト  99   12.12.12 1000011111 シュークリーム  66   12.3.5 1000044444 アップルパイ  18   12.5.5 1000077777 ナポレオン  26   12.3.3

  • 商品の単価と個数を入力するだけで合計金額を出したいのですが。

    エクセルのA列に商品名を入力(現在42行あります)し、B列に商品の単価を入力、さらにC列以降は4月(C列)、5月(D列)、6月(E列)・・・というふうに月別に列を設けて表を作っています。 そして、商品を注文した場合にだけ、各商品の個数を、その商品名の行(で且つその月の列)に入力していき、一番下の行(現在は43行目)にその月に注文した全てのものの合計金額がいくらであったかを表示させています。 最初は注文する商品が少なかったので、 =$B$1*C1+$B$2*C2+$B$3*C3 というような計算式を合計金額の欄に入力し、それを月ごとの合計金額の欄にコピーして貼り付けて使用していたのですが、だんだん商品が増え、計算式が膨大になって見苦しくなってきました。 もっと簡単に計算してくれる関数があればと思うのですが、みつかりません。 どなたか教えてください。

  • エクセルで集計

    エクセルで集計 シート1に1つの列に各支店名、2つ目の列に各商品名、3つ目の列に商品個数がランダム入力されているデータをシート2に自動で整理し集計したいのですが、2つの列の集計は関数SUMIFできるのですが、例えば、「各支店の商品個数の集計」など、「各支店の各商品の個数の集計」などの3つの列の集計方法を分かる方、いましたら教えてください。宜しくお願いします。

  • Excelで、出勤人数の集計方法は?

     現在、私の手元に工場の作業日報のデーターベースがあります。  いつ、誰が、どんな作業を、何時から、何時まで行っていたかというデーターが約半年分、行数にして1万5千行ほどあります。    このデーターベースから、日付毎の出勤人数を集計したいのですが、集計やピポットテーブルを使用しても上手く往きません。  A列に日付、B列に作業者名、C列以降に作業名や時間が入力されているのですが、一人が一日に複数の作業を行った場合、同じ日付に同じ作業者名が幾つもダブって入力されています。  集計やピポットテーブルを使用しても、例えば同じ日付に同じ作業者名が3回登場すると、1とカウントせず、3とカウントしてしまいます。  このように、データーの個数を集計するのではなく、データーが何種類有るかを集計する方法は無いのでしょうか。詳しい方、どうかご教授下さい。  では。

  • excel 小計 他の列も残したい

    たとえばExcelシートで 商品コード,商品名,数量 CD01,商品名1,2 CD02,商品名2,1 CD01,商品名1,2 というような列項目でを小計処理する場合、 ・商品コードで集計したら商品名がわからない ・商品名で集計したらコードがわからないから中間処理の場合、後が面倒。 というジレンマになると思いますが、比較的楽に 商品コード,商品名,数量(小計) CD01,商品名1,4 CD02,商品名2,1 この形にするテクニックなどはありますでしょうか? 今の流れは 1.コードをキーに小計 2.小計行のみ表示 3.ジャンプ[可視セル]を選択し、別シートに小計行のみ複製 4." の集計"を置換削除 5.vlookup()でコード基準で商品名を引用する ……毎回コレをしてるけど、面倒だなぁと。 よろしくお願いします。

  • Excel VBA フォルダ個数計算方法

    任意のフォルダ内におけるフォルダ個数をExcel VBAで計算したいのですが、 (例) C:\フォルダ個数\Aa001 C:\フォルダ個数\Ai002 C:\フォルダ個数\Au003 ・・・・・・ C→「フォルダ個数」フォルダ内に、任意のフォルダ(都度変わる)が複数存在し、 任意のフォルダ内(上記例ではAa001,Ai002,Au003)にあるフォルダ数をExcelに出力したい。 <出力結果Excel(例)> A列   B列 Aa001  10 Ai002   5 Au003   2 ※A列に任意のフォルダ名、B列に任意フォルダ名内のフォルダ個数 ※シート名は、「フォルダ数」とした場合 以上お手数おかけいたしますが、ご教授の程よろしくお願いいたします。

  • エクセルのピポットテーブルで、フィールド名が正しくないとのエラーが

     エクセルのピポットテーブルについて勉強し始めたところです。  自分で作ったエクセルシートの一覧表をピポットテーブルを使って集計しようとしていますが、「ピポットテーブルのフィールド名は正しくありません。ピポットテーブルを作成するには、ラベルの付いた列でリストとして編成されたデータを使用する必要があります。ピポットテーブルのフィールド名を変更する場合は、フィールドの新しい名前を入力する必要があります。」というメッセージがでて、集計しようとする範囲が指定されません。  ちなみに、元のシートの一覧表の項目には、左右隣同士のセルを結合して、その下に複数の項目を設けているセルが存在します。  お解りの方、どうかよろしくお願いします。

  • 個数によって値段の変わる品物の合計金額を算出したい

    画像左上のようなA~D列にわたる表があるとします。 これは、例えば田中さんが4月1日にある品物を10個購入した、という意味です。 この品物は一度に購入する個数によって値段が変わり、F~I 列にあるように1~10個目は1個30円、11~20個目は1個20円、21~40個目は1個10円で購入できます。 このような条件のもとで、画像左下のように、各人の日付ごとの購入金額を一気に算出したいです。 できましたら、F~I 列の個数や金額の条件を変更した時に、その結果を反映してくれるような方法であるとありがたいです。 どなたか、このような方法をご教授ください。 使用しているのはExcel2010です。 また、以下に画像のようなExcelファイルをアップロードしましたので、 もしご回答を作られる場合はお使いください。 http://www1.axfc.net/uploader/Sc/so/289617.xls

  • エクセルで「名寄せ」と集計(個数と合計)の方法?

    エクセル97です。 行数17000件以上の大きな表があります。 A列が地方(関東、東北とか)、B列が支店コード(8ABとか)、C列が支店名(大宮支店とか)、D列が社員コード(RX1234とか)、E列が社員名(山田太郎とか)、F列が社員の属性(記号でXXXとか)G列が顧客名(鈴木花子とか)、H列が購入商品種類(今回はすべて同一で仮にAAA)、I列が商品番号(0001とか)、J列に購入金額(13000とか)、K列に購入日(2003/5/10とか) 以下、AJ列までデータが入っています。 この表のG列の顧客名を名寄せし、その顧客がいくつ買ったか(=J列の購入金額の個数)、いくら買ったか(=J列の購入金額の合計)を集計し、上位ベスト100を出したいのです。ただし、顧客名は同姓同名がいるでしょうからあくまでA~C列が同一であるという条件で絞りたいのです。 データの並び替えでやろうかと思いましたが、17000件ではひるんでしまいました。 こういう場合、なにかいい方法はありませんでしょうか?

  • エクセル 年間ランキングの集計方法

    エクセルで1月から12月の人気商品ランキングを集計したいと思っています。 月ごとに計12枚のシートがあって、その中に商品名と販売個数が300列ほど入っています。 エクセルを使って1年分の商品売上順に並べたいのですがどのようにすればよいでしょうか。

専門家に質問してみよう