Excel (一般機能)

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

 
(Windows 11 Home : Excel 2021)
パワークエリのカスタム列の追加について教えてください
投稿日時: 25/01/15 12:02:29
投稿者: GOA

フォルダに各施設ごとに売り上げのエクセルデータ複数があります。各データの1行目から9行目までタイトルやそのほか不要な文字列や空白があります。B10セルから項目、11行目からそれぞれの項目ごとにデータが続いています。項目には施設を特定できる名前やコードなどのデータはありません。
お聞きしたいのは、10行目をヘッダーにして、B6に「場  所:●●」と唯一施設を示す文字があるので、この部分の「場  所:」を削除して「●●」だけをカスタム列に追加したいのです。(もちろん各施設ごとに「●●」「▲▲」を分けて)
トライしてみたこと・・・
「サンプルファイルの変換」クエリで行を削除、1行目をヘッダーにした後、「カスタム列の追加」→
「=Text.Replace(ソース{5}[Column2], "場  所:", "")」で試みましたが
Expression.Error: 列挙内に十分な要素がなかったため、操作を完了できませんでした。
詳細:
[Table]
と表示されてしまいます。
エラーの原因がわかる方、ほかの方法を知っている方。ご教授ください。

回答
投稿日時: 25/01/15 12:41:47
投稿者: sk

引用:
「サンプルファイルの変換」クエリで行を削除、1行目をヘッダーにした後、「カスタム列の追加」→
「=Text.Replace(ソース{5}[Column2], "場  所:", "")」で試みました

そのクエリを選択した状態で詳細エディタを開き、表示されたクエリ文全体を
そのまま明記されることをお奨めします。

回答
投稿日時: 25/01/15 13:54:00
投稿者: んなっと

フォルダー名が E:\office\Excel\ExcelVBA\施設売上
シート名が Sheet1 だとして書きます。
 
最初のブック Sheet1
 
   A        B   C  D
 1 aaa             
 2                
 3                
 4                
 5                
 6    場  所:アア     
 7                
 8                
 9                
10         名前 分類 値
11          あ   P 10
12          い   q 11
13          う   r 12
14          え   P 13
15          お   q 14
16          か   r 15
17          き   P 16
18          く   q 17
19          け   r 18
 
次のブック Sheet1
 
   A        B   C  D
 1 bbb              
 2                
 3                
 4                
 5                
 6    場  所:イイ      
 7                
 8                
 9                
10         名前 分類  値
11          こ   s 100
12          さ   t 101
13          し   u 102
14          す   v 103
 
のようにA1からセルが埋まっている場合は、次のようになります。
 
let
    MltExp = (Sor) =>
      let
        Sht = Sor{[Item="Sheet1",Kind="Sheet"]}[Data],
        Plc = Text.AfterDelimiter(Sht{5}[Column2],":"),
        Skp = Table.Skip(Sht,9),
        Rem = Table.RemoveColumns(Skp,Table.ColumnNames(Skp){0}),
        Prm = Table.PromoteHeaders(Rem, [PromoteAllScalars=true]),
        Add = Table.AddColumn(Prm, "場所", each Plc)
   in
        Add,
    Src = Folder.Files("E:\office\Excel\ExcelVBA\施設売上"),
    Add = Table.AddColumn(Src,"Tbl", each MltExp(Excel.Workbook([Content]))),
    Del = Table.SelectColumns(Add,{"Tbl"}),
    Exp = Table.ExpandTableColumn(Del, "Tbl", Table.ColumnNames(Del[Tbl]{0}), Table.ColumnNames(Del[Tbl]{0}))
in
    Exp
 
たぶん以下のように統合できます。
 
    A   B  C   D
 1 名前 分類  値 場所
 2  あ   P  10 アア
 3  い   q  11 アア
 4  う   r  12 アア
 5  え   P  13 アア
 6  お   q  14 アア
 7  か   r  15 アア
 8  き   P  16 アア
 9  く   q  17 アア
10  け   r  18 アア
11  こ   s 100 イイ
12  さ   t 101 イイ
13  し   u 102 イイ
14  す   v 103 イイ

回答
投稿日時: 25/01/15 19:00:22
投稿者: んなっと

シート名がSheet1とは限らず、変化する場合は
 
let
    MltExp = (Sor) =>
      let
        Sht = Sor{0}[Data],
        Plc = Text.AfterDelimiter(Sht{5}[Column2],":"),
        Skp = Table.Skip(Sht,9),
        Rem = Table.RemoveColumns(Skp,Table.ColumnNames(Skp){0}),
        Prm = Table.PromoteHeaders(Rem, [PromoteAllScalars=true]),
        Add = Table.AddColumn(Prm, "場所", each Plc)
   in
        Add,
    Src = Folder.Files("E:\office\Excel\ExcelVBA\施設売上"),
    Add = Table.AddColumn(Src,"Tbl", each MltExp(Excel.Workbook([Content]))),
    Del = Table.SelectColumns(Add,{"Tbl"}),
    Exp = Table.ExpandTableColumn(Del, "Tbl", Table.ColumnNames(Del[Tbl]{0}), Table.ColumnNames(Del[Tbl]{0}))
in
    Exp

投稿日時: 25/01/16 08:10:40
投稿者: GOA

んなっとさん、skさんありがとうございました。
プロンプトまで書いてくださり丸パクリでできました。
説明不要だと思い省いていましたが、実際にA1からセルがうまっていたので本当にまるまる使わせていただきました。クエリ初心者なのでどこに書けばよいかも解かっていなかったのですがskさんの「詳細エディタを開き・・・」をヒントにたどり着くことができました。
感謝です。