• 締切済み

Excelで別シートの重複しているデータの

Excelで重複しているデータの納品数の合計を出したいのですが、COUNTIF等を使ったのですが うまくいきませんでした… ご存知の方教えてください シート1 JANコード  納品数 30972       3 90825      10 497582123    1 シート2 JANコード  納品数 482753      1 30972       10 4564135      1 という表の納品数の合計を出したいです。 シート3 JANコード  納品数合計 30972       13 上記のように別シートに表示は可能でしょうか? わかりづらく申し訳ないです。

みんなの回答

  • msMike
  • ベストアンサー率20% (371/1817)
回答No.5

別解です⇒添付図参照 Sheet1!C2: =IFERROR(VLOOKUP(A2,Sheet2!A:B,2,FALSE),0) Sheet1!DC2: =SUM(B2:C2)

すると、全ての回答が全文表示されます。
  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.4

他の方が答えておられる関数で問題なければ、いいのですが、マクロを組みました。 このマクロは、質問以上のことをしてしまっています。 質問以上、というのは、重複したものだけでなく、「シート3」にすべての一覧を作成しています。 従って、重複したものだけ必要な場合は、この回答は無視してください。 Option Explicit Sub Test() Dim s1, s2, s3 As Worksheet Dim i, j, r, t As Long Dim c As Integer Set s1 = Worksheets(1) Set s2 = Worksheets(2) Set s3 = Worksheets(3) r = 1 For i = 2 To s1.Range("A1").End(xlDown).Row t = s1.Cells(i, 2).Value For j = 2 To s2.Range("A1").End(xlDown).Row If s1.Cells(i, 1).Value = s2.Cells(j, 1).Value Then t = t + s2.Cells(j, 2).Value End If Next j r = r + 1 s3.Cells(r, 1).Value = s1.Cells(i, 1).Value s3.Cells(r, 2).Value = t Next i For i = 2 To s2.Range("A1").End(xlDown).Row c = 0 For j = 2 To s1.Range("A1").End(xlDown).Row If s2.Cells(i, 1).Value = s1.Cells(j, 1).Value Then c = 1 End If Next j If c = 0 Then r = r + 1 s3.Cells(r, 1).Value = s2.Cells(i, 1).Value s3.Cells(r, 2).Value = s2.Cells(i, 2).Value End If Next i End Sub まず、マクロを実行するまでを念のため。 目的のエクセルファイルを開いて、「Alt+F11」(Alt(「オルト」と読みます)キーを押しながら、「F11」キーを押す)。 すると、Visual Basicの画面が出てきますので、メニューの「挿入」から「標準モジュール」をクリック。 右側の広い部分が白くなったと思いますので、そこに以下のマクロをコピー&ペーストして、あとは、「F5」で実行するだけです。 前提条件としては、すべてのシートで1行目は項目行で、実際のデータは2行目から。 それから、2行目以降に、空白セルがないこと。 最後に、シートは、すでに3つ存在していることです。 Option Explicit Sub Test() Dim s1, s2, s3 As Worksheet Dim i, j, r, t As Long Dim c As Integer Set s1 = Worksheets(1) Set s2 = Worksheets(2) Set s3 = Worksheets(3) r = 1 For i = 2 To s1.Range("A1").End(xlDown).Row t = s1.Cells(i, 2).Value For j = 2 To s2.Range("A1").End(xlDown).Row If s1.Cells(i, 1).Value = s2.Cells(j, 1).Value Then t = t + s2.Cells(j, 2).Value End If Next j r = r + 1 s3.Cells(r, 1).Value = s1.Cells(i, 1).Value s3.Cells(r, 2).Value = t Next i For i = 2 To s2.Range("A1").End(xlDown).Row c = 0 For j = 2 To s1.Range("A1").End(xlDown).Row If s2.Cells(i, 1).Value = s1.Cells(j, 1).Value Then c = 1 End If Next j If c = 0 Then r = r + 1 s3.Cells(r, 1).Value = s2.Cells(i, 1).Value s3.Cells(r, 2).Value = s2.Cells(i, 2).Value End If Next i End Sub 簡単なマクロの説明です。 Set s1 = Worksheets(1) Set s2 = Worksheets(2) Set s3 = Worksheets(3) それぞれのシートを「s1, s2, s3」に設定しています。 r = 1 3番目のシートの行数をカウントするための「r」。 For i = 2 To s1.Range("A1").End(xlDown).Row 左端のシートの最終行まで繰り返し。 t = s1.Cells(i, 2).Value 「t」は、合計を出すため。 For j = 2 To s2.Range("A1").End(xlDown).Row 左から2番目のシートの最後まで繰り返し。 If s1.Cells(i, 1).Value = s2.Cells(j, 1).Value Then もし、左端のシートと2番目のシートのセルの値(JAN)が一致した場合は、 t = t + s2.Cells(j, 2).Value 合計に追加。 End If Next j r = r + 1 s3.Cells(r, 1).Value = s1.Cells(i, 1).Value s3.Cells(r, 2).Value = t 左端から3番目のシートにそれぞれ記入。 Next i 次に、上記では、シート1の「JAN」と一致するものを「シート2」から探しています。 そして、見つかっても、見つからなくても、その値をシート3に記入しています。 そこで、今度は、シート2からシート1側を探して、一致した場合は、記入しない、として、一致しなかった分、すなわち、上記での記載漏れを記入しています。 For i = 2 To s2.Range("A1").End(xlDown).Row 今度は、シート2から調べています。 c = 0 For j = 2 To s1.Range("A1").End(xlDown).Row If s2.Cells(i, 1).Value = s1.Cells(j, 1).Value Then c = 1 一致した場合は、「c = 1」に設定。 End If Next j If c = 0 Then 一致したものがなかった場合、 r = r + 1 s3.Cells(r, 1).Value = s2.Cells(i, 1).Value s3.Cells(r, 2).Value = s2.Cells(i, 2).Value End If Next i 以上です。 余計なことをして申し訳ございません。

すると、全ての回答が全文表示されます。
  • mt2015
  • ベストアンサー率49% (258/524)
回答No.3

作業列を使った例です。 Sheet1の先頭に1列作業列を追加し、A2セルに↓の式を入れ、下方向にコピー =IF(COUNTIF(Sheet2!A:A,B2)=0,"",MAX(A$1:A1)+1) Sheet3のA2に↓の式を入れ、下方向にコピー =IFERROR(VLOOKUP(ROW()-1,Sheet1!A:B,2,FALSE),"") Sheet3のB2に↓の式を入れ、下方向にコピー =IF(A2="","",SUMIF(Sheet1!B:B,A2,Sheet1!C:C)+SUMIF(Sheet2!A:A,A2,Sheet2!B:B)) Sheet1の作業列が目障りなら非表示にしてください。

すると、全ての回答が全文表示されます。
  • aokii
  • ベストアンサー率23% (5210/22063)
回答No.2

別シートに表示するのは簡単では無いので、 シート1のC2セルに以下の式を入れて、下にドラッグコピーし、C列にフィルターを使って、空白セルを表示しないようにしてはいかがでしょう。 =IF(ISNA(VLOOKUP(A2,Sheet2!A:B,2,FALSE)),"",B2+VLOOKUP(A2,Sheet2!A:B,2,FALSE))

すると、全ての回答が全文表示されます。
回答No.1

SUMIF関数を使うと楽かもしれません。 各シート、JANコードがA列、納品数がB列にあるものとして、 シート3の納品数合計のセル(B2想定)に   =SUMIF(シート1!A:A,シート3!A2,シート1!B:B)+SUMIF(シート2!A:A,シート3!A2,シート2!B:B) 関数の詳細は別途お調べくださいませ。

すると、全ての回答が全文表示されます。

関連するQ&A