[[20180809144445]] 『仕損費の集計』(toto) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『仕損費の集計』(toto)

お世話になります
仕損費の集計表です
A列には1月から12月までの月、B列は日、C列は品番、D列は金額が入っています。
この表の品番の合計金額を2種類に分けて出したいのです。
1つ目は月度で抽出し8月の合計金額をSeet2の決めたセルに¥3200
2つ目もSeeT2の決めたセルに8月度の品番別の合計金額を。2種類あるので品番ごとに。
同じように9月の分10月の分と入れていきたいのです。

Seet1 
A  B  C   D        Sheet2  合計  品番別 金額
月 日 品番  金額        8月   ¥3200   a-1234 ¥200            
                           c-2487 ¥3000
8  1 a-1234 100  
8  3 a-1234 100       9月    \460    e-5789 \400
8  5 c-2487 1000                 f-2369 \60
8  6 c-2487 1000
8  7 c-2487 1000
9  2 e-5789 200
9  3 e-5789 200
9  5  f-2369  30
9  6  f-2369  30
よろしくお願いいたします

< 使用 Excel:Excel2010、使用 OS:Windows7 >


質問内容がわからないですが、SUMIFS関数で解決できたりします?
(もこな2) 2018/08/09(木) 20:10

 Sheet1の月は、数値ですよね?
 Sheet2の8月は、数値だけ入ったセルの教示形式で8月にしているのでしょうか?
 それともまんま、8月?
(BJ) 2018/08/09(木) 22:38

 ピボットテーブルでいいのでは?
「Seet2の決めたセル」というのが、どういうことか分かりませんけど。

 一応、確認
 ・品番は本当に2種類だけ?
  それは月ごとに決まっていて、Sheet2に品番は入力済みなんですか?
 ・例示では、8月と9月の品番は別のものですが、
  同じ品番が別の月に出てくることはないんですか?

 以上です
(笑) 2018/08/09(木) 23:10

説明不足ですいません。
Seet1の月は数値です。8月なら8です。
Seet2の決めたセルというのは、事前に決めた任意の場所なのでどこでも良いという事です。
品番はたくさんありますが、どれくらい不良が出るかはわかりませんので、予想として1カ月100品番くらいで
設定したいと思います。
Seet2にはあらかじめの入力はされていません。
同じ品番が別の月に何度も出てくることはあります。

よろしくお願いします。

(toto) 2018/08/10(金) 10:00


 私もピボットテーブル推奨ですね。
 日付は、月と日を別に入れるのではなく日付データにしてしまった方が良くないですか?
(コナミ) 2018/08/10(金) 10:12

Sub main()
    Dim c As Range, dic As Object, k As Variant, i As Long, tot As Long, sht1 As Worksheet, sht2 As Worksheet
    Set sht1 = Sheets("Sheet1")
    Set sht2 = Sheets("Sheet2")
       sht2.Cells.ClearContents
        sht2.Range("A1:D1").Value = Array("月", "合計", "品番別", "金額")
        For i = WorksheetFunction.Min(sht1.Range("A:A")) To WorksheetFunction.Max(sht1.Range("A:A"))
            Set dic = CreateObject("Scripting.Dictionary")
            tot = 0
            For Each c In sht1.Range("A:A").SpecialCells(2)
                If i = c.Value Then
                    dic(c.Offset(, 2).Value) = WorksheetFunction.SumIfs(sht1.Range("D:D"), sht1.Range("A:A"), i, sht1.Range("C:C"), c.Offset(, 2).Value)
                End If
            Next c
            sht2.Range("C" & Rows.Count).End(xlUp).Offset(1, -2).Resize(, 2).Value = Array(i, WorksheetFunction.SumIf(sht1.Range("A:A"), i, sht1.Range("D:D")))
            For Each k In dic
                sht2.Range("C" & Rows.Count).End(xlUp).Offset(1).Resize(, 2).Value = Array(k, dic(k))
            Next k
        Next i
End Sub
(mm) 2018/08/10(金) 10:18

 Sheet1

     |[A]|[B]|[C]   |[D] 
 [1] |月 |日 |品番  |金額
 [2] |   |   |      |    
 [3] |  8|  1|a-1234| 100
 [4] |  8|  3|a-1234| 100
 [5] |  8|  5|c-2487|1000
 [6] |  8|  6|c-2487|1000
 [7] |  8|  7|c-2487|1000
 [8] |  9|  2|e-5789| 200
 [9] |  9|  3|e-5789| 200
 [10]|  9|  5|f-2369|  30
 [11]|  9|  6|f-2369|  30

 Sheet2

    |[A]|[B]                                                                          |[C]   |[D]                                                    
 [1]|   |合計                                                                         |品番別|金額                                                   
 [2]|8月|=SUMPRODUCT((Sheet1!$A$3:$A$11=--SUBSTITUTE(A2,"月",""))*(Sheet1!$D$3:$D$11))|a-1234|=SUMPRODUCT((Sheet1!$C$3:$C$11=C2)*(Sheet1!$D$3:$D$11))
 [3]|   |                                                                             |c-2487|=SUMPRODUCT((Sheet1!$C$3:$C$11=C3)*(Sheet1!$D$3:$D$11))
     ↑
  文字の8月
(BJ) 2018/08/10(金) 10:56

 ああ、8月も入れるんだった。
 (因みにSUMIFSを使ったことが無いので・・・。)

 Sheet2!D2
 =SUMPRODUCT((Sheet1!$A$3:$A$11=--SUBSTITUTE(A2,"月",""))*(Sheet1!$C$3:$C$11=C2)*(Sheet1!$D$3:$D$11))

 Sheet2!D3
 =SUMPRODUCT((Sheet1!$A$3:$A$11=--SUBSTITUTE(A2,"月",""))*(Sheet1!$C$3:$C$11=C3)*(Sheet1!$D$3:$D$11))
(BJ) 2018/08/10(金) 11:20

コナミ様、mm様、BJ様回答ありがとうございます。

ピポットテーブルも勉強します。

BJ様の式がやりたかったことに合致したのでそちらでやってみました。
見事できました。 ありがとうございました。

(toto) 2018/08/10(金) 13:33


 ???

 Sheet2に品番は入力していないという話だったはずですけど
 入力してあるんですか?

 品番が入力してあるのなら

	A	B	C	D
1	月	合計	品番	金額
2	8	3,200	a-1234	200
3	8		c-2487	3,000
4	9	460	e-5789	400
5	9		f-2369	60

 A列には「8」とか「9」とだけ入力し(表示形式〜ユーザー定義 0"月")
 A3とかA5を空白にせず、すべて埋める。

 B2 =IF(OR(A2="",A2=A1),"",SUMIF(Sheet1!A:A,A2,Sheet1!D:D))

 D2 =IF(C2="","",SUMIFS(Sheet1!D:D,Sheet1!A:A,A2,Sheet1!C:C,C2))

 下コピー

 参考まで
(笑) 2018/08/10(金) 14:23

(笑)様
Sheet2に品番は入力していないという話だったはずですけど
 入力してあるんですか? ですけど、あらかじめの入力はしていなくて 品番を入力するとその月のその品番の合計が出るようにしたいです。

(BJ)様の式で例表にあてはめたらうまくできたのですが、本物のワークシートにあてこんだらできませんでした。何がいけないのでしょうか?
変化点はSeet名が6桁の数字であること。360302です。
金額を読み込むセルに=IF(F2=0,"",VLOOKUP(F2,V$2:AI$32,3,0))という関数が入っています。でも隣の列に数値のみコピーしてよんでも#N/Aになります。
どこがまちがっているのでしょうか?
(toto) 2018/08/10(金) 17:19


 =SUMPRODUCT((Sheet1!$A$3:$A$11=--SUBSTITUTE(A2,"月",""))*(Sheet1!$D$3:$D$11))
  ↓
 =SUMPRODUCT((360302!$A$3:$A$11=--SUBSTITUTE(A2,"月",""))*(360302!$D$3:$D$11<>""),360302!$D$3:$D$11)

 =SUMPRODUCT((Sheet1!$A$3:$A$11=--SUBSTITUTE(A2,"月",""))*(Sheet1!$C$3:$C$11=C2)*(Sheet1!$D$3:$D$11))
  ↓
 =SUMPRODUCT((360302!$A$3:$A$11=--SUBSTITUTE(A2,"月",""))*(360302!$C$3:$C$11=C2)*(360302!$D$3:$D$11<>""),360302!$D$3:$D$11)

 実際シート名が数字だと、こんな風に変えられちゃうけど。
 '360302'!$A$3:$A$11

(BJ) 2018/08/10(金) 21:11


 >金額を読み込むセルに=IF(F2=0,"",VLOOKUP(F2,V$2:AI$32,3,0))という関数が入っています。
 >でも隣の列に数値のみコピーしてよんでも#N/Aになります。 
 >どこがまちがっているのでしょうか?

 ↑ は当初の質問とどう関係するんですかね?

 よく分かりませんけど、最初に言った通り、ピボットテーブルでやった方がいいですよ。
 Sheet2には、品番も含めて何一つ入力する必要はありません。
 マウス操作だけでできます。

 それとも
 >予想として1カ月100品番くらいで設定したいと思います。

 入力する品番はこのうちのごく一部なんですか?

 数式でやるんだったら、SUMIFとSUMIFS を使いましょう。

 参考まで
(笑) 2018/08/10(金) 22:45

BJ様

すいません!最初の式でできていました。本シートのA列が文字列になっていたためエラーになっていました。

何度も教えていただきありがとうございました。
 
(笑)様アドバイスありがとうございます。
(toto) 2018/08/11(土) 16:38


 >すいません!最初の式でできていました。本シートのA列が文字列になっていたためエラーになっていました。 

 ???
 金額が
 =""
 こんな感じになるところがあるのでしょう。
 だったら、エラーになるよ。
 SUMPRODUCT は、=""に対応して無いから。
(BJ) 2018/08/11(土) 19:48

 >SUMPRODUCT は、=""に対応して無いから。

 数値に文字列を掛けたらエラーになるというだけの話です。
 
(よみびとしらず) 2018/08/12(日) 09:54

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.