タグ別アーカイブ: カスタム列

M言語に慣れる_2回目~カスタム列~

【M言語は難しくない!】今回は、前回紹介したM言語の特徴を意識しながら、実際に「M関数」を使用したカスタム列を作成してみましょう!

では、前回紹介したM言語の特徴を振り返ってみましょう!

ⅰ.コードのカラー

赤は「文字列」、青はeachなどの「予約語」、緑は「自動記録された値」です

ⅱ.大文字と小文字の区別

M言語は、大文字と小文字の違いを認識します

ⅲ.ステップの引継ぎ

適用したステップは「ステップ名」を通じて、前ステップの内容を引き継ぎます

今回はこの3つの特徴に加え、次の4つ目の特徴も意識しましょう!!

ⅳ.データ形式

 エクセルは表計算ソフトであって、Accessのようなデータベースソフトではありません

 よって、過去の記事で紹介したように、Power Queryではデータ形式を意識した「データの構造化」がエディタを開く際に、自動的に行われます

 当然、Power Queryエディタ(以降、エディタ)内で列を追加する時にも「データ形式」を意識する必要があります

 では、今回意識すべきPower Queryの4つの特徴を確認したところで、M関数を使用した「カスタム列」の追加についての解説を始めたいと思います

今回、解説に使用するデータは次の画像のデータです

ファイルデータはこちらになります

アイコン

Mコード2回目_練習 21.42 KB 28 downloads

...

こちらのデータから、次の列をM関数を使用して作成します

A.「姓」と「入会年」を組み合わせたログインID

「入会年」は「整数」のため、M関数を使用して「文字列」に変換します

B.「入会年」「入会月」と「1日」を組み合わせた入会日

M関数にて、3つの整数から日付を作成します

エクセル関数のDATE関数と同じ要領です

なお、上のABの列を作成する前に、ウォーミングアップとこれまでの復習を兼ねて、簡単なカスタム列を作成してみましょう

1.全ての行が「1」の列

まず、データテーブル上で右クリックし、下の画像の黄色の箇所からエディタを開きます

エディタが開いたら、「列の追加」タブから「カスタム列」をクリックします

次に開いた「カスタム列」の画面で「1」を指定します

上の画像のように「1」を指定したら、右下のOKボタンをクリックします

すると全ての行が「1」になっている新たな列「1」が追加されます

では、エディタ画面上の数式バーの中味を詳細に確認してみましょう

まず、()の中の左から1番目の「変更された型」についてです

①ステップ名

こちらは、前ステップの「変更された型」を引き継いでいます

②新しい列名

文字列”1”としてで表示されています

③システム予約語

「each」はシステム予約語なので、で表示されています

④自動記録された値

最後の”1”は自動記録された値なので、で表示されています

①から④まで数式の中味を確認しました

ここで、数式バーに「1」と入力してみましょう

すると、③のeachの意味合いがよく分かると思います

数式バーに1と入力すると「1」が1つだけ表示されます

ですので、「each」というシステム予約語により「それぞれ~」「各々~」のような意味になるのが御理解頂けたと思います

2.ログインID の作成/文字列への変換

2.ログインIDの作成では、記事の冒頭のA.で前述したように「姓」と「入会年」を組み合わせ、ログインIDの列を作成します

なお、「姓」と「入会年」を組み合わせる際には「」を使います

では、1.でも行ったように「カスタム列」の画面から作成を行います

「姓」と「入会年」は、ともに既存の列なので、画面右から挿入します

次の画像の内容で式を記入したら、画面右下のOKボタンをクリックします

ちなみに、上記の内容であれば、画面左下にエラーメッセージは出ません

ところが、出力された新たな列は、全てエラーになります

このエラーが何故発生するかというと、記事の冒頭ので紹介したように、M言語では「データ形式」を意識する必要があるからです

「姓」は「文字列型式」ですが、実は「入会年」は「整数」です

ですので、「入会年」は文字列に変換する必要があります

ここで、M関数を使用します

エクセル関数では次の画像の画面から、該当の関数を探すことができます

M関数でも同じような画面があります

上の画像の「Power Queryの式についての詳細」をクリックすると、下の画像のMicrosoft社の画面に遷移します

上の画像の下に「カテゴリ別の関数」とありますが、こちらの中に「テキスト関数」という関数があります

更に、こちらの「テキスト関数」の中を下にスクロールすると、「Text.From」という関数があります

こちらの関数で「入会年」を「整数」から「文字列」に変換できます

このText関数では、変換対象をText.Form()の”()“の中に入れます

なお、

関数は下の画像の数式バーに直接入力してしまいましょう!

Text関数を使用する際、「Text.Form」の中のTとFのいずれかを小文字にするとエラーになりますので、注意して入力しましょう!

3.入会日の作成/整数から日付作成

こちらは、記事の冒頭のB.にて紹介した、下の画像の「#date」関数を使用した内容になります

こちらのM関数は、#date()()の中に、整数の「年」「月」「日」を設定します

下の画像のエクセル関数の「DATE関数」と同じ要領になりますので、こちらのM関数は取り組みやすいと思います

但し、2.で扱ったText.From関数と違い、この関数は小文字dで始まります

この点については、エラーにならないように注意して入力しましょう!

作成する画面についてですが、こちらは、カスタム列の作成画面で作成します

()の中の最後の「日」は手動で「1」を入力します

新たに作成された列は、次の画像のように出力されます

<まとめ>

今回はカスタム関数の作成画面にて、3つの列を作成しました

1.全て1の列

2.文字列/姓と整数/入会年を組み合わせたログインID

3.整数/「年」「月」「日」を組み合わせた入会日

 1.では、前回、M言語の特徴として紹介した「each」などのコードカラー()についても解説を行いました

 ちなみに、「each」はM言語を扱う際には頻繁に出てきますので、感覚として慣れて置いた方が良いです

 2.では、入会年をM関数のText.Fromを使用して「整数」から「文字列」に変換しました

 記事の冒頭でも紹介したように、M言語では「データ形式」を意識する必要があります

 M言語を扱う際には、今回のようにデータ形式を変換する場面が出てくるはずですので、Text.From関数はぜひ習得しておきましょう!

最後は、#date関数を使用して「入会日」を作成しました

こちらの関数はText.From関数と違い、小文字から始まります

 前回もM言語の特徴として解説しましたが、M言語では大文字と小文字を区別する必要があります

 筆者も何度か、この大文字と小文字の区別を間違えてエラーを出しましたが、意外とエラー原因が些細すぎて原因に気づかないものです

この「大文字と小文字の区別」については特に注意しましょう!

記事を最後まで読んで下さり、誠にありがとうございました

参考までに今回使用したファイル(完成版)を添付します

 エディタ画面の「適用したステップ」の表示が、解説に使用した内容とは若干相違がありますので、この点はご了承をお願いします

アイコン

Mコード2回目_完成 24.89 KB 10 downloads

...

では、次回もよろしくお願いします

にほんブログ村 資格ブログ ビジネススキルへ
にほんブログ村 IT技術ブログ VBAへ


にほんブログ村

M言語に慣れる_4回目~特殊テンプレート作成~

【M言語は難しくない!】今回はカスタム列の隠れた裏技を使用して、特殊なテンプレートを作成します。今回は次の画像のように、「1対多」の関係の結合を「コードを1つ追加する」だけでサクッと行います

この処理は、従来であればVBAなどを覚えないとできない処理でした

M言語の仕組みを使えば、カスタム列・作成画面にて本当にサクッと作成できます

M言語の魅力のうちの一つといってもいい処理かもしれませんね!

今回作成するテンプレート

次の画像のように「担当者名のリスト」と「勤務日のリスト」から、各担当者別の勤務表を作成します

勤務表

上の画像の右側/E列とF列の表のように、担当者1人に対して、複数の勤務日を結合します

勤務表は、最終的には勤務日の右に「勤務開始時刻」や「勤務終了時刻」などを追加して使用するイメージです

 解説は、シート上の「担当者名のリスト/」と「勤務日のリスト/」から次の2つのクエリを作成した上で、Power Queryエディタ(以降エディタ)で操作を開始するところからはじめます

・担当者名のリスト ➡ Namesクエリ

・勤務日のリスト ➡ TimeTable

次のファイルに含まれる演習用の元データは、クエリを作成する前の状態になっています

目次

今回のポイント

データ形式の事前調整

各行に日付テーブル作成

作成テーブルの展開

条件式の追加による調整

シートへの読み込み処理

<まとめ>

今回のポイント

今回の「カスタム列」では、前述の通り「1対多」の関係で結合を行います

次の画像のように「」ではなく「テーブル」を結合します

この「テーブル」を結合するの点が、今回の解説の最大のポイントになります

今回作成する内容とポイントを確認したところで、本格的な解説をはじめます

データ形式の事前調整

前述の通り、解説はエディタ内に2つのクエリがある状態から開始します

・担当者名/列のリスト ➡ Namesクエリ・勤務日/列のリスト ➡ TimeTable

過去の記事で解説した通り、「データの構造化」が行われた結果、データ形式の変更が必要な箇所が1点でてきますので、まずはそちらを変更します

下の画像の勤務日を「時刻」から「日時」に変更します

データ形式の変更は、上の画像の左上の黄色の印から行えます

上のGIF画像のように、日付を指定した後は次の画面が開きます

「現在のものを変換」をクリックすれば、下のGIF画像のように型式変更が行われます

以降は有料ページ/課金サービスへ

M言語に慣れる_10回目~グループ毎に連番作成~

【M言語は難しくない】今回はデータをグループ化した際に、1から始まる連番をグループ毎に作成する方法について解説します。この処理の仕方を覚えると、エクセルの使い方の幅が広がります

コードの採番や顧客の2回目のリピート状況把握など、使いみちは沢山あります!

しかも知られざるグループ化機能を使えば、1つのM関数を入力するだけでできてしまいます

まさに魔法です

ぜひ、実際に手を動かしてこの魔法を体験してください!

目次

今回のポイント

今回の使用データ

グループ化の実施

M関数の入力

<まとめ>

今回のポイント

今回のポイントは2つあります

グループ化

グループ化する際に、よく選択される操作は「合計」などです

今回は「すべての行」という操作を選択します

 この「すべての行」を選択して操作を行うと、グループ毎テーブルが作成されます

M関数作成

連番は「列の追加」タブの「インデックス列」のメニューから、クリック操作で簡単に作成できます

 今回は、既存のメニューは使用せず、カスタム列の作成画面から「Table.AddIndexColumn」というM関数を使用して「連番」を作成します

 M関数で作成することで、ポイントの1点目で作成されたグループ毎のテーブルを、関数の引数として指定できるようになります

今回の使用データ

今回は下の画像にあるデータの「部門」列をグループ化します

グループ化した後は、グループ毎に連番を振ります

以下が実際に使用するサンプルデータです

以降は有料ページ/課金サービスへ

IF式を組み合わせて列作成~上級編10回目

こんにちは、Excellent仕事術のガッツ鶴岡(@atsushi1039)です

 Power Queryは関数やVBAの知識がなくても、直感的にクリックしていくことで処理を進めていけるのが魅力です

 ただ、どうしてもIF文をネスト(組み合わせ)し、複数の条件式を組み合わせた新たな列を挿入する必要がでる時もあります

 そんな時のためにPower Queryには「列の追加」タブに「カスタム列」というメニューがきちんとあります

 今回は、下の図の売上金額の集計表をもとにして、IF式を組み合わせて新たな列を作成する方法を解説します

売上金額

アイコン

上級10回目_演習 16.89 KB 41 downloads

...
 

上の図の表「売上金額」を元にして、来期の売上予測を2つのパターンで作成し、新たな列を2列追加します

来期の売上予測のパターンの1つ目は消極的な予測です

・地域がアメリカ ➡ 10%増加

・それ以外 ➡ 5%増加

2つ目は積極的な予測です

・地域がアメリカ ➡ 15%増加

・製品がトラック、且つ、地域がヨーロッパ ➡ 10%増加

・上記2つ以外 ➡ 5%増加

1つ目は1つのIF文により、2つの計算式を作成します

2つ目は2つのIF文により、3つの計算式を作成します

 しかも、2つ目のパターンの3番目の計算式は「且つ」なので「AND」を組み合わせます

作成する計算式を説明したところで、本格的な解説に入ります

消極的パターン

解説は、Power Queryエディターを開いたところから始めます

主な解説内容は、次の①~③があります

①はIF文を作成するメニューの場所

②IF文を実際に作成する画面の詳細

③②を行う上での注意点

では、まずは①から解説します

① IF文を作成するメニューの場所

まず「列の追加」タブの「カスタム列」をクリックします

すると次のような画面が開きます

②IFを実際に作成する画面の詳細

まず、この「カスタム列」画面の解説を3か所に分けて行います

・新しい列名➡IF文を使用して新たに作成する列の名称を記入

・カスタム列の式➡「=」から右にIF文を記入

・<<挿入➡上の「使用できる列」で指定された「列」を式の中に挿入

3番目の「<<挿入」の使い方については、以下、詳細に解説します

まずは上の「使用できる列」の中から該当する「列」をカーソルで選択します

次に画面右下の挿入ボタンを押すと、下のGIF画像のように前述の「カスタム列の式」の欄に選択された列が挿入されます

この「カスタム列画面」の3か所について解説したところで、実際にIF文を記入していきます

IF文の構文は以下の通りとなります

【if 条件式 then 条件式に合致する場合 else 条件式に合致しない場合

内容はVBAでIF文を書く場合と、ほぼ一緒です

最後に「End IF」を付けないところだけが違います

実際の消極パターンを書いた画面は、次の通りとなります

【if 条件式 then 条件式に合致する場合 else 条件式に合致しない場合

上の構文に、消極的パターンを当てはめて数式が書いてあります

if [地域]=”アメリカ” then [売上金額]*1.1 else [売上金額]*1.05】

③②を行う上での注意点

ここで1点、注意点があります

上の画像の下に「トークン Eof・・・」なるエラーが出ています

これは、式の構文の中に大文字が入っているからです

式の構文は、下のテキストのように、全て小文字で記入するようにしてください

IF、THEN、ELSE ➡ if、then、else

では、正しく数式を記入したところで下のOKボタンを押します

そうすると、Power Queryエディター画面に新たな列が挿入されます

では、念の為に新たに挿入された列が正しいかどうかをPower Queryエディター上で確認します

まず「売上金額」と「予測式_消極」の列をカーソルで入れ替えます

次に上の両列をカーソルで選択したまま「列のタブ」の「標準」から除算をクリックします

すると、次の様に「(左側)予測式_消去」÷「(右側)売上金額」の結果が出力されます

「標準」機能の計算は、列の位置が左にあるものから自動的に計算されてしまうので、列の位置を入れ替えることを事前に行いました

さて、出力結果は次の通り、正確に出力されていたので「積極パターン」の解説に移ります

積極パターン

まず、積極パターンの内容を振り返りましょう

・地域がアメリカ ➡ 15%増加(A

・製品がトラック、且つ、地域がヨーロッパ ➡ 10%増加(B)

・上記2つ以外 ➡ 5%増加(C)

では上記のA~Cを、「カスタム列を作成する画面」に当てはめると次のような式になります

まず、前述のA( 地域がアメリカ ➡ 15%増加 )はの式のように、1.の消極パターンと同様の書き方です

【if [地域]=”アメリカ” then [売上金額]*1.15】

次にBの箇所を書き始めるところが1.の消極パターンと違います

「else」の後にそのまま2つ目のIF文を「AND」を交えて、の式のように書きます

【else if [地域]=”ヨーロッパ” and [製品別]=”トラック” then [売上金額]* 1.1】

そして最後にCを「else」の後に書きます

else [売上金額]*1.05

上の3つの数式をつなげると次のようになります

if [地域]=”アメリカ” then [売上金額]*1.15 else if [地域]=”ヨーロッパ” and [製品別]=”トラック” then [売上金額]* 1.1 else [売上金額]*1.05

「カスタム列を設定する画面」の下のOKボタンを押すと、次の様に出力されます

1.の消極パターンでも行ったように、検算を行うと次のようになりました

 Bの 条件【製品がトラック、且つ、地域がヨーロッパ ➡ 10%増加】もしっかり反映されています

 上のPower Queryエディタの内容をエクセルシートに読込処理を行うと、次の画像のようになります

<まとめ>

今回は、IF文を使用した列を追加する方法を解説しました

IF文の構文の書き方はVBAとほぼ同じになっており、次の通りとなっています

【if 条件式 then 条件式に合致する場合 else 条件式に合致しない場合

 IF文を更に組み合わせる場合には、上記の「else」の後にまたIF文を追加すればOKです

 尚、構文を間違えていたり、前述した大文字で記入を行ったりすると 「トークン Eof・・・」なるエラーが出てしまいますので注意が必要です

 ちなみに、正確に数式を記入できている場合には、以下のメッセージが画面下にでます!

今回の解説は以上です

この記事の内容をマスターしたら、M言語を使用した「カスタム列」にもぜひチャレンジしてみてください!

https://analytic-vba.com/power-query/m-code/mcode-begin-custom/
https://analytic-vba.com/power-query/m-code/mcode-begin-custom/

長文に最後までお付き合い頂き、誠にありがとうございました

参考までに、今回の解説で使用したデータと完成したデータを添付しておきます

アイコン

上級10回目 24.44 KB 9 downloads

...

にほんブログ村 資格ブログ ビジネススキルへ
にほんブログ村 IT技術ブログ VBAへ

にほんブログ村