Excel (一般機能)

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

 
(指定なし : 指定なし)
Power Query [英字3文字+数字2文字]ではじまるもの
投稿日時: 22/01/20 16:50:34
投稿者: tarima

Power Query
条件列の追加 指定の値ではじまる で、A, Bなど値を指定することはできます。
アルファベットの組み合わせが多数のため、1つ1つ指定することはできません。
 
[英字3文字+数字2文字]ではじまるものを
VBAの「LIKE "[A-Z][A-Z][A-Z]##*"」
のように、ワイルドカードを使って、条件を指定し、頭3文字を抽出したいです。
 
以下のリストの場合、追加する列には、1,2,3行目のみに、ABC、XRT、PQRと頭3文字を抽出したいです。
 
1.ABC12
2.XRT56
3.PQR33
4.APPLE
5.ORANGE
 

投稿日時: 22/01/20 17:17:58
投稿者: tarima

HANA50 のように、数字を2文字含むが、英字が3文字でない対象外のものもあります。
 
最初から5文字の抽出、数字以外から数字による分割...など試してはみたのですが、希望の結果となりません。
Power Queryの関数はわかりません。

回答
投稿日時: 22/01/20 18:06:38
投稿者: んなっと

とりあえずの案です。もっといい方法があるかもしれません。
 
テーブル1、列の名前が 品番 だとして
 
      A   B
1    品番 分類
2 ABC12DE34  あ
3   XRT56  い
4   PQR33  う
5   APPLE  え
6   HANA50  お
 
 
詳細エディターで
 
let
    ソース = Excel.CurrentWorkbook(){[Name="テーブル1"]}[Content],
    Sta = Table.AddColumn(ソース, "最初", each if Text.Length([品番])>4 and Text.Start([品番], 5) = Text.Start(Text.Select([品番],{"A".."z"}),3) & Text.Start(Text.Select([品番],{"0".."9"}),2) then Text.Start([品番], 3) else null, type any)
in
    Sta
 
 
 
      A   B   C
1    品番 分類 最初
2 ABC12DE34  あ  ABC
3   XRT56  い  XRT
4   PQR33  う  PQR
5   APPLE  え   
6   HANA50  お   

回答
投稿日時: 22/01/20 18:35:01
投稿者: んなっと

X-T56のようなものも認める「数字以外3文字+数字2文字」なら
 
    Sta = Table.AddColumn(ソース, "最初", each if Text.Length([品番])>4 and Text.Start([品番], 5) = Text.Start(Text.Remove([品番],{"0".."9"}),3) & Text.Start(Text.Select([品番],{"0".."9"}),2) then Text.Start([品番], 3) else null, type any)

回答
投稿日時: 22/01/21 08:07:04
投稿者: んなっと

正規表現の方法修正。
 
let
    ソース = Excel.CurrentWorkbook(){[Name="テーブル1"]}[Content],
    Reg=(str,ptn)=>
        Web.Page("<script>document.write('"&str&"'.match(/"&ptn&"/))</script>")
        [Data]{0}[Children]{0}[Children]{1}[Text]{0},
    Sta = Table.AddColumn(ソース, "先頭", each try
        Text.Split(Reg([品番],"^([A-z]{3})\d{2}"),","){1} otherwise null, type any)
in
    Sta

回答
投稿日時: 22/01/21 11:00:17
投稿者: んなっと

正規表現さらに別の方法。
 
let
    ソース = Excel.CurrentWorkbook(){[Name="テーブル1"]}[Content],
    Reg=(str,ptn)=>try Logical.FromText(
        Web.Page("<script>document.write(/"&ptn&"/.test('"&str&"'))</script>")
        [Data]{0}[Children]{0}[Children]{1}[Text]{0}) otherwise false,
    Sta = Table.AddColumn(ソース, "先頭", each if Reg([品番],"^\D{3}\d{2}") then
        Text.Start([品番],3) else null, type any)
in
    Sta

投稿日時: 22/01/21 15:29:13
投稿者: tarima

んなっと様、いつもありがとうございます。今回も大変助かりました。
 
全部試しました。全部希望通りの結果が得られました!
正規表現は、私の勉強不足で理解できないため、1つ目にご提示頂いたものを使います。