• 締切済み

Excel 集計済みのデータをローデータ化したい

既出でしたら、申し訳ございません。 簡単なようで、アイデアがなく質問させていただきます。 図の左側のように、既に「日ごと」「品物別」に 集計が された状態の表があったとします。 (ピボットではなく、手作業で集計されたものとします) 図の右側のように、集計する前のローデータ に変換をしたいのですが、 何かいい方法はないでしょうか? 目的は、ローデータをもとに、ピボットで集計しなおしたり、 タブローなどの集計ツールに、生データを格納しておくなどです。 Excel マスターの皆様、どうかお助けください。 よろしくお願いいたします。

みんなの回答

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

#1です。 VBAでの回答もやってみるらしいから、 ーーー VBAの回答は出ていますが、別個人で書き方が違うと、下記のようになります。コードの印象がちがいますよね。 Sub test02() Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") lr = sh1.Range("A100000").End(xlUp).Row: MsgBox lr lc = sh1.Range("XFD1").End(xlToLeft).Column: MsgBox lc k = 2 '--- For i = 2 To lr For j = 2 To lc If sh1.Cells(i, j) <> "" Then sh2.Cells(k, "A") = sh1.Cells(i, 1) sh2.Cells(k, "B") = sh1.Cells(1, j) sh2.Cells(k, "c") = 1 k = k + 1 If sh1.Cells(i, j) > 1 Then For l = 2 To sh1.Cells(i, j) sh2.Cells(k, "A") = sh1.Cells(i, 1) sh2.Cells(k, "B") = sh1.Cells(1, j) sh2.Cells(k, "c") = 1 k = k + 1 Next l End If End If Next j Next i End Sub 例データ Sheet1 ー リンゴ メロン いちご 2017/4/1 1 1 2017/4/2 3 1 1 2017/4/3 1 2017/4/4 1 1 1 2017/4/5 1 1 結果 Sheet2 2017/4/1 リンゴ 1 2017/4/1 メロン 1 2017/4/2 リンゴ 1 2017/4/2 リンゴ 1 2017/4/2 リンゴ 1 2017/4/2 メロン 1 2017/4/2 いちご 1 2017/4/3 メロン 1 2017/4/4 リンゴ 1 2017/4/4 メロン 1 2017/4/4 いちご 1 2017/4/5 メロン 1 2017/4/5 いちご 1 件数1が要らない場合は sh2.Cells(k, "c") = 1 の行(コード)を省いてください。

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.3

貼付画像のような結果(K1:L28)で良ければ作業用テーブル(F1:I81)を使って関数のみでできます。 但し、Excel 2007以降のバージョンによるものです。 F1=IF(ISTEXT(H1),ROW(),"") F1をF2:F81へコピーする。 H1="日付" I1="売れたもの" H2=IF(INT((ROW()-MAX($F$1:$F1)-1)/3)<COUNT(A:A),OFFSET($A$1,INT((ROW()-MAX($F$1:$F1)-1)/3)+1,0),"") I2=IF(IFERROR(VLOOKUP(H2,A:D,MOD((ROW()-MAX($F$1:$F1)-1),3)+2,FALSE)>0,),OFFSET($A$1,0,MOD((ROW()-MAX($F$1:$F1)-1),3)+1),"") H2:I2を下へ81行目までコピーする。 K2=INDEX(H:H,MOD(SMALL(IFERROR((I$2:I$101<>"")*H$2:H$101+(I$2:I$101="")*"3000/1/1","3000/1/1"*1)*1000+ROW(I$2:I$101),ROW()-1),1000)) この数式はCtrl+Shft+Enterキーで確定する。 L2=INDEX(I:I,MOD(SMALL(IFERROR((I$2:I$101<>"")*H$2:H$101+(I$2:I$101="")*"3000/1/1","3000/1/1"*1)*1000+ROW(I$2:I$101),ROW()-1),1000)) この数式もK2と同様のCtrl+Shft+Enterキーで確定する。 K2:L2を下へ28行目までコピーする。 当方はExcel 2013で検証しました。

回答No.2

一先ず、用語の整理。  ローデータ = 加工されていない生データ ですから、「ローデータに変換」って変な日本語ですね。 さて、本題。 ワークシート関数でも何とかなるのかもしれませんが、 件数が多くなればなるほど式も複雑になりますし、 なんせエクセルの動きが渋くなる可能性も高いです。 私は関数は不得手なので提示できませんが(笑)。 なので私もVBAを推しますね。 例示のデータ件数くらいなら10数行で書ききれると思いますし。 例えば、ごく単純な考え方で、極力(無駄があっても)簡単な処理で Sub Sample1() Dim TagRow As Long, LastRow As Long, LastCol As Long Dim Target As Range   Range("F:G").Delete   LastRow = Cells(Rows.Count, 1).End(xlUp).Row   LastCol = Cells(1, Columns.Count).End(xlToLeft).Column   Range("F1:G1") = Array("日付", "売れたもの")   TagRow = 2   For Each Target In Range(Cells(2, 2), Cells(LastRow, LastCol))     If Target.Value > 0 Then       i = 0       Do         Cells(TagRow, 6) = Cells(Target.Row, 1)         Cells(TagRow, 7) = Cells(1, Target.Column)         TagRow = TagRow + 1: i = i + 1       Loop Until i = Target     End If   Next   Columns(6).NumberFormatLocal = "yyyy/m/d" End Sub A~D列に集計表があると仮定し、F~G列にテーブルを返します。 行・列、表の位置、その他の条件についてのご提示が無いので、 この中では全く考慮していません。 よって、「どこをどういじれば実状に合うか」等の 追加質問には基本的には応じませんので悪しからず。 とりあえず・・・「逆だよなー」と、いつも思います(笑)。 右が素材で左が集計結果ですね。 データベースの考え方としては素材を集計して結果を出すのであり、 得られるべき結果から素材を引き出す・・ つまり、与えられた「生データ(現状ではこれがローデータですね)」から データテーブルを再構築して、今後の「ローデータ」として使いたい、 という作業ですので、通常とは真逆の作業なわけです。 なので、VBAで強引に・・という事ですね。 ただし、他人が書いたマクロを鵜呑みにするのは危険です。 世の中には(私のように)悪意あるマクロを提示する人間も 若干名ではありますが存在しますので、お気を付けくださいませ。

ovf03b
質問者

お礼

ご丁寧にありがとうございます。 VBA が分かるスタッフがいたので、参考にしてトライしてみます!

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

VBAでやれば、ロジックは、簡単。VBAはできる? VBAを勉強したら。 ーー できないなら、数が少なければ、手作業でやればよい。 ただし同一日・同一品目が1セルに複数件数のままでよいなら、手作業でやれる。その先は手作業ではむつかしかろう。 でも関数マニアの回答者が回答するかもしれないから、気長に回答を待っていたら。 ーー エクセルでは、関数では、表の組換えは、苦手な分野だと思う。特に行やセルを増やすほうに持って行くのは極く難しい(式が長く複雑)ように思う。

ovf03b
質問者

お礼

ありがとうございます! VBA はできないんです。。。 もう少し待ってみます!

関連するQ&A

  • エクセルでの集計表

    エクセルでの集計表 添付した画像で説明します。 左側のアンケート表の結果を右側の2つの集計表に転記したいのです。 表の説明は以下のとおりです。 メーカーはトヨタ・日産・マツダ・ホンダの4社。 車種は普通車、バイク、トラックの3種。 新車か中古車です。 ピボットテーブルではなく関数でお願いします。 よろしくお願いします

  • EXCELで以下のような集計を簡単に行いたいのですが、簡易な方法ってあ

    EXCELで以下のような集計を簡単に行いたいのですが、簡易な方法ってありますでしょうか? これに関してはマクロでは実現させるつもりはなく、あくまでEXCELの基本機能(と関数レベル)で行いたいのです。 マクロは作れますし今回の例が実現できる(擬似)マクロは既にあります。しかし、今回の話ではマクロは使わない!で、且つEXCEL初心者が操作手順A4紙1枚程度を見て操作できるものが良いです。 実は表を選択して「データ」の「集計」で簡単に出来るだろうと思っていたのですが…出来ませんでした。 データは図の左側のように担当者の名称がそれぞれ何個か書かれているだけです。このようにたった1列だけというデータになります。 これを図の右側のように担当者毎の回数と割合を表にします。(これに似た適当なフォーマットでOKです) 表ができればあとは業務が流れていくので助かります。 XPのEXCEL2003レベルでお願いします。ヒントでもモチロン構いません。お願いします。

  • 縦持ちデータからのパワーピボットについて

    添付画像(左側)の様に、縦持ちデータをデータモデルに入れ、パワーピボットのテーブルで集計をしたいと考えています。 元データ(売上、費用)だけでなく、そこから計算した値(利益、利益率)もテーブルに入れたいです。 パワーピボットのため、フィールドに直接計算列を入れることができないため、計算した値はメジャーで作成しています。 左から、売上、費用、利益、利益率の順で列を並べたいですが、上記手順で行うと添付画像左の通り、列が重複してしまいます。 元データの項目を1つ1つメジャーで作って入れて、Σ値から「合計」を除けばできますが、元の項目は「合計」をそのまま使用したいです。 理由は、実際に使用している元データは項目が大量にあり、1つ1つメジャーを作ることは避けたいためです。 縦持ちデータから項目をまとめてパワーピボットで集計(+必要な列だけ追加)し、かつ、画像右側の横持ちデータから作成した結果と同様に必要な列だけ表示・並び変える方法を教えていただけますでしょうか。 よろしくお願いいたします。

  • excel日単位の表から月単位の表を表示させたい

    excelで、日単位の表を利用して、月単位の表を表示させたい まず、添付の写真を参照願います。 左側の表の縦軸で日単位の表があります。このデータが今現在も、毎日継続してデータが下に加わっています。 一方、右側の表では、左側の表の一か月分合計の集計値を表示させようとしています。 ピボットテーブルを利用すれば、右側の表を作成することは、分かるのですが、できればそれ以外で、何か良い方法があればアドバイスをいただきたいと思います。 ご教授お願いいたします。 尚、当方excelは2000を利用しています

  • カーソルを合わせるとメニューが左に表示されてしまう

    たとえばインターネットエクスプローラの「表示」→「ツールバー」と選択すると、左側にメニューバーとかツールバーの中身が表示されます。 他のツールを使っていても、メニューが右だけではなく、左に出てきます。 もとはすべて右側に出てきたと思います。 これを直す方法はありますか?

  • HPに、ランダムに文字が出るものをつけたい

    HPを作っています。 テーブルを組んで、 左側にウサギの神主さんのイラスト、 右側に文字で 大吉だね!等の文字が 更新するたびランダムに出るようにしたいのです。 ______________________ /実行ボタン(画 像)/ 今日は大吉だね!(文 字)/ /________/____________/ ↑図がわかりにくくて申し訳ないのですが、  このようなことは可能でしょうか? ”HP、ボタン、ランダム”のキーワードで検索したのですが 探している質問がみつからなかったもので。。 既出でしたらごめんなさい。 よろしくお願いいたします。

  • PowerPointにExcelファイルのデータをリンクさせるには?

    Excel2002を使用してアンケートのデータを集計しています。そのデータを利用して、プレゼンテーション(PowerPoint2002使用)を作成したいのです。昨年作成したプレゼンテーションがあり、それを変更したいのですが、データを差し替えると、もとデータの配置がバラバラになってしまいます。 配置は以下のようにしたいのです。 グラフ(Excelで作成したものをリンク)  表(Excelで作成したものをリンク) グラフ(Excelで作成したものをリンク)  表(Excelで作成したものをリンク) グラフ(Excelで作成したものをリンク)  表(Excelで作成したものをリンク) ※グラフ部分は、昨年はオートシェイプで円グラフを描いていました。 ※表部分は、昨年はPowerPointの表で作成していました。 このように、左側にグラフを3つ、右側に表を3つ、Excelファイルが更新されるとPowerPointのファイルも更新されるように、リンクさせたいのです。スライドのレイアウトの作業ウィンドウの中には、4つのコンテンツというレイアウトがありますが、これを6つのコンテンツに変更することはできるのでしょうか?コンテンツのプレースホルダを追加することはできますか? コンテンツの枠内に、リンク貼り付けすると配置が乱れません。 PowerPoint初心者のため、とても苦戦しています。どなたか良い方法がございましたら、ご指導お願いいたします。

  • 【InDesign】マスターページのテキスト入力

    【InDesign】マスターページのテキスト入力 初めまして。 この度初めてInDesignを使っていますので、質問自体がトンチンカンかも知れないのですが、 入稿期限が迫っており、非常に困っています……>< どうぞ宜しくお願い致します。 複数ページの冊子制作の為、飾り枠の中で文章を書いてゆける仕様のマスターページを作りました。 (右側ページ用・見開きページ用・左側ページ用でそれぞれに作ってみました) ページ挿入で増やし、いざテキストの流し込みをしようとしたのですが、 その中のテキストフレームに、実際文字を入力することができません……。 グリッドツールを使用すれば文字入力は可能でしたが、 通常ドキュメント?のように、文字や行数が増えた時に自動で次のページなどへずらしてはくれないようなので、 これではイラレ等で1ページずつ作るのと、全く作業効率が同じになってしまいます>< 一体どうすれば良いのでしょうか? どうぞご指南の程、宜しくお願い致します! 追伸; ヘルプや本・ネット等で自分でも調べてはみたのですが、どうしても分かりませんでした(;ω;) 既出だったら申し訳ありません(。・ˇдˇ・。) どうぞ宜しくお願い致します……。

  • EXCELでのデータ集計について

    EXCEL2007、XPを使用しています。 下記の様なデータが並んでいる時に、 項目ごとの集計を行いたいです。 A / B / C / D 倉庫 / メーカー / 品番 / 数量 東京 / テスト / test1 / 5 東京 / テスト / test2 / 3 東京 / テスト / test2 / 4 東京 / テスト / test3 / 1 東京 / テスト / test2 / 2 東京 / テスト / test4 / 4          ↓ 集計後、品番が同じものが並ばないように。 A / B / C メーカー / 品番 / 数量 テスト / test1 / 5 テスト / test2 / 9 テスト / test3 / 1 テスト / test4 / 4 SUMIFで数量を集計したのですが、 同じ品番と数量の行が並んでしまうのが都合悪いです。 良い手はありますでしょうか。 シートが別になっても構いませんが、 マクロの使用は極力避けたいです。 ご教授お願い致します。

  • エクセルのデータ集計

    エクセルについて教えて下さい。 ひとつのセルにカンマ区切りで複数のデータが入っている場合、 それぞれの項目を抽出してカウントする時はどのようにすればいいでしょうか? 例) セルA1に、1.abcd,3.ijk セルA2に、1.abcd,2.efgh,4.lmn セルA3に、4.lmn セルA4に、1.abcd,2.efgh と入っているとした場合、 B1にセルA1~A4に入っている1.abcdの合計値(上記の場合であれば3)、 B2にセルA1~A4に入っている2.efghの合計値(上記の場合であれば2)、 B3にセルA1~A4に入っている3.ijkの合計値(上記の場合であれば1)、 B4セルにA1~A4に入っている4.lmnの合計値を入れたいのですが(上記の場合であれば2)、 どのような方法がありますでしょうか? ご損の方がいらっしゃいましたら教えて下さい。 よろしくお願い致します。

専門家に質問してみよう