[[20230205205848]] 『連続していないデータの一部抽出方法』(わか) ページの最後に飛ぶ

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

 

『連続していないデータの一部抽出方法』(わか)

     [A]   [B]   [C]  [D]    [E]     [F]…
1  勘定科目 4月度 5月度 6月度 第一四半期合計 7月度…
2 A商品売上 1,000 1,500 2,000   5,500    2,000
3 B商品売上 
4 C商品売上
5 A売上原価 500  700  900    2,100    800
6 B売上原価
7 C売上原価 
8 売上総利益
9  販売費
10 一般管理費
11 営業外費用

会計データの一部抽出を行いたいと思っております。
上記がデータ例で、A列に勘定科目、B列以降に各月の数値(なお三か月ごとに小計されていて連続していません)

このようなデータがある場合に、
A商品売上とA売上原価の
1.毎月の値を連続で抽出したい場合(4-3月度を途中の小計無しで表にしたい場合)
2.4-6月度の累計・4-7月度の累計
など、連続していないデータを抽出したい場合どのような関数を使うことが考えられるでしょうか?
なお、元データを編集することは現状考えていません。

3.また、プルダウンにて月を指定したら指定月のA商品売上とA売上原価の単月と累計の値が返されるような仕組みづくりはマクロではなく関数で可能なのでしょうか?

?B完成イメージ

    [A]   [B]    [C]    [D]    [E]     [F]…
1 5月度 ←プルダウンで対象月を指定
2
3     5月単月 5月累計
4A商品売上 1,500       2,500
5A売上原価 500          1,200

良いアイデアが浮かばず、教えていただけると幸いです。
もし質問の方法に足りない点がありましたらご指摘ください。
よろしくお願いします。

< 使用 Excel:Microsoft365、使用 OS:Windows10 >


アイデアだけですが自分がやるなら、元の表をパワークエリをつかって、こんな感じの表に作り替えて

    商品名   |勘定科目 | 月度 |  金額
    A商品    | 原価    | 4月  | 170,000 
    A商品    | 売上    | 4月  | 204,000 
    B商品    | 原価    | 4月  |  70,000 
    B商品    | 売上    | 4月  |  84,000 
    A商品    | 原価    | 5月  |  80,000 
    A商品    | 売上    | 5月  |  96,000 
    B商品    | 原価    | 5月  |  70,000 
    B商品    | 売上    | 5月  |  84,000 

この表からこんな感じのピボットテーブルを作る

  フィルターに商品名と月
  行に勘定科目
  Σ値に金額

    商品名  A商品
    月度      5月

    行ラベル 合計 / 金額
      原価    80,000
      売上    96,000

かな
(とおりすがり) 2023/02/05(日) 21:35:51


早速のお返事ありがとうございます!

残念ながら「商品名」という列項目が存在しないのです…。
またパワークエリによる加工において、少し触ってみましたが〜月度という列項目を元データから作成する方法がうまく思いつきませんでした。
ただしパワークエリの機能を用いたデータ加工については馴染みがないので、
私の能力不足な気がします。何かうまくできる方法を今後勉強してみたいと思います。

また仮に上記の通りに表が出来たとして、
ピボットテーブルを使った場合において、5月で集計した場合に
5月単月は可能であっても5月累計(4月と5月の合計)を導き出す方法が思い浮かびません…。
(わか) 2023/02/05(日) 22:17:59


>〜月度という列項目を元データから作成する方法
勘定科目の列を選択して、 変換=>列のピボット解除=>その他の列のピボット解除
不要な行四半期合計の行はそのあとで削除

>「商品名」という列項目が存在しないのです…。
勘定科目の形式が
A売上原価
A商品売上
このように決まっているなら、勘定科目の列を選択して、変換=>列の分割=>文字数による分割して
文字数を4、できるだけ右側で1回にチェック

>5月累計(4月と5月の合計)を導き出す方法
パワークエリの中で累計列を計算してしまえばいいような気がします
(とおりすがり) 2023/02/05(日) 23:57:22


不格好な関数ですけど、無理矢理やってみました。
作業列が必要です。
ベタ書きですみません。
もっと整理できると思いますが、ここまでです。

     |[A]       |[B]  |[C]   |[D]  |[E]      |[F]  |[G]  |[H]  |[I]      |[J]   |[K]   |[L]   |[M]      |[N]  |[O]  |[P]  |[Q]      
 [1] |勘定科目  |4月度|5月度 |6月度|第1四半期|7月度|8月度|9月度|第2四半期|10月度|11月度|12月度|第3四半期|1月度|2月度|3月度|第4四半期
 [2] |A商品売上 |1,000| 1,500|2,000|    4,500|2,000|3,000|4,000|    9,000| 5,000| 6,000| 7,000|   18,000|8,000|9,000|1,000|   18,000
 [3] |B商品売上 |     |      |     |         |     |     |     |         |      |      |      |         |     |     |     |         
 [4] |C商品売上 |     |      |     |         |     |     |     |         |      |      |      |         |     |     |     |         
 [5] |A売上原価 |  500|   700|  900|    2,100|  800|  900|1,000|    2,700|   400|   800|   300|    1,500|  600|  200|  100|      900
 [6] |B売上原価 |     |      |     |         |     |     |     |         |      |      |      |         |     |     |     |         
 [7] |C売上原価 |     |      |     |         |     |     |     |         |      |      |      |         |     |     |     |         
 [8] |売上総利益|     |      |     |         |     |     |     |         |      |      |      |         |     |     |     |         
 [9] |販売費    |     |      |     |         |     |     |     |         |      |      |      |         |     |     |     |         
 [10]|一般管理費|     |      |     |         |     |     |     |         |      |      |      |         |     |     |     |         
 [11]|営業外費用|     |      |     |         |     |     |     |         |      |      |      |         |     |     |     |         
 [12]|          |     |      |     |         |     |     |     |         |      |      |      |         |     |     |     |         
 [13]|2月度     |単月 |累計  |     |基準     |幅   |列   |行   |dummy    |      |      |      |         |     |     |     |         
 [14]|A商品売上 |9,000|48,500|     |       14|    2|   15|    2|   31,500|      |      |      |         |     |     |     |         
 [15]|A売上原価 |  200| 7,100|     |       14|    2|   15|    5|    6,300|      |      |      |         |     |     |     |         

 B12 =INDEX($A$1:$Q$11,MATCH($A14,$A$1:$A$11,0),MATCH($A$13,$A$1:$Q$1,0))
 C12 =SUM(OFFSET(INDEX($A$1:$Q$11,MATCH($A14,$A$1:$A$11,0),$E$14),0,0,1,$F$14))+I14
 E14 =IF(G14<=4,2,IF(G14<=8,6,IF(G14<=12,10,14)))
 F14 =MATCH($A$13,$A$1:$Q$1,0)-E14+1
 G14 =MATCH($A$13,$A$1:$Q$1,0)
 H14 =MATCH($A14,$A$1:$A$11,0)
 I14 =SUMIF(OFFSET(INDEX($A$1:$Q$11,1,1),0,0,1,G14),"*半期",OFFSET(INDEX($A$1:$Q$11,H14,1),0,0,1,G14))

(黒豆) 2023/02/06(月) 08:16:41


> 5A売上原価 500 1,200
5月の「A売上原価」は「700」じゃないのかね。

> 少し触ってみましたが〜月度という列項目を元データから作成する方法がうまく思いつき
> ませんでした。
「5月度」と入力したセルを名前定義してそれを読み込むだけです。

基になる表を「データ範囲」。月度を入力するセルを「月度」と名前定義。
空のクエリの詳細エディタに下記貼り付け。

let

    ブック = Excel.CurrentWorkbook(),
    ソース = ブック{[Name="データ範囲"]}[Content],
    ヘッダー昇格 = Table.PromoteHeaders(ソース),
    上位行を保持 = Table.FirstN(ヘッダー昇格, each [勘定科目]<>null),
    月度 = ブック{[Name="月度"]}[Content]{0}[Column1],
    見出しリスト = [
        見出し1 = Table.ColumnNames(上位行を保持),
        位置 = List.PositionOf(見出し1, 月度)+1,
        見出し2 = List.Select(List.FirstN(見出し1, 位置), each not Text.Contains(_, "合計"))
    ][見出し2],
    列の選択1 = Table.SelectColumns(上位行を保持, 見出しリスト),
    累計列の追加 = Table.AddColumn(
        列の選択1, "累計",
        each List.Sum(List.Transform(List.Skip(Record.FieldValues(_)), Number.From))
    ),
    行の抽出 = Table.SelectRows(累計列の追加, each [累計]<>null),
    列の選択2 = Table.SelectColumns(行の抽出, {"勘定科目", 月度, "累計"}),
    テーブル再構成 = Table.FromColumns(
        Table.ToColumns(列の選択2),
        type table [勘定科目=text, 単月=Int64.Type, 累計=Int64.Type]
    )
in
    テーブル再構成
(d-q-t-p) 2023/02/06(月) 09:30:31

よく考えたら最後のステップは普通に型を変更するだけでよかった気がします……
(d-q-t-p) 2023/02/06(月) 09:36:38

●会計シート

      A   B   C   D   E   F
1  勘定科目 4月度 5月度 6月度  第1 7月度
2  A商品売上 1,000 1,500 2,000 4,500 2,000
3  B商品売上                  
4  C商品売上                  
5  A売上原価  500  700  900 2,100  800
6  B売上原価                  
7  C売上原価                  
8 売上総利益                  

●抽出シート

      A   B   C
1   7月度       
2             
3       単月  累計
4 A商品売上 2,000 6,500
5 A売上原価  800 2,900

B4
=LET(r,会計!B:Z,a,TAKE(r,1),b,XLOOKUP(A4,会計!A:A,r),XLOOKUP(A$1,a,b,""))
下方向・↓
C4
=LET(r,会計!B:Z,a,TAKE(r,1),b,XLOOKUP(A4,会計!A:A,r),SUM(FILTER(b,(SEQUENCE(,COLUMNS(b))<=XMATCH(A$1,a))*(LEFT(a)<>"第"))))
下方向・↓
(んなっと) 2023/02/06(月) 10:44:43


C4
=LET(r,会計!B:Z,a,TAKE(r,1),b,XLOOKUP(A4,会計!A:A,r),SUM(FILTER(b,(SEQUENCE(,COLUMNS(b))<=XMATCH(A$1,a))*(RIGHT(a,2)="月度"))))
の可能性もあります。
(んなっと) 2023/02/06(月) 10:53:16

数式でやるのはあんまりお勧めではないけど……

A3に
=LET(

    _rng1,TAKE(データ範囲,,XMATCH(月度,TAKE(データ範囲,1))),
    _rng2,INDEX(_rng1,,COLUMNS(_rng1)),_flt,TRANSPOSE(FILTER(_rng1,_rng2<>"")),
    _row1,DROP(CHOOSEROWS(_flt,COLUMNS(_rng1)*{0,1}+{1,0}),,1),
    _row2,BYCOL(FILTER(DROP(_flt,,1),RIGHT(TAKE(_flt,,1),2)<>"合計"),LAMBDA(_a,SUM(_a))),
    TRANSPOSE(HSTACK({"";"単月";"累計"},VSTACK(_row1,_row2)))
)
(d-q-t-p) 2023/02/06(月) 14:11:39

とおりすがりさん

詳しくご教示いただきありがとうございます。
現状私がパワークエリに不案内でして、ご呈示の通りに編集することができませんでした。

ですが、今後活用する場面が多くなることが考えられますので、
これをきっかけに詳しく学びたいと思います。

迅速かつご丁寧にご対応いただきありがとうございました!

(わか) 2023/02/06(月) 15:22:53


黒豆さん

データ例までとても美しく作成いただきありがとうございます。
ご呈示いただいた式を元に資料を作成してみたところ、意図するものができました!

ただしINDEX,MATCH,OFFSET関数については使用方法を理解できたわけではないので、今後のためにも習得していきたいと思います。
ご対応ありがとうございました!
(わか) 2023/02/06(月) 15:31:56


d-q-t-pさん

単純な転記ミスがありましたね、ご指摘ありがとうございます。

パワークエリについてのご教示内容ですが、恥ずかしながらあまりにも不案内でして…
「名前の定義」「詳細エディタ」これらの言葉から学ぶ必要があります。

みなさまのご回答を見る限り今後活用できるなと思いましたので、
これを機に学び始めたいと思いました。

ご対応いただきありがとうございました!
(わか) 2023/02/06(月) 15:36:21


んなっとさん

まさに意図したものそのもので感動しております。
また数式もそれほど複雑ではなく、業務の引継ぎ時にもとても有用に感じます。
こちらを用いて、元資料に合わせていちど作成してみます。

ただし
LET,XLOOKUP,TAKE,FILTER,SEQUENCE,COLUMNS
これらの関数は前提として知識にありませんでしたので、今後のためにもぜひとも習得したいと思います。

ありがとうございました!!
(わか) 2023/02/06(月) 15:46:13


コメント返信:

[ 一覧(最新更新順) ]


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