• ベストアンサー

エクセル一覧から抽出するには

よろしくおねがいします 添付ファイルあります 会社の売上データが、部署・営業員・得意先CD・売上日・・・・と売上一覧になり一つのファイルとしてあります。 その中から決まった得意先CDだけの売上を抽出したいのですが。 売上一覧は30000行 得意先CDは500件あります いつも決まって抽出したい得意先CDは約200件 得意先CDは5桁でバラバラです 別エクセルに、抽出したい得意先CD一覧を作っておくことは可能です。 アドバイスよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

>合計ではなく、得意先CDが一致する顧客の行全部を別シートに取り出す。  そして、取り出した顧客売上データをピポットを使ってグラフなどにして行きます。 なるほど。抽出したい得意先が 1 件や 2 件なら簡単だけど、200 件もあるから毎回同じなのにたいへん、ということですね。 では 30,000 行ある一覧に 1 列を追加し(Sheet1)、各レコードの、得意先の一覧(Sheet2)での有無を表示してはいかがでしょうか。そうすれば、ピボットテーブルなりオートフィルタなりで、簡単に得意先のみを抽出できますね。抽出したらその表をコピーし、別シートに貼り付けて保存するなどしてもいいですね。 次式は、Sheet2 に載っている個数を計算します。 Sheet1 の F2 =countif(sheet2!A$1:A$200,c2) 得意先の一覧を用意する場所は、Sheet1 の中でも特に問題ありません。その場合は式中の「sheet2!」という部分を削除して、該当のセル範囲に書き換えます。

0166
質問者

お礼

MarcoRossiItalyさん 出来ました、本当に感謝します。 自分の悩みを伝えるのも難しですけど、その不完全に表現された悩みを理解しようとするのは更に高度ですね。 本当に感謝します。 ありがとうございました。

その他の回答 (5)

回答No.6

するって~と、3シートが絡むわけね!? わざわざ難しくする必要もないので、全部同じブックでイってみよう~!! 結果:ActiveSheet、はガチで動かせないとして、 デフォルトは、 マスタ:Sheet1 抽出キー:Sheet2 Option Explicit Sub RagPicker() 'Const xMaster = "HeyMaster" Const xMaster = "Sheet1" Const xSteal = "Sheet2" Dim xBook As Workbook Dim xSheet As Worksheet Dim zSheet As Worksheet Dim jj As Long Dim kk As Long Dim nn As Long Dim mm As Long Dim xLast As Long Dim zLast As Long Application.ScreenUpdating = False If (ActiveSheet.Name <> xMaster) And (ActiveSheet.Name <> xSteal) Then ActiveSheet.UsedRange.Clear Else MsgBox ("空のシートをActiveSheetにして実行してね!") Exit Sub End If If (InStr(xMaster, ".xls") > 0) Then Set zSheet = Workbooks(xMaster) Else Set zSheet = Sheets(xMaster) End If Set xSheet = Sheets(xSteal) xLast = xSheet.Cells(Rows.Count, "A").End(xlUp).Row zLast = zSheet.Cells(Rows.Count, "A").End(xlUp).Row Application.CutCopyMode = False zSheet.Rows(1).Copy ActiveSheet.Rows(1).PasteSpecial Paste:=xlPasteAll kk = 2 For jj = 2 To xLast For nn = 2 To zLast mm = nn With ActiveSheet If (xSheet.Cells(jj, "A").Value = zSheet.Cells(nn, "C").Value) Then For mm = nn + 1 To zLast If (zSheet.Cells(mm, "C").Value <> zSheet.Cells(nn, "C").Value) Then Exit For End If Next mm Application.CutCopyMode = False zSheet.Rows(nn & ":" & mm - 1).Copy ActiveSheet.Rows(kk & ":" & kk + (mm - nn) - 1).Resize(mm - nn).PasteSpecial Paste:=xlPasteValues ', Operation:=xlNone, SkipBlanks:=False, Transpose:=False kk = kk + (mm - nn) End If End With nn = mm If (nn > zLast) Then Exit For End If Next nn Next jj Application.CutCopyMode = True Application.ScreenUpdating = True End Sub

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

 今仮に、御質問欄の添付画像の一覧表がSheet1に存在していて、Sheet2のA列に抽出したい得意先CDを一覧にして入力すると、Sheet2のC列~G列に、抽出結果が表示される様にするものとします。  又、Sheet3のA列を作業列として使用するものとします。  まず、Sheet3のA2セルに次の数式を入力して下さい。 =IF(COUNTIF(Sheet2!$A:$A,INDEX(Sheet1!$C:$C,ROW())),ROW(),"")  次に、Sheet3のA2セルをコピーして、Sheet3のA3以下に貼り付けて下さい。  次に、Sheet1のA1~E1の範囲をコピーして、Sheet2のC1~G1の範囲に貼り付けて下さい。  次に、Sheet2のC2セルに次の数式を入力して下さい。 =IF(OR(ROWS($C$1:$C1)>COUNT(Sheet3!$A:$A),COUNTIF(Sheet1!$A$1:$E$1,C$1)=0),"",INDEX(Sheet1!$A:$E,SMALL(Sheet3!$A:$A,ROWS($C$1:$C1)),MATCH(C$1,Sheet1!$A$1:$E$1,0)))  次に、Sheet2のC2セルをコピーして、Sheet2のD2~G2の範囲に貼り付けて下さい。  次に、Sheet2のC2~G2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。  以上です。

0166
質問者

お礼

kagakusukiさんアドバイスありがとうございました

回答No.3

単に合計金額が分かればいいというだけでしたら、No.2さんみたいな感じの数式でよろしいかと思います。ベストアンサーは辞退します。 ただファイル容量がどれくらいか分かりませんが、データ数がそこそこ多いので、計算の負荷を抑えるために、No.2さんの数式中、「C:C」→「C2:C30000」、「E:E」→「E2:E30000」のように書いておくとベターかもしれません。

0166
質問者

補足

コメントありがとうございます 解りにくい表現ですみません。 合計ではなく、得意先CDが一致する顧客の行全部を別シートに取り出す。 そして、取り出した顧客売上データをピポットを使ってグラフなどにして行きます。 本当に解りにくくてすみません

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

シート1にお示しの表が有るとします。 シート2のA列には得意先CD一覧が入力されているとします。 シート2のB1セルには次の式を入力して下方にドラッグコピーします。 =IF(A1="","",SUMIF(Sheet1!C:C,A1,Sheet1!E:E) シート1で新たな入力が有った場合でも即座にデータに反映されます。

0166
質問者

お礼

KURUMITOさんアドバイスありがとうございました

0166
質問者

補足

コメントありがとうございます 解りにくい表現ですみません。 合計ではなく、得意先CDが一致する顧客の行全部を別シートに取り出す。 そして、取り出した顧客売上データをピポットを使ってグラフなどにして行きます。 本当に解りにくくてすみません

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

>決まった得意先CDだけの売上を抽出したい 「抽出したい」とは、単純に今あるリストからコピーして取り出したいなら。 データタブのフィルタの「詳細設定」で、まとめて抜き出して書き出させることが出来ます。 ただし、C1の「得意先CD」という記入内容と、完全に同一の内容を抽出したいCDリストの先頭セルに記入しておいてから実行します。 それとも。 該当のCDの売上を「集計したい」(=同じCDの売り上げを合算して、CDごとの売り上げ一覧に集計したい)という意味なら。 データタブの「統合」を使って、用意のCD一覧の横に集計を一発で算出させられます。 あるいは単純にSUMIF関数を、抜き出し一覧の横に並べて集計させてもOKです。

0166
質問者

お礼

keithinさんアドバイスありがとうございました

関連するQ&A