• ベストアンサー

Excel 蓄積された売上データを別シートに書き出す方法を教えて下さい

Excel2002を使った、下記のようなファイルがあります。 A列    B列   C列     D列     E列 製品コード 製品名 売上数量  売上金額  売上年月日 12345    A    2      1000     20001213 過去5年間の全製品の売上データが上記のような形式で1つのシートに蓄積されています。(売上年月日の昇順でソートされています) このデータを、売上年月ごとに別シートに分けていきたいのですが、何かいい方法はありますでしょうか? 最初はオートフィルタで抽出して1つづつ別シートに移していこうかと思ったのですが、結構なデータ量でしたので、質問させて頂きました。 よろしくお願いします。<m(__)m>

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

  • ベストアンサー
  • freednia
  • ベストアンサー率25% (84/324)
回答No.6

一応置いておきます。 元データはシート1枚だけにしておいてください。 シート名はなんでもいいです。 データの並びもバラバラでも構いません。 作成するシートの最初の月と最後の月を変えて使ってください。 Sub Macro() Dim i Dim month As Variant Dim mon_str As String i = 2 month = DateSerial(2000, 12, 1) '←ここにこの形式で最初の月を入れる mon_str = Format(month, "yyyymm") Do Sheets(1).Select Sheets.Add Sheets(1).Cells(1, 1) = Sheets(2).Cells(1, 1) Sheets(1).Cells(1, 2) = Sheets(2).Cells(1, 2) Sheets(1).Cells(1, 3) = Sheets(2).Cells(1, 3) Sheets(1).Cells(1, 4) = Sheets(2).Cells(1, 4) Sheets(1).Cells(1, 5) = Sheets(2).Cells(1, 5) Sheets(1).Name = mon_str Sheets(1).Move After:=Sheets(i) i = i + 1 month = DateAdd("m", 1, month) mon_str = Format(month, "yyyymm") Loop Until mon_str = "200501" '←ここにこの形式で最後の月の次の月を入れる Sheets(1).Select Dim x, y x = 2 Do mon_str = CStr(Cells(x, 5)) month = DateSerial(Val(Left(mon_str, 4)), Val(Mid(mon_str, 5, 2)), Val(Right(mon_str, 2))) mon_str = Format(month, "yyyymm") y = 1 Do y = y + 1 Loop Until Sheets(mon_str).Cells(y, 1) = "" Sheets(mon_str).Cells(y, 1) = Sheets(1).Cells(x, 1) Sheets(mon_str).Cells(y, 2) = Sheets(1).Cells(x, 2) Sheets(mon_str).Cells(y, 3) = Sheets(1).Cells(x, 3) Sheets(mon_str).Cells(y, 4) = Sheets(1).Cells(x, 4) Sheets(mon_str).Cells(y, 5) = Sheets(1).Cells(x, 5) x = x + 1 Loop Until Cells(x, 1) = "" End Sub

Cherry_B
質問者

お礼

freedniaさま、 お忙しい中、ありがとうございました!難なく、ファイルが完成しました!ヾ(〃^∇^)ノ♪ これを手作業でやってたら、かなりの時間を費やしていた事と思います。 また、今後、別ファイルででも使わせて頂こうと思っています。本当にありがとうございました。<(_ _)> P.S.お礼が遅くなり、申し訳ございませんでした。会社からはログインできなかったもので...

その他の回答 (5)

  • freednia
  • ベストアンサー率25% (84/324)
回答No.5

たびたび申し訳ないです。 #3のコードでシートも自動追加してます。 ちゃんと読んでませんでした・・・お恥ずかしい・・・ それでは頑張ってくださいね!

  • freednia
  • ベストアンサー率25% (84/324)
回答No.4

すいません。 昨日時間がなくて途中までしか出来てません。 #3さんが書いてくれてるので大丈夫そうですね。 ただ60シートも手作業で追加して名前つけていくのは大変な手間だと思います。 私の書いたコードでは自動でシートも作成するので、参考にしてみてください。 って言っても今手元にコードがないので記載できないです・・・ 12時に会社に行くのでそれまで待っていたら記載します(笑

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

VBAしかないようですね。それで考えてみました。 (1)Sheet1のE列に日付があって、その昇順にソート済みとする。 (2)各月分を「200401」や「200401」・・・のように60シートばかり増やしていきます。余分なシートは別ブックにしておいてください。 (3)Set sh1 = Worksheets("sheet1")の()内は質問者の場合のシート名を入れてください。 (VBA) Sub test01() Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("sheet1") '----初期設定 y = Year(sh1.Cells(2, "E")) m = Format(Month(sh1.Cells(2, "E")), "00") km = y & m MsgBox km Set sh2 = Worksheets.Add sh2.Name = km j = 2 '---- For i = 2 To 60 '---- y = Year(sh1.Cells(i, "E")) m = Format(Month(sh1.Cells(i, "E")), "00") k = y & m MsgBox k '------ If k = km Then sh2.Cells(j, "E") = sh1.Cells(i, "E") sh2.Cells(j, "A") = sh1.Cells(i, "A") sh2.Cells(j, "B") = sh1.Cells(i, "B") sh2.Cells(j, "C") = sh1.Cells(i, "C") sh2.Cells(j, "D") = sh1.Cells(i, "D") j = j + 1 Else Set sh2 = Nothing Set sh2 = Worksheets.Add sh2.Name = k j = 2 sh2.Cells(j, "E") = sh1.Cells(i, "E") sh2.Cells(j, "A") = sh1.Cells(i, "A") sh2.Cells(j, "B") = sh1.Cells(i, "B") sh2.Cells(j, "C") = sh1.Cells(i, "C") sh2.Cells(j, "D") = sh1.Cells(i, "D") j = j + 1 km = k End If Next i End Sub 少数データでテスト済み。しかし1年ぐらい出でまず中断して内容をチェックしてください。 最終(本番で)はMsgBox kを削除してください。 テストで出来たシートはSHIFTキーを押しながら、シートタブをクリックしていって、削除すれば一遍に消せます。

Cherry_B
質問者

お礼

imogasi様、 ありがとうございます!(感涙!) 今は手元に本番データがないので、明日試してみます。 結果は、またご報告させて頂きます。 本当にありがとうございました。<(_ _)>

  • freednia
  • ベストアンサー率25% (84/324)
回答No.2

#1さんの言うとおりDBのほうがいいかもしれないですね。 そうも言ってられないので、とりあえずはExcelでの対処しないとならんのですよね? 12×5=60ヶ月もあるとフィルタではかなり面倒ですね。 マクロを使うほうが楽かもしれないですが、慣れていなければ地道な作業のほうが早いかも? マクロを使えるならコードの案を出させて頂きます。

Cherry_B
質問者

お礼

freednia様、 早速のご回答、ありがとうございます。 そうなんです、そうも言っていられず、とりあえずExcelで何とかしなければならいんです...(T_T) マクロコードの案、教えて頂けるのなら、是非×2お願いしたいです! お手数おかけしますが、よろしくお願い致します。m(__)m

回答No.1

Excelのフィルター機能で「フィルターオプションの設定」で抽出して別シートにCOPYしていく手はありますが、データ量も多くなったことですので、そろそろEXCELは卒業して、ACCESS等のRDBへシステムを移行してはどうでしょうか?

Cherry_B
質問者

お礼

mrayu_2001様、 早速のご回答、ありがとうございます。 やはりそうですよね...Excelでは無理がありますよね...。 でも今回は、Accessを使えない人にも見てもらうために、Excelで処理しなければならないのです...(_ _。)・・・シュン でもこれだけデータが多くなると、はやり移行を考えるべきですね。ご意見、ありがとうございました。m(__)m

関連するQ&A

  • シート1とシート2のデータ一致 抽出方法

    エクセルのデータ抽出でお知恵をお貸し下さい。 シート1 A列  B列     C列 品名  製品番号  数量 AA    1AAAA    200 BB    1BBBB    250 CC    1CCCC    300 シート2 A列   B列     C列 品名  製品番号   数量 AA    1AAAA   200 BB    1BBBB   250 AB    AAAA    500 CC    1CCCC   300 上記のようなシートがあります。 内容は同じなのですが、シート2にはシート1にはない品名、製品番号、数量が含まれます。 シート1の品名、製品番号、数量がすべて一致するものをシート3へ抽出し、 一致しなかったデータ(シート1にはなく、シート2にあるものを含め)をシート4へ抽出したいのですが 何か良い方法はないでしょうか??

  • 不要なデータを切り取って別のシートに貼りつける

    シート1に色々なデータが並べています。A列~J列、5000行くらいです。 J列に「0」「1」「#N/A」の三つの値がバラバラに並べています。 フィルタで昇順にし、「0」「1」「#N/A」と奇麗に並べます。 「0」と「#N/A」の行を切り取ってシート2へ貼り付けます。 そして次にG列に「ダウンロード」以外の文字があった場合も同様に切り取ってシート2に貼り付ける といった作業をしています。作業が大変なので、マクロで実行したいのですが、コードの記述が分からないのです。教えて下さい。 宜しくお願いします。

  • エクセルで抽出したデータを別シートにコピーしたいです

    エクセル2003を使用しています。 例えば、以下のような表があります。  ABC 1あ10 2い15 3あ20 4 A列が条件となり、たとえば「あ」のデータだけ抽出して、そのデータを別シートにコピーします。 同じく「い」だけを抽出して、また別のシートにコピーします。 いままでは、オートフィルタで抽出して自分でコピーをして貼り付けしていましたが、日々データが次の行に追加になるので、毎回オートフィルタしてコピーするのは大変です。 関数か、マクロかVBAを使ってする方法はありますでしょうか。 できれば日々追加になるデータのみをすでにある別シートの前日までのデータの下に追加できるようになればいいと思うのですが。 知識が乏しくできません・・・ よろしくお願いいたします。

  • テーブルにある代理店別に売り上げデータを分ける方法

    アクセス2003 超初心者です。 大量の売り上げデータを別テーブルにある代理店別に 分けて、それぞれ個別ファイルにする、という作業を行っています。 元々はエクセルで代理店列にフィルタをかけ、 一社ずつ別ファイルに保存という作業を延々とやっていたのですが とうとうデータが一枚のエクセルシートに収まらなくなりました。 そこで、売り上げデータをアクセスに取り込み、別テーブルに 代理店一覧を作りデータを抽出するということを行いたいのですが、 どのように行えばいいのでしょうか? 手元にアクセスの入門書がありますが、どの項目を見ればよいのか すらわかりません。お恥ずかしいですが、何卒よろしくお願いします。

  • エクセルで複数のシートにまたがるデータを一枚にまとめる方法

    よろしくお願いします。 エクセルのシートが3シートあり、 シート1、シート2には従業員の名前、出勤日、売上高が一覧になっています。シート1、2の違いは月別となっています。 簡単に表にすると a,b,cという従業員がいた場合、 A列 B列 C列 a 4/1 3000 b 4/1 2000 a 4/2 4000 c 4/2 5000 b 4/3 2000 といったイメージなのですが・・・ それを今はそれぞれ月ごとに 人別にオートフィルターで検索し シート3に貼り付け人別の売上表にまとめています。 この場合だとシート1が4月シート2が5月の売上表だった場合、 シート3にaさんの4月5月の売上を一覧表にしています。 例では3人ですが、実際は人数が20人ほどいて、月別のシートも今後増えていきます。 シート3に検索条件aと入力したら シート2、3からVLOOKで値が抽出できるかとも試してみたのですが、 VLOOKは一番最上段のデータのみを抽出してしまうので断念しました。 今後の作業の効率化を考えると少しでも省略化したことを行いたいのですが・・・ なにかよいアドバイスがありましたらいただけると幸いです。

  • エクセルVBA データを別シートに書き込む

    エクセルの、あるシートのデータを、別シートの項目条件の一致するセルに 書き出す方法を教えていただけますでしょうか?  元のシートには  A列     B列    C列 ID番号 年月日番号  金額 ID番号 年月日番号  金額 ID番号 年月日番号  金額  ・      ・       ・  ・      ・       ・ という形で、データが入っています。各列でデータには重複はありますが、   A列とB列の内容が共に同じという行は、ありません。 これを列項目がID番号、行項目が年月日番号の、金額を参照する表にしたいのです。 新しいシートのA列に降順に全ID番号を、1行目に同じく全ての年月日番号をいれ、 元のシートのC列データ(金額)を新しいシートの該当セルに書き込むには どのようにすればいいでしょうか?このような感じで‥。    月日1 月日2 月日3‥‥ ID1 金額  金額  金額 ID2 金額  金額  金額 ID3 金額  金額  金額  ・  ・  ・ 実は元のシートは10枚ほどあり(期間で区切っています)、おまけに各シートには 登場しないID番号もあります。 そこで、すべてのID番号と年月日番号をまとめ、ひとつのシートにしたいと考えた次第です。 1枚のシートならばピボットテーブルで何とかなるのですが、それをまとめようとすると、 データの量が膨大で、PCがとまってしまう(のか計算が終わらない気が‥) VBAを使えば何とかなるのかもと思いまして、質問いたしました。 エクセルは2007です。 どうぞよろしくお願いいたします。

  • Excelでシート間のデータの抽出方法

    1つのブックに集計用のシートと、A店、B店、C店という各店舗別の売上シートがあります。 Sheet集計用のA1にA店のコード(A店は001、B店は002というようなコード)を入れると、Sheet集計用のB列の上期売上、C列の下期売上にSheetA店のB列の上期売上、C列の下期売上のデータが入るようにすることは可能でしょうか? Sheet集計用のA1のコード変更することによってデータを引っ張ってくるシートが変わる様にしたいということなんですが、Excelでどのようにすればいいかわかりません。 各店舗のシートのA1のセルにも、その店舗のコードが入力されています。

  • Excelでの別シート集計について

    Excelで月別、項目別で時間を集計するシートを作成しようとしています。 シート2ではシート1 F列コード別に集計してD列の時間データを月別に合計 シート3ではシート1 F列コードとG列コード別(Fが1001でGが1001、、、)に集計してD列時間データを合計、という表データにして抽出したいと考えています。 シート1には K欄に年月を表示  =IF(OR(A7="",B7="",C7=""),DATE(2100,12,31),DATE(A7+2000,B7,C7)) L列にF列コード+年月  =F7&(2000+A7)&B7 M列にG列コード+年月  =G7&(2000+A7)&B7 というところまでは設定したのですが、出力先となるシート2、シート3にはどのような設定をすればよいのか行き詰っています。 なにとぞ易しい回答をよろしくお願い申し上げます。

  • 【エクセル】表から条件に合ったデータを別シートに順番に抽出したい

    エクセルの表である条件にあてはまる行を 別シートに順番に抽出されるような関数を教えてください。 シート1のB列にあるデータが"渋谷区"のとき シート2のE74からE80くらいまでに シート1のC列のデータを上から順に抽出されるようにしたいです。 【シート1】 A        B         C 1 東京都 渋谷区  PC 2東京都  港区  PC 3東京都 新宿区  マウス 4東京都 渋谷区  ペン 5東京都 渋谷区  モニタ ・ ・ ・ 10 【シート2】 E 74 PC 75 ペン 76 モニタ ・ ・ ・ 80  【補足】 元の表(シート1)を編集することがあるので 自動的に反映されるよう、関数で作成できたらと思います。 シート2の構成上、抽出後のソートや、フィルタオプションは避けたいです。 わかりづらい文章で申し訳ございませんが どなたかいいアドバイスがありましたら教えてください。 お礼は明日になってしまいますが、必ずご返答いたします。 よろしくお願いいたします。  

  • 【エクセル】表から条件にあったデータを別のシートに抽出する関数

    エクセルの表である条件にあてはまる行(複数の列を指定したい)を、 別シートに順番に抽出されるような関数を教えてください。 元の表を編集するので、自動的に反映されるように関数で作成したいと思っています。できれば、抽出後のソートやフィルタオプションは避けたいです。 シート1のコード(A列)が100番台のもの、200番台のもの、300番台のものの、それぞれ食品名(B列)と総量(D列)を、シート2~シート4に別表として抽出したいです。 食材の注文をするのに、業者別にしなければいけませんが、量が多くて毎回大変なんです。お助けください。 【シート1】 元データ    A     B        C       D 1 コード  食品名    一人分分量   総量 2 101    牛肉      30      150 3 201    じゃが芋    80      400 4 202    玉葱      40      200 5 203    人参      20      100 6 301    しょうゆ    6       30 7 302    砂糖      4       20 【シート2】 コード100番台   A     B   1 牛肉   150 【シート3】 コード200番台   A     B       1 じゃが芋 400 2 玉葱   200 3 人参   100 【シート4】 コード300番台   A     B  1 しょうゆ 30 2 砂糖   20 無謀な事をやろうとしているのかもしれませんが、どなたかアドバイスをください。 よろしくお願い致します。

専門家に質問してみよう