• 締切済み

マクロでソートもできて、ダブっている商品の数量を合算する方法はありますか?

私の会社は非常にアナログで、FAXによる手書き注文をエクセルで打ち変えて手配しています。 その際に利用している注文書は、商品コードを入力すると「商品名」・「単価」を隣のシートからひっぱってくるVLOOKUPを使っています。 商品の数量は自分で入力しないといけません。 そこで・・ バラバラで商品コードを入力しても、後でソートをすればABC順に並んで、さらに中で重複している商品があれば数量を自動的に合算してくれる・・・・ なんてことはマクロでできないでしょうか・・。 宜しくお願いします!

みんなの回答

  • nobu555
  • ベストアンサー率45% (158/345)
回答No.4

一つ書き忘れたことがありました。 並び替えをする際、セルを結合していると 単列での並び替えは出来ますが、 複数列を並び替えの時結合セルが含まれると、 エラーになります。 結合を解除して列幅の調整で対応してください。

  • nobu555
  • ベストアンサー率45% (158/345)
回答No.3

やはり質問者さんの要望には、マクロで回答が必要ですね。 しかし、当方ご希望に添えるマクロとまで行きませんが、 下記に参考となるマクロを記載いたしますので、 参考にしてください。 Sub 並び替え重複合併() ' 並び替え 最終行 = Range("A65536").End(xlUp).Row Range(Cells(1, 1), Cells(最終行, 5)).Select Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal ' 重複合併 For i = 2 To 最終行 If Cells(i, 1) = Cells(i + 1, 1) Then Cells(i + 1, 1).Select Selection.Copy Cells(i, 1).Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlAdd, SkipBlanks:= _ False, Transpose:=False Cells(i + 1, 5).Select Application.CutCopyMode = False Selection.Delete Shift:=xlUp End If Next i End Sub ※参考ですので、完全に重複する商品を合算させることが出来ません。 三箇所以上の重複は、再度マクロを実行させるか、 数量を「コピー」「形式を選択して貼り付け」から「加算」を選択して 不要な行を削除する(マクロの重複合併と同じ操作です)必要があります。 また、マクロ実行後は、データを元に戻すことが出来ませんので セーブしておくことをお勧めします。 尚、以後質問をなさるときは、 コンピューター [家庭向け] > ソフトウェア > Office系ソフト で、質問されたほうが閲覧者が多いので、 より希望に添える回答が得られると思います。

  • nobu555
  • ベストアンサー率45% (158/345)
回答No.2

まず商品のリスト(重複しない)を仮にL列に作ります。 <リストの作り方> 「データ」「フィルタ」「フィルタオプションの設定」から 「抽出先」は、「指定した範囲」を選択 「リスト範囲」は、”B列~E列(結合)の項目行から入力最終行まで”選択 「検索条件範囲」は、”空白”のままで 「抽出範囲」は、セルL1を選択 「重複するレコードは無視する」にチェックを入れて、OKボタンをクリックする。 これで、リストが出来ます。 後は、M列に下記の式をリストの同じ数だけコピーしてください。 =SUMIF($B$2:$B$1001,L2,$G$2:$G$1001) これで出来ると思うのですが。

tanakanet
質問者

お礼

回答が遅くなりまして申し訳ありません。 私の説明が下手で・・・ 私の会社では前述のような注文書を手入力で作成しています。 列の説明からすると・・・ A列・・商品コード B列~E列(結合)・・商品名 (隣のシートから商品コードが一致するものをIFでひっぱってくる) F列・・チェック欄なので未入力 G列・・数量(あとで手入力) H列・・単位(B列~E列同様) I列・・単価(H列同様) となっています。 商品コードを入力すると、結合した部分に商品名が入り単価もでますが 数量だけはお客様の注文書を見ながら手入力しか方法はありません。 上から順に入力していくと、 同じ商品が2,3箇所はいっていることがあります。 その場合、手計算で数量を足していき、1行にまとめます。 かなり制約があるなか、転記(手入力)作業しているので 何か時間短縮できる方法はないかと思い考えあぐねています。 再度、何かよい方法を教えて頂けないでしょうか? 教えていただいたのは確かに合算しますが 私が合算したいのは、同じ列内で合算、いらなくなった行を削除する 方法です。 宜しくお願いします。

  • nobu555
  • ベストアンサー率45% (158/345)
回答No.1

>重複している商品があれば数量を自動的に合算 上記に対して、 =SUMIF(範囲,検索条件,合計範囲)を使えば マクロじゃなくてもで出来ますよ。 例) 範囲:商品名が入力されている列 検索条件:数量の知りたい商品名 合計範囲:数量が入力されている列 をお使いのワークシートの仕様に合わせて変更してください。

tanakanet
質問者

お礼

さっそくの回答ありがとうございます! ただ商品名のところは =IF(A12="","",VLOOKUP(A12,価格表!$A$1:$D$1001,2,FALSE)) がはいっているんですが・・・ A列 商品コード B列~E列(結合)商品名(上記のVLOOKUP) G列 数量 J列 単価(VLOOKUP) と入力されているんですが・・・ どうしたらいいんでしょう・・

関連するQ&A

  • ファイルメーカーで数量を合算させる方法について

    店舗と倉庫で棚卸を行いまして、「商品番号」、「数量」、「棚番」で入力をしました。 ファイルメーカーで数量を合算させる方法を教えていただけますでしょうか。 [商品番号]  [数量]  [棚番] 1000001    20    a02 1000002    50    a02 1000012    30    b01 1000001    50    c05 を下記のように [商品番号]  [数量]  [棚番] 1000001    70    a02 c05 1000002    50    a02 1000012    30    b01 できれば棚番がスペースであけて追加されていると助かります。 どなたかご存知の方、解決方法を教えてくださいますようお願いいたします。 ※OSはWindowsXP+SP2、ファイルメーカー6.0pro win版です。

  • Access DB 商品名の扱いについて

    (テーブル名):(フィールド名) 商品テーブル:商品名。 単価数量テーブル:商品単価、数量、仕入番号、商品名。 仕入テーブル:仕入番号、仕入日、注文日、手数料、輸送費など。 売上テーブル:売上、販売日付、仕入番号、商品名。 リレーションシップ:一対多 商品テーブル商品名-単価数量テーブル商品名 商品テーブル商品名-売上テーブル商品名 仕入テーブル仕入番号-売上テーブル仕入番号 仕入テーブル仕入番号-単価数量テーブル仕入番号 このように作成しました。 ここで問題なのが、商品名の入力です。 仕入テーブルをメイン、単価数量テーブルをサブフォームにしてフォームを作成しました。 さて、商品名を単価数量テーブル商品名フィールドのサブフォームから入力・・・と思ったら、商品テーブル商品名フィールドに名前がないためエラーが出ます。(参照整合性をしているため) サブフォームの入力フィールドを商品テーブル商品名に変更すれば入力できます。 しかし、重複した商品名を入力できません(重複しないに設定しているため) 何故このようなことをするか?ですが、同じ商品でも購入日が違えば単価が違う場合があります。 ですので単価数量テーブルでは同じ商品名を使用する必要があります。 しかし、商品テーブルでは同じ商品名は必要ありません。 もちろん先に商品テーブルに商品名を入力すれば問題ありませんが、入力効率から言って問題あります。 さてここで質問なのですが、一対多の多から商品名を入力して一側に反映できないでしょうか? 一側にすでに同じ商品名がある場合は反映してはいけません。 ちないにVBAやSQLはコピペぐらいはできますが、書けませんのでご了承を。

  • 条件が変わると手配品番が変わる構成について

    excel2010 コード001があれば手配品番はA コード002があれば手配品番はA コード001とコード002は、それぞれが重複していなければAの手配品番 コード001とコード002が重複していたらBの手配品番 というのを実現する構成についてアドバイスいただきたく。 こんなイメージです (1)       数量 コード001   3 コード002   0 手配品番A   3 (2)       数量 コード001   0 コード002   5 手配品番A   5 (3)       数量 コード001   4 コード002   4 手配品番B 4 vlookupとsumifで(1)、(2)はなんとか集計できますが、(3)をどの様な構成で 集計したらよいか教えていただきたく。 なお、上記の様に重複していたら手配品番が変わるものは、他にもあります。 コード003、コード004単独 手配品番:C コード003、コード004重複 手配品番:D の様にです。  

  • マクロ ソートをしたいのですが、組み込めますか

    マクロの説明 1.Sub Sample7()はsheet4の列をソートするマクロです。 (単独では、このマクロでソートできる) 2.Sub sample2()はsheet4のソート以外は完成しています。 やりたいこと Sub sample2()の中にsheet4の重複データを削除したもののソートのコードを組み込みたい。 但し、組み込むとしてSub Sample7()のコードでよいのか、初心者なのでよくわかりません。 なお、Sub sample2()のマクロは途中省いています。 Sub Sample7() Sheets("sheet4").Range("A1:A1135").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlYes End Sub Sub sample2() Dim data As Variant 'データコピー用の使いまわし配列 Dim dic As Object Dim i As Long Set dic = CreateObject("Scripting.Dictionary") 'Sheet4~5のA列をリセット Sheets("Sheet4").Range("A2:A" & Rows.Count).ClearContents Sheets("Sheet5").Range("C3:C" & Rows.Count).ClearContents            ↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 'Sheet4に重複していないデータを書き込み With Sheets("Sheet4") .Cells(Rows.Count, "A").End(xlUp).Offset(1).Resize(dic.Count).Value = Application.Transpose(dic.keys) 'Sheet4のC列をSheet5にコピー data = .Range("C2:C" & .Cells(Rows.Count, "A").End(xlUp).Row).Value End With Sheets("Sheet5").Range("C3").Resize(UBound(data)).Value = data Set dic = Nothing End Sub

  • excel 商品リストにて 商品名を入力→単価自動的に表示

    商品リストを作成してます シート1に商品リスト、シート2に単価表を作成してます 商品リストAセルに日付、Bセルに商品名、Cセルに数量、Dセルに単価、Eセルに小計、Fセルに仕入先とします。 各商品にコードを指定するのではなく ダイレクトに、商品名で反映?です 商品名と数量を入力すると、単価→小計が出せる数式にしたいのですが 力不足のためご質問させていただきます VLOOKUPを使用してかな?と試みてはみました・・・・・・ 最終的には、商品ごとに1カ月の合計を出したいのですが どなたかお解りの方がいらっしゃいましたらお教えくださいますよう お願いいたします 質問の内容やわかりにくいところがありましたら 申し訳ありません どうぞよろしくお願いいたします

  • エクセル マクロ VBA での部分参照ソート

    エクセル2003で 下記のようなデータをソートし、 【ソート前】 2208550 92059184 92059174 92059174B 92059174A 92059174C 1348535 19777225 2519034 2519034D 2519034B 2519035A 2519035C 【ソート後】 1348535 19777225 2208550 2519034 2519035A 2519034B 2519035C 2519034D 92059184 92059174 92059174A 92059174B 92059174C 上記ソート後の結果を得られるマクロを作りたいです。 文字列の右にABCが付与されるコードです。 よろしくお願いいたします。

  • EXCELのマクロで数値比較

    「数量」「単価」「金額」のEXCELの表があり「金額」欄が「入力」であったり「計算式」であったりするため「金額」の不整合をチェックするマクロを作りました。(コードの一部は下記) For cntR = 5 To MaxRow If Cells(cntR, 8).Value <> _ Application.RoundDown(Cells(cntR, 6).Value * Cells(cntR, 7).Value, 0) Then Cells(cntR, 23) = "計算違い" End If Next 計算違いとは思えないのに”計算違い”となってしまいます。 テストした表の内容 数量:200 単価:20、20.1、20.3・・・・・20.9、21 金額:=数量*単価の計算式が入っている。 マクロ実行後”計算違い”となってしまうケース。 単価:20.1と20.4の時 ※金額に手入力してみる:”計算違い”になりません。 ※金額欄の計算式を変えてみる=Rounddown(数量*単価,0):”計算違い”になりません。 どこに問題があるのか特定できずにいます。 EXCEL2007・2000の両バージョン下でマクロに手を加えてます。

  • エクセル: 手配数量の自動入力化 (在庫管理)

    エクセルで在庫管理をしており、その在庫補充数量を自動入力出来るマクロをお教え下さい。 エクセルの項目には、 ①Sheet1に、商品名・在庫レベル・SPQ・月末在庫・内示・手配数量があります。 ②隣のシートに、在庫レベルのテーブルがあります。 製品の手配数量は、在庫レベルによって基準があるため、各月の在庫回転期間が、その在庫レベルを超え、且つ最小公倍数となる値を求めるようなマクロを組みたいと考えていますが、その方法がありましたら、ご教示下さい。 (手配数は、SPQの倍数になります。) 宜しくお願い致します。

  • エクセル2010 商品リストを参照したい

    注文書作成時、商品リストを参照して入力を簡略化したいです。 注文書の商品名を入れると、それに連動して 商品リストの商品コード、得意先コードも表示されるようにしたいです。 商品名は入力規則のドロップダウンリストで入力するようにして 入力された文字列を検索値にVLOOKUPを使う?と考えましたが 商品名は文字列のせいか、うまく検索されません。 よい考え方や、関数はありますでしょうか。 宜しくお願い致します。

  • vlookup関数で求めた数値の合計

    excelで20行まで入力できる発注書を作っています。 vlookup関数で商品コードを入力すると、商品名と単価は自動で表示されています。 単価×購入数量で商品毎に購入金額を求め、総合計を自動計算させたいのですが、、、 発注書には必ず20品目入力されるわけではありません。 この入力されない商品行の合計金額は#valueとなっています。 結果として総合計も#valueとなってしまいます。 どなたか総合計を求める方法をご教示ください。 宜しくお願いいたします。