Excel (一般機能)

Excelの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2019)
パワークエリでの列自体の並べ替え
投稿日時: 23/08/28 16:29:00
投稿者: ラングドシャ

よろしくお願いいたします。
諸事情からデータの提供時期がバラバラであるため、パワークエリにて読み込むと
下記の様に順不同になってしまいます。
 

	A	B	 C	     D	     E	     F
1	品番	商品名	 20230801	20230802	20230726	20230727
2	49001	ほうき	 335	    321	    326	    349
3	49002	チップ	 294	    325	    319    	302
4	49003	ネット	 279	    297	    296    	258
5	49004	ピン黒	 290    	252   	253    	238
6	49005	飾ゴム	 154   	178	    162	    153

 
 
C列に一番古い日付が来るよう、パワークエリで並び変えることは可能でしょうか?
 
<希望する並び>
	A	B	 C	     D	     E	     F
1	品番	商品名	 20230726	20230727	20230801	20230802

 
(まだアイデアは浮かんでいませんが)データ提供されるたびに、元ファイル自体に
バッチファイルか何かで連番などを付けて読み込み順をコントロールした方が良いでしょうか?
 
よろしくお願いいたします。

回答
投稿日時: 23/08/28 17:12:11
投稿者: taitani
投稿者のウェブサイトに移動

ちょっと強引かもですが、、
元データのクエリ名:data
 
新しいクエリ>その他のソース>空のクエリで以下クエリを作成します。
 

let
    // 列名の一覧を取得
    項目名取得 = Table.FirstN(data, 1),
    項目名保管 = Table.ColumnNames(項目名取得),

    // 数値部分を抽出してソート
    項目名ソート = List.Sort(項目名保管, (a, b) => 
        if Text.AfterDelimiter(a, "2023") < Text.AfterDelimiter(b, "2023") then -1
        else if Text.AfterDelimiter(a, "2023") > Text.AfterDelimiter(b, "2023") then 1
        else 0),

    // ソートされた列名の一覧を取得
    項目名表示 = 項目名ソート,

    // ソートされた列名の一覧を使用してデータを変換
    テーブル展開 = Table.SelectColumns(data, 項目名表示)
in
    テーブル展開

回答
投稿日時: 23/08/28 17:38:06
投稿者: gombohori

こんなのでは?

let
    ソース = Excel.CurrentWorkbook(){[Name="テーブル1"]}[Content],
    並べ替えられた列 = Table.ReorderColumns(ソース, List.Sort(List.Skip(Table.ColumnNames(ソース),2)))
in
    並べ替えられた列

回答
投稿日時: 23/08/28 17:46:38
投稿者: gombohori

こういう関数を作っておいて、

let
    ソース = (tbl as table,n as number )=>Table.ReorderColumns(tbl, List.Sort(List.Skip(Table.ColumnNames(tbl),n)))
in
    ソース

この関数の名前をTable_SortColumnsとすると
 
let
    ソース = Excel.CurrentWorkbook(){[Name="テーブル1"]}[Content],
    並べ替えられた列 = Table_SortColumns(ソース,2)
in
    並べ替えられた列

こうしておくと汎用的ですか。 nは並べ替えない列数(先頭から)

回答
投稿日時: 23/08/28 17:49:55
投稿者: taitani
投稿者のウェブサイトに移動

すみません、私のコードは、「品番、商品名」も並び替えを行ってしまうので、無視してください。

投稿日時: 23/08/28 18:10:58
投稿者: ラングドシャ

お二方ともありがとうございました。
横方向の並び替えの検索さえうまくヒットさせることができなかったので・・・
できることに感動です。
 
taitani様
ありがとうございます。
きちんと並び替えられました。全てが対象になるので名称によっては使えない場合があるという事ですかね。
とはいえ、ステップで見るだけでも勉強になります。
ありがとうございました。
 
gombohori様
ありがとうございます。
問題なく並び替えることができました。
汎用的に使えるよう関数の作成までありがとうございます。
こんなに短いコードでもできるんですね。すごいです。
ありがとうございました。