[[20210930063043]] 『ピボットテーブル』(初心者) ページの最後に飛ぶ

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

 

『ピボットテーブル』(初心者)

ピボットについて質問です。
製品ごとの売上表があります。
元ファイルがPDFファイルでむりやりコピペして貼り付けて編集しています

      4月  5月  6月
製品A
製品B

      7月  8月  9月
製品A
製品B

というファイルがあるのですが、

      4月  5月  6月  7月  8月  9月
製品A
製品B

という形で整形したいです。
毎月更新があるのと、製品数が多く手作業でやるには…という感じです。
何かいい方法はありますか?

< 使用 Excel:Office365、使用 OS:unknown >


 ピボットテーブルはどう関係してくるんですか?

 ピボットテーブルにあうようなデータ構造は、
 製品   売上月  売上高
 製品A  4月     100
 製品A  5月     200
 ・・・・
 ・・・・
 のようなものではないんですか?

(γ) 2021/09/30(木) 09:10


 PowerQueryがいいのかなと思います。
 ピボットテーブルを使ったことなあるならご存じでしょうか、
 1列目にも製品名とか列タイトルつけておいてください。
 
 2つのテーブルをそれぞれ、クエリとして読み込み、「列のピボット解除」する
 「クエリの追加」で2つのクエリを1つにする
 「列のピボット」でお望みの書式になるとおもいます。
(´・ω・`) 2021/09/30(木) 09:14

 手作業って例えば↓こんな感じの手順ですかね?  (イメージ増幅中...)

 元データ
 __|___A____|___B____|___C____|___D____
  1|        |4月     |5月     |6月     
  2|製品A   |     100|      20|      70
  3|製品B   |      10|      90|      70
  4|        |        |        |        
  5|        |7月     |8月     |9月     
  6|製品A   |      90|      50|      30
  7|製品B   |      90|      80|      40
  8|        |        |        |        
  9|        |4月     |5月     |6月     
 10|製品C   |      90|      80|      30
 11|製品D   |      50|      30|      60
 12|        |        |        |        
 13|        |7月     |8月     |9月     
 14|製品C   |      20|      70|      80
 15|製品D   |      70|     100|      90

 A列をコピーして各月の間に挿入
 __|___A____|___B____|___C____|___D____|___E____|___F____
  1|        |4月     |        |5月     |        |6月     
  2|製品A   |     100|製品A   |      20|製品A   |      70
  3|製品B   |      10|製品B   |      90|製品B   |      70
  4|        |        |        |        |        |        
  5|        |7月     |        |8月     |        |9月     
  6|製品A   |      90|製品A   |      50|製品A   |      30
  7|製品B   |      90|製品B   |      80|製品B   |      40
  8|        |        |        |        |        |        
  9|        |4月     |        |5月     |        |6月     
 10|製品C   |      90|製品C   |      80|製品C   |      30
 11|製品D   |      50|製品D   |      30|製品D   |      60
 12|        |        |        |        |        |        
 13|        |7月     |        |8月     |        |9月     
 14|製品C   |      20|製品C   |      70|製品C   |      80
 15|製品D   |      70|製品D   |     100|製品D   |      90

 [C1:F15]をカットしてA:B列の下にペースト
 __|___A____|___B____|___C____|___D____
  1|        |4月     |        |        
  2|製品A   |     100|        |        
  3|製品B   |      10|        |        
  4|        |        |        |        
  5|        |7月     |        |        
  6|製品A   |      90|        |        
  7|製品B   |      90|        |        
  8|        |        |        |        
  9|        |4月     |        |        
 10|製品C   |      90|        |        
 11|製品D   |      50|        |        
 12|        |        |        |        
 13|        |7月     |        |        
 14|製品C   |      20|        |        
 15|製品D   |      70|        |        
 16|        |        |        |        
 17|        |5月     |        |6月     
 18|製品A   |      20|製品A   |      70
 19|製品B   |      90|製品B   |      70
 20|        |        |        |        
 21|        |8月     |        |9月     
 22|製品A   |      50|製品A   |      30
 23|製品B   |      80|製品B   |      40
 24|        |        |        |        
 25|        |5月     |        |6月     
 26|製品C   |      80|製品C   |      30
 27|製品D   |      30|製品D   |      60
 28|        |        |        |        
 29|        |8月     |        |9月     
 30|製品C   |      70|製品C   |      80
 31|製品D   |     100|製品D   |      90

 同様に6月9月のデータもA:B列の下にカットしてペーストし、
 __|___A____|___B____|___C____
  1|        |4月     |4月     =B1
  2|製品A   |     100|4月     =IF(COUNTIF(B2,"*月"),B2,C1)
  3|製品B   |      10|4月       としてC2セルをデータ下端までフィルダウン
  4|        |        |4月       その後、C列をコピー&値貼り付けで定数化
  5|        |7月     |7月     
  6|製品A   |      90|7月     
  7|製品B   |      90|7月     
  8|        |        |7月     
  9|        |4月     |4月     
 10|製品C   |      90|4月     
 11|製品D   |      50|4月     
 12|        |        |4月     
 13|        |7月     |7月     
 14|製品C   |      20|7月     
 15|製品D   |      70|7月     
 16|        |        |7月     
 17|        |5月     |5月     
 18|製品A   |      20|5月     
 19|製品B   |      90|5月     
 20|        |        |5月     
 21|        |8月     |8月     
 22|製品A   |      50|8月     
 23|製品B   |      80|8月     
 24|        |        |8月     

 オートフィルタでA列の空白を抽出して
 抽出した行を削除してフィルタ解除する
 __|___A____|___B____|___C____
  1|        |4月     |月      
  2|製品A   |     100|4月     
  3|製品B   |      10|4月     
  4|製品A   |      90|7月     
  5|製品B   |      90|7月     
  6|製品C   |      90|4月     
  7|製品D   |      50|4月     
  8|製品C   |      20|7月     
  9|製品D   |      70|7月     
 10|製品A   |      20|5月     
 11|製品B   |      90|5月     
 12|製品A   |      50|8月     
 13|製品B   |      80|8月     
 14|製品C   |      80|5月     
 15|製品D   |      30|5月     
 16|製品C   |      70|8月     
 17|製品D   |     100|8月     
 18|製品A   |      70|6月     
 19|製品B   |      70|6月     
 20|製品A   |      30|9月     
 21|製品B   |      40|9月     
 22|製品C   |      30|6月     
 23|製品D   |      60|6月     
 24|製品C   |      80|9月     
 25|製品D   |      90|9月     

 列見出しを適当な文字に変えてピボットテーブル使う

(白茶) 2021/09/30(木) 09:28


 >元ファイルがPDFファイル

 Power Query 使ってみました。
 (データの取得/ファイルから/PDFから)

 PDFファイル内に含まれるテーブルが
 提示されたような形式だけなら
 比較的簡単にできそうです。
 無関係なテーブルも混在すると、
 面倒になるかもしれません。
 その場合は、現状通り、手作業でコピペ。

(マナ) 2021/10/01(金) 19:02


ページをまたいだテーブルも自動で結合してくれるみたいです。
見出しで判断している?

 let
    ソース = Pdf.Tables(File.Contents("C:\○○○\△△.pdf"), [Implementation="1.3"]),
    フィルターされた行 = Table.SelectRows(ソース, each Text.StartsWith([Id], "Table")),
    削除された他の列 = Table.SelectColumns(フィルターされた行,{"Data"}),
    #"1行目ヘッダー" = Table.TransformColumns(削除された他の列, {{"Data", each Table.PromoteHeaders(_, [PromoteAllScalars=true])}}),
    テーブル結合 = Table.Combine(#"1行目ヘッダー"[Data]),
    ピボット解除された他の列 = Table.UnpivotOtherColumns(テーブル結合, {""}, "属性", "値"),
    変更された型 = Table.TransformColumnTypes(ピボット解除された他の列,{{"属性", type date}}),
    #"名前が変更された列 " = Table.RenameColumns(変更された型,{{"", "製品"}, {"属性", "日付"}})
 in
    #"名前が変更された列 "

(マナ) 2021/10/01(金) 21:34


フィルターは、[Id]列でなく、[Kind]列が適切でした。

 >フィルターされた行 = Table.SelectRows(ソース, each Text.StartsWith([Id], "Table")),
     ↓
  フィルターされた行 = Table.SelectRows(ソース, each [Kind] = "Table"),

 参考:
 https://community.powerbi.com/t5/Power-Query/NEED-HELP-PLEASE-PDF-Report-with-varying-number-of-pages-and/td-p/1988334
  

(マナ) 2021/10/03(日) 10:30


下記条件を満たすテーブルのみを
PDFから抽出し結合するようにしてみました。
条件1)列が4列
条件2)2列目以降の見出しが、1月〜12月

 let
    ソース = Pdf.Tables(File.Contents("C:\○○○\△△.pdf"), [Implementation="1.3"]),
    フィルターされた行 = Table.SelectRows(ソース, each [Kind] = "Table"),
    削除された他の列 = Table.SelectColumns(フィルターされた行,{"Data"}),
    #"1行目ヘッダー" = Table.TransformColumns(削除された他の列, {{"Data", each Table.PromoteHeaders(_, [PromoteAllScalars=true])}}),
    追加されたカスタム = Table.AddColumn(#"1行目ヘッダー", "列数", each Table.ColumnCount([Data])),
    フィルターされた行1 = Table.SelectRows(追加されたカスタム, each [列数] = 4),
    追加されたカスタム1 = Table.AddColumn(フィルターされた行1, "月の見出し", each List.ContainsAll(List.Transform({1..12}, each Text.From(_) & "月"), List.Range(Table.ColumnNames([Data]), 1))),
    フィルターされた行2 = Table.SelectRows(追加されたカスタム1, each [月の見出し] = true),
    テーブル結合 = Table.Combine(フィルターされた行2[Data]),
    ピボット解除された他の列 = Table.UnpivotOtherColumns(テーブル結合, {""}, "属性", "値"),
    変更された型 = Table.TransformColumnTypes(ピボット解除された他の列,{{"属性", type date}, {"値", type number}}),
    #"名前が変更された列 " = Table.RenameColumns(変更された型,{{"", "製品"}, {"属性", "日付"}})
 in
    #"名前が変更された列 "

(マナ) 2021/10/03(日) 23:15


コメント返信:

[ 一覧(最新更新順) ]


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