タグ別アーカイブ: 分析

散布図&近似曲線&相関係数の表示

散布図は数あるグラフの中でも相関関係を見るのに一番適しています

そして、散布図がダッシュボード内にあれば数字の深い洞察が行えるようになります

今回は散布図の作り方だけでなく、相関関係を解釈し易いように「近似曲線を追加」する方法と相関係数の計算方法を解説します

散布図

散布図はX軸とY軸の2つの軸から構成されます

上の画像では、X軸に身長、Y軸に体重を配置しています

ここで、散布図ならではの注意点があります

X軸とY軸ともに数字は「集計しない」を選択しておきましょう

近似曲線の追加

表示

近似曲線の追加は下の画像の黄色く印をつけた箇所から行います

近似曲線はPower BIでは「傾向線」という名前になっています

上の画像の「追加」をクリックすれば、近似曲線が散布図に追加されます

線の種類や色を調整したい時には下の画像の箇所にて調整します

数式

数式を表示したい時には新たにメジャーを作成します

メジャー内ではLINESTX関数を使用します

LINESTX関数でテーブルを作成すると、下のようなテーブルが作成されます

myValue =

VAR myTable=SUMMARIZE(‘ラグビー’,’ラグビー'[名前],”X”,SUM(‘ラグビー'[身長]),”Y”,SUM(‘ラグビー'[体重]))

VAR myData=LINESTX(myTable,[Y],[X])
Return myData

LINESTX関数で返される値には近似式(ax+b)の「Slope1:係数a」と「Intercept:定数b」が含まれます

こちらの2つの値をメジャーの中で成形する形になります

尚、LINESTX関数を使用前には「SUMMARIZE関数」でメジャー内にテーブルを事前に作成して変数に格納しておいてください(今回の場合はmyTable)

SUMMARIZE関数の文法は

SUMMARIZE(テーブル名,グループ化する切り口,列名1,集計式1・・・となります)

ここまでで、ax+bの「係数a:SLOPE1」と「定数b:Intercept」を求めることができました

それでは最後にこちらのSLOPE1とInterceptを数式の形で成形できるようにします

数式の形で成形するには変数を使用して、SLOPE1とInterceptを抜き出しておきます

myValueY =

VAR myTable=SUMMARIZE(‘ラグビー’,’ラグビー'[名前],”X”,SUM(‘ラグビー'[身長]),”Y”,SUM(‘ラグビー'[体重]))

VAR myData=LINESTX(myTable,[Y],[X])

VAR Intercept=SELECTCOLUMNS(myData,[Intercept])

VAR Slope=SELECTCOLUMNS(myData,[Slope1])
Return

FORMAT(Slope,”#.###”) & “x” & FORMAT(Intercept,”+#.###;-#,###”)

相関係数

*2023年4月30日に「相関係数」の部分は訂正します

Power BIのバージョンアップ後にクイックメジャーで相関係数を算出すると正しい値が表示されません

ですので、以下のメジャーの式を修正しながらご使用ください

式の中で「X」と「Y」が出てきます

XとYとは下のグラフの横軸(X)と縦軸(Y)のことになります(R2は相関係数を二乗した値のことになります)

*修正要の箇所:テーブル名/’ラグビー’、列名1/’ラグビー'[身長]、列名2/’ラグビー'[体重]

相関 =

//X平均

var __muX =calculate(AVERAGE(‘ラグビー'[身長]))

//Y平均

var __muY=calculate(AVERAGE(‘ラグビー'[体重]))

//分子

var __numerator  =  sumx(‘ラグビー’,(‘ラグビー'[身長]-__muX)*(‘ラグビー'[体重]-__muY))

//分母

var __denominator=  SQRT(sumx(‘ラグビー’,(‘ラグビー'[身長]-__muX)^2)*sumx(‘ラグビー’,(‘ラグビー'[体重]-__muY)^2))

return

divide(__numerator,__denominator)

***以降の記事は無効***

相関係数はクイックメジャーで計算し、「カード」で表示します

まず「新しいメジャー」の右横のマークをクリックします

クイックメジャーの画面が開いたら計算の種類を選択します

今回は「相関係数」を選択します

計算の種類を選択したら、上の散布図のX軸とY軸と同様の設定を行います

クイックメジャーの設定後は、新しいフィールドが設定されます

**************

<まとめ>

散布図は数字の背後にある相関関係を明らかにするのに有効なグラフです

ダッシュボード内の仲間に散布図を加えることで、数字の解像度がグッとあがります!

そして、近似曲線を追加することで散布図の背後にある相関関係の解釈を行い易くなります

ぜひ、深く数字を分析したい時にはこの散布図と近似曲線を有効活用してください

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

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

【M言語実践】顧客の2回目のリピート率を分析する方法

 パワークエリはとても便利ですが、M言語となると使い道がよく分からないと思います

今回は、M言語を使用した実践的な分析手法を紹介したいと思います

私は以前、EC通販会社に勤めていました

 EC通販では顧客の顔が見えないので、データからどういう顧客がいて・どういう行動をしているのか・を分析する必要があります

様々な分析を行いましたが、指標として一番重視していたのが「顧客の2回目リピート率」です

顧客の2回目のリピート率が何故重要なのか?

 これには様々な理由がありますが、一番の理由は2回目のリピート率を少しでも改善すれば、売上が長期的に増加するからです

読者の方でも外食をした際に「あの店には2度と行かない・・・」という経験をした方も多いと思います

 逆に同じ店で2度食事をして、その店に慣れてくると3回目、4回目とリピートする意欲する気が高くなると思います

 ビジネスでも「2回目のリピート」というハードルをクリアすることの意義はとても大きいのです

ただし、普通にエクセルで2回目のリピート率を算出しようとするとかなり面倒です

私は一時期、IF関数で注文回数を付与して、2回目の注文だけシートを分けたりしていました

ましてや、2回目のリピートの有無別に顧客分析をしようとするとかなりハードルが高いです 

ところが、M言語を使えば2回目のリピート率は意外と簡単に算出できます!

ポイント

今回使用するデータは会員別の注文データです

 上の画像では2回目の注文があった会員に黄色の印を付けましたが、2回目の注文があった会員もいれば、そうでない会員もいます

ここからまず、会員番号毎に注文回数を付与します

そして、上の画像の表から次のような表を作成します

上の画像では、その前の画像の表から注文回数を「1回」に絞り込んであります

結果として、会員番号の列は会員番号が重複なく並んでいます

そして「2回目判定用」なる列が追加されています

こちらは注文回数の差分です

こちらの差分は注文回数を「1回」に絞り込んだ場合にはになります

この列が1の会員は2回目の注文があった会員です

 つまり、「2回目判定用」の列の合計を「注文回数」の列の合計で割れば2回目のリピート率が出るという仕掛けになります

(注)尚、上記の画像のデータ以前に注文履歴は無いという前提で解説を行わせて頂きます。ですので、本当は初回の注文ではないのでは?という疑問は持つ必要はありません

注文回数の付与

ポイントで解説した通り、まずは会員番号別に注文回数を付与します

こちらについての詳細については、過去の記事をご確認をお願いします

大きく分けて2つ行うことがあります

1つ目は、グループ化です

会員ID別(会員番号別)に「すべての行」でグループ化を行い、会員ID別にテーブルを作成します

次にカスタム列・作成画面にて、テーブル別にM関数/Table.AddIndexColumnを使用して連番を付与します

すると、注文回数が連番で付与されます

注文回数の差分の算出

こちらについても詳細は過去の記事をご参照願います

この差分を算出するには、パワークエリでは本来は困難な「セル単位」や「行単位」の処理に踏み込む必要があります

ポイントとなるのは、こちらも「連番」です

上の画像のように連番をつけると、連番と画面左の行番号とが対応するようになります

ちなみに、M言語は0ベースなので、実際にM言語で使用する1行目は0になります

ここから波括弧:{}を使用します

波括弧は行番号を表します

例えば、注文回数{0}とした場合には、注文回数列の1行目のデータなります

この波括弧と連番をうまく組み合わせることで、注文回数の差分を算出します

上の画像にて黄色の印を付けた波括弧内は、注文回数の各行の1つ下の行番号の値になります([注文回数]の前のDataは前ステップの名称になります)

つまり上の画像内では、注文回数列をA列だとすると<=A3-A2>と同様の計算が行われています

ちなみに、try~otherwiseとすることでエラーを回避しています

注文回数の絞り込み

 上記まで行ったところで、エディタを確認すると以下の画像のような状態になっています

ここから注文回数の列にフィルターをかけます

こうすれば注文回数の列は「1」のみ、2回目判定用の列は0か1になります

ここまでくれば、後は各列を合計して2回目のリピート率を算出するだけです

合計にはM関数/List.Sum関数を使用します

 上の画像では、2つの合計値を/で割り算をすることでリピート率を算出しています

%の表示にしたい場合には、List.Sum関数でリスト化した内容をテーブル化した上で%に型式を変えます

<まとめ>

今回はM言語の仕組みを使用して、2回目のリピート率を算出しました

2回目のリピート率を算出するのに、主に2つのM言語の技術を活用しました

1つ目はグループ化を通じて各グループ毎に連番を付与する仕組みです

2つ目は注文回数の差分を連番と波括弧を組み合わせて算出する仕組みです

 この2つの技術を通じて、注文回数と2回目の注文有無を0か1で表現できるようにしました

 今回は2回目のリピート率を算出しましたが、本当に大事なのは2回目のリピートがあった会員とそうでない会員との違いは何かを調べることです

 今回作成したクエリを複製して途中のステップを削除すれば、会員番号別に注文の有無が表示できます

 他のデータを会員別に紐づければ、2回目の注文があった会員とそうでない会員の購入している商品の違いなども調べることができるはずです

 更に注文回数の差分を抽出する仕組みを応用して、初回から2回目までの日数なども調べることができます

M言語が本当に有効なのはこういった複雑な分析が必要な場面だと思います

 特にグループ化から連番を付与する仕組みと差分を算出する仕組みは、分析作業にて使う場面も多いと思いますので、しっかり活用できるようにしておきましょう!


にほんブログ村

7月17日勉強会_報告

先週の7月17日にモダンエクセルの勉強会を行いました

多くの皆さんにご出席頂き、誠にありがとうございました

①主催者スピーチ:M言語と分析術について

M言語を活用した操作にて、顧客の2回目のリピート率を簡単に集計する方法を解説しました

②パワークエリ・高速化術

今回は先日、Akira Takaoさんからご紹介いただいたTable.Addkeyを簡単に解説しました

③質疑応答

 勉強会後、参加者の方から「パワークエリやM言語は使いこなせば便利なのはわかっているけど、皆さん試行錯誤されているのですね」という声を頂きました

やはりモダンエクセルはまだ歴史が浅いので、操作方法等ががまだ浸透していないところがあります

 例に挙げれば、今回も話題に出た「パワークエリとxls型式が相性が悪いため、xlsの型式のファイルをxlsx形式に保存し直す必要性」等です

勉強会の意義は、そんな実際に活用してみての気づきが共有できる点だと思います

今後も継続して開催していきます!


にほんブログ村

モダンエクセル・勉強会_0717

7月10日(土)に引き続き「モダンエクセルを実際に使いこなしている方々」にお集まり頂き、「モダンエクセル活用の場を広げる」ための意見交換をしたいと思います!

・主催:Excellent仕事術/当ブログ管理人

・日時:2021年7月17日19時半~20時半(今回は60分です)

・場所:オンライン(ZOOM)

・内容:①主催者発表/約20分、②意見交換及び質疑応答

①主催者発表:パワークエリ/M言語を使用した分析術について

・費用:参加費用は無料です

・申込:以下参照

-記事下のフォームに記入して頂いた後に、ZOOMのURLを送ります

*すぐにURLを送れない事もありますので、その点はご容赦ください

– 先着20名まで

-参加者はモダンエクセルを使いこなしている方に限定させて頂きます

-勉強会当日は、基本的にマイクはオフにして頂きます(オンにする際は、こちらから指示します)

*録画はご遠慮願います、後、途中の入退出もご遠慮ください(やむを得ない事情が発生した場合には主催者にご連絡ください)

*基本は顔出しでお願いします

-頂いた個人情報について、今回開催する勉強会の連絡等の目的には使用せず、厳重に管理致します

参加申し込みの程、お待ちしております

尚、勉強会に関する問い合わせはこちらからお願いします


にほんブログ村

【分析】Power Queryで手軽にABC分析

 

 ABC分析は「重点分析」とも言われ、分析手法の中でも最も基本的なものです。ところが、実際にエクセルでABC分析用の表作成を行おうとすると「データのバケツリレー」の手間を要します。データのバケツリレーは「列から列」へと続き、数式を細かく設定する手間もかかります。今回紹介する方法であれば、Power Queryエディタ画面(以降、エディタ)でシンプルに処理していけます!

以下が、通常のABC分析の表を作成するときの手順です

①重点管理する項目(金額など)を降順で並び替え

②①を累計で表示 ➡「=」から始まる数式を入力

③②を比率に変換➡ 事前に累計の値を算出 ➡累計の値で各行を割り算

④③をランク付け➡IF式を入力

もし、データの追加などがあったら、①~④の修正作業が必要です

もちろん、データ自体が変われば、①~④の更新処理が必要です

Power Queryであれば、一度、クエリを作成してしまえばデータ更新時に「ソース変更」「クエリの更新」をクリック処理をするだけで済みます

今回使用するデータと行いたいこと

使用データ

今回は、下の画像にある2つの列から構成されるデータを使用します

行いたいこと

前述の使用データの各行に、次の内容でランクを付けます

A ➡全体・販売個数の50%以下

B ➡ 全体・販売個数の80%以下

C ➡ 全体・販売個数の80%超

今回のポイント

今回使用する主な技術は、主に以下の1~3の内容です

1と2は過去に紹介した内容です

最後の3.List関数が今回の一番のポイントになります

1.並び替え/降順

まずは元データを降順で並び替えます

2.条件列の追加

「列の追加タブ」の「条件列」メニューでランク付けを行います

3.List関数

このList関数で累計値と比率を計算します

List関数は2種類使用します

まず1つ目は、List.Select関数です

リストから条件に沿う値を抽出し、リストを再作成します

書き方は次の通りです

List.Select(リスト,条件)

上の画像では、1~4の値からなるリストから、2超の値を抽出した上でリストを再作成しています

2つ目は、List.Sum関数です

こちらの関数は、直感的にも分かり易いと思います

List.Sum()の丸括弧の中に入れたリスト内の各値を合計します

但し、丸括弧の中に入るのはあくまでリストであり、列ではないことに注意しましょう!

では、今回のポイントを紹介したところで本格的な解説を始めます

尚、解説はエディタ内のみの内容になります

並び替え

まずは、エディタ内で販売個数を降順で並び替えます

累計値

算出ロジック

List関数を組み合わせて累計値を計算するのが、今回の記事の最大ポイントです

累計値を計算するロジックについては、次の画像を基にして解説します

通常のABC分析では、N行目のとN-1行目の累計値の合計を計算します

今回の記事では、上の画像のようにⅰ)N行目の値以上の値のリストを作成、ⅱ)ⅰのリストを合計、というⅰ)⇒ⅱ)の流れで行います

List.Select関数

まず、カスタム列・作成画面で「販売個数」列を挿入してA列を作成してみます

この処理だと下の画像のように、販売個数と同じ列ができるだけです

では、カスタム列・作成画面で前ステップ名(カスタム列を作成するステップの1つ前)を入れてみましょう

この段階では、前述の「降順に並び替えられたステップ」が前ステップです

下の画像が、前ステップ名を入れたカスタム列・作成画面の画像です

上の画像の内容でカスタム列を作成すると、次の画像のように各行にてリストが作成されます

このリストの中味は、一律に販売個数の列の内容です

この各行のリストから、前述のロジックの通り「各行の値以上」のリストを各行に再作成していきます

こちらのリストの再作成は、List.Select関数で行います

条件式は、一部、過去の記事で解説したカスタム関数の内容を使います

上の画像のように、「(x)=>」にてxを変数として宣言し、「x>=」を条件式とします

この内容でカスタム列を作成すると、行毎に作成されるリストの内容が変わっています

例えば、上の画像のように2番目の行であれば。2つの値しかリストの中にありません

では、前述の紹介したロジックの通りにリストが再作成できたので、List.Sumの解説に移ります

List.Sum関数

では、List.Select関数で作成したリストをList.Sum関数で合計し、累計を作成します

上の画像のようにカスタム列・作成画面に数式をセットしてOKボタンを押すと、累計の列がエディタ内に追加されます

比率

では、累計を計算したので「比率 =各行の累計値÷販売個数の合計値」 を計算します

販売個数の合計値の算出には、前述のList.Sum関数を使います

ちなみに、上の画像の「追加されたカスタム」とは前ステップ名です

ランク付け / 条件列

では、最後にランク付けを行います

ランク付けは「列のの追加タブ」にある「条件列」で行います

記事の冒頭にあったように、ランク付けの条件を「条件列の追加」画面に設定します

比率が0.5以下であれば ➡ A

比率が0.8以下であれば ➡ B

とします

上記の条件以外はCとして出力するようにします

この条件列を作成すれば、ABC用の表作成は完成です

<まとめ>

今回は、Power QueryでABC分析の表を作成しました

一番のポイントは、List関数を2つ組み合わせて「累計」の列を作成する点です

List関数の中には、常に「リスト」を指定します

M言語では、「リスト」と「」は明確に違います

今回の内容では、List関数の丸括弧の中は「ステップ名[列名]」で指定しました

この「ステップ名」を指定する場合があることを強く意識しておけば、後はそれ程難しい点はありません

 私は以前、企画の仕事をしている時にABC分析表を毎月作成しておりましたが、面倒で仕方ありませんでした

 今回、紹介したPower Queryの仕組みであれば、一度クエリを作成してしまえば、毎月ほぼ「ソース変更」「クエリ更新」をクリック処理で行うだけで済みます

分析で一番大事なのは、数字を解釈することです

 今回紹介した仕組みで、表作成を効率化して有意義な分析を行えるようにしていきましょう!

次回からはRFM分析の解説をはじめます!

https://analytic-vba.com/power-query/analysis/recency-group/
にほんブログ村 資格ブログ ビジネススキルへ
にほんブログ村 IT技術ブログ VBAへ

にほんブログ村

【分析】RFM分析の「R」を集計する

RFM分析は顧客を次の3つの指標で分類して、顧客別に施策を講じる手法です

Recency ➡ いつ?、Frequency ➡ 頻度?、Monetary ➡ いくら?

今回は、Recencyを顧客別に集計する方法を解説させて頂きます

 このRecencyとは、会員IDが含まれる注文データ内に出現する「顧客ID別の最終注文日」のことです

 まず何故、このRecency/最終注文日を分析するかという話しをしたいと思います

 例として最終注文日が1日前の顧客グループと、1年前の顧客グループを比較して考えて見ましょう

 最終注文日が1日前の顧客グループであれば、集計日段階では「稼働」の状態であり、こちらからアクションをしなくても再度リピートしてもらえる可能性が高いです

 一方、1年前の顧客グループに対しては「休眠」している可能性が高く、何らかのアクションをしないと、再度リピートしてもらえる可能性が低いです

 このように、顧客の最終日がいつか?によりアクションをすべき内容が違ってくるのです

今回はこの「最終注文日」をPower Queryでサクッと集計する方法を解説します

 こちらの「最終注文日」を集計する処理は、ピボットテーブルでも集計は可能ですが、Power Queryで行うと大きなメリットがあります

 Power Queryでは集計内容をテーブルに直接読込を行うことができるため、直接データを編集することができます

 一方、ピボットテーブルだとシートの別な場所にコピーしないとデータの編集が行えないのです

今回の使用データと行いたい事

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

注文データは、注文日が2021年1月から3月までの期間で集計されています

 ですので、注文データ内では1つの顧客IDに対して、上の画像のように複数の注文日が存在したりしています

 これらの「1顧客IDに対して複数存在する注文日」の中から「最終注文日」を顧客IDごとに集計することが今回行いたい事です

 例えば、上の画像であれば「顧客ID / CO6324」の最終注文日「2021/03/12」を集計します

最終注文日の集計

では、実際に使用データから最終注文日を顧客ID毎に集計します

解説は、エディタ上から始めます

画像に alt 属性が指定されていません。ファイル名: エディタ-2.jpg

 こちらの集計処理は、過去の記事でも紹介したグループ化により一瞬で終了します

まずは「ホーム」タブの「グループ化」をクリックします

するとグループ化・画面が開くので、次の画像のように各項目を設定します

グループ化項目:顧客IDの列

新しい列名:最終日

操作:最大

列:注文日

この上記の設定により、顧客ID別に最大/最終の注文日が集計されます

 例えば、3つ注文履歴がある顧客ID:C06234であれば下のGIF画像のように「2021/03/12」のみが集計されます

<まとめ>

 今回は、グループ化機能により注文データから顧客ID毎に最終注文日を集計しました

 グループ化・画面にて集計方法(操作)を「最大」で指定すれば、瞬時に最終注文日を集計できます

尚、「最終注文日」を集計した後は「最終注文日からの経過日数」を集計します

こちらについては、起算日を指定する必要があると思います

起算日の指定方法は主に2つあります

本日の日付を指定するM関数を使用する ➡ DateTime.LocalNow

・カスタム列・作成画面で日付を指定する ➡ #date(年,月,日)

今回は、#dateで日付を指定してみます

 上のGIF画像ではカスタム列・作成画面にて[最終注文日]から2021年5月14日の日付を差し引いています

 ちなみに、新たに作成された列は小数点が付いているので、後で整数に直す必要があります

  

 顧客ID別に「最終注文日からの日数」を集計し、過去の記事で紹介したABC分析の内容と顧客IDと紐づければ、顧客ランクとRecencyの関係性を分析することができます!

ぜひ実践してみてください!

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

にほんブログ村

XxXLookup関数で集計上手になる!

読者の皆さんがこれまで使用したエクセル関数の中で、一番使用頻度が高かったのはどの関数でしょうか?

多くの皆さんはVLOOKUP関数と答えるのではないでしょうか?

ところが、XLOOKUP関数の登場により、関数の使用シーンがこれから大きく変わっていきそうです

まだ使用できるエクセルバージョンは少ないかもしれませんが、それだけXLOOKUP関数の登場はインパクトがあります

特にXLOOKUP関数と他の関数を組み合わせることにより、データ集計の効率を格段に向上させることができそうです

今回は、XLOOKUP関数同士を組み合わせた例を2つ紹介します

どちらの例も、表を2次元で処理できるので、利用シーンが多そうです

①マトリクス表から2つの条件に合致するものを抽出する

条件を2つ(条件①部門x条件➁四半期間)をリストで指定し、2つの条件に一致する値を抽出する

➁マトリクス表でランク付けをする

事業の売上額と成長率、在庫商品の在庫額と回転率、などなど二次元でランク付けすることはよくあります

ところが、これまでは単に関数を使用するだけでは、ランク付けは自動ではできませんでした

尚、これからの解説は既にXLOOKUP関数を使用したことがある人を主として想定しています

但し、そうでない方もサンプルファイルをダウンロードすることで、そのままサンプルファイルの使用例を他の目的に利用していくことも想定しています!

1.そもそもXLOOKUP関数とは?

2つの事例を紹介する前に少しXLOOKUP関数について簡単におさらいをしておきましょう

サンプルファイルでは1シート目の内容です

サンプルの内容は部門毎に対応する部門長を別表から抽出するものです

XLOOKUP関数も、VLOOKUP関数と同じように検索値を基にして表からデータを抽出します(事例では北海道を検索値として、部門長の木村を抽出)

但し、VLOOKUP関数で行っていたような

「○○から右に何番目」

といった列数の指定が無く、検索する範囲(サンプルの部門)、戻り範囲(部門長)を指定しするだけです

つまり、 「○○から右に何番目」 の縛りがなく、検索値が参照表の左に無くてもいいし、列方向でなく行方向でもデータを抽出できます

引数は以下のような形で指定します

=XLOOKUP(検索値、検索値範囲、戻り範囲、【省略可】)

2.マトリクス表から2つの条件に合致するものを抽出する
XLOOUP関数の3番目の引数、戻り範囲にXLOOKUP関数を入れるのがポイントになります

仮に戻り範囲にXLOOKUP関数を入れなければ、いわゆるスピる(値があふれ出す)状態になります

以下が検索の軸を部門にし、戻り範囲を表の全範囲にした場合です

列方向でスピります

・=XLOOKUP(I3,B3:B9,C3:F9)*3番目の引数を全範囲

以下が期間を軸に、戻り範囲を表の全範囲にした場合です

行方向でスピります

・=XLOOKUP(I4,C2:F2,C3:F9)*3番目の引数を全範囲

この2つのスピりの交点が求まれば正解の値です

ですので、以下のように3段階でXLOOKUP関数を組み合わせます

A.部門の検索を行うXLOOKUP関数を作成

B.但し、3番目の引数に期間を検索するXLOOKUP関数を入れる

C.3番目の引数になるXLOOKUP関数は”期間の選択”に備えて戻り範囲=全範囲

最終的にはこのようになります

=XLOOKUP(I3,B3:B9,XLOOKUP(I4,C2:F2,C3:F9))

数式の内容はサンプルファイルにて、実際に入力されている内容を確認してくみてください

3.マトリクス表でランク付けをする

2.で行ったXLOOKUPによる関数では、4番目以降の引数を省略していました

ここで、5番目の引数を登場させます

VLOOKUP関数でも4番目の引数で検索方法を指定しています

FALSE=完全一致

TRUE≒完全一致

XLOOKUP関数では以下のように検索方法を指定できます

0⇒完全一致

-1⇒検索値の次に小さい値

1⇒検索値の次に大きい値

今回使用するの-1、検索値の次に小さい値です

以下の表で言えば、もし売上が30なら30より小さい値の0が該当し、前期比が15%であれば、10%が該当します

つまり、2.で行ったXLOOKUP関数の組み合わせに、検索方法-1を組み合わせれば2次元でのランク付けは、簡単に自動化できるのです

式は以下のようになります

=XLOOKUP(C5,$H$4:$H$6,XLOOKUP(D5,$I$3:$K$3,$I$4:$K$6,,-1),,-1)

企業ではABC分析の延長で、2つの変数(例:売上、利益率)で事業や商品を評価する機会が多いので、このXLOOKUP関数の組み合わせを行う機会は多いと思います

<まとめ>

今回は大きく分けて2つの事を解説しました

ⅰ)XLOOKUP関数を行列、双方向で組み合わせる(スピるの組み合わせ)

ⅱ)XLOOKUP関数の検索方法を工夫し、自動でランク付けをする

このⅰ)ⅱ)ができれば、データ集計がとても楽に行えます

ぜひ、有効活用していきましょう!

このブログではFILTER関数など、XLOOKUP関数と同じ新たなタイプの関数の解説も行っていますので、そちらもぜひ参照してみてください

尚、XLOOKUP関数が使えるエクセルバージョン(2020年9月19日時点)は限られており、OFFICE365ユーザー向けとなっています

2019バージョンユーザーなどは使用できないので、その点はまだ不便ではあります

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

にほんブログ村

ソルバーによるシミュレーション~設定~

こんにちは、Excellent仕事術ガッツ鶴岡です

さて、あなたの周りで数字に強いと言わている人はどんな人でしょうか?

「数字が頭に入っている」

「計算が早い」

この数字が強い人の定義には、様々な意見があります

 一つだけ確実に言える事は、組織の目標達成に向けたシミュレーションができている人は最強に「数字に強い人」です

「目標達成には商品Aを最低でも○○円以上販売することが条件」

「仮に利益率が□□%以下だとした場合には・・・」

 しかも、前提条件や制約条件を「数字」をまじえて言われると凄い説得力があります

 実は、エクセルにはソルバーという強烈なシミュレーションマシンがあるのをご存知でしょうか?

意外とあまり知られていないようですが、ソルバーはとても便利なんです。

 ソルバーを使いこなせば、プレゼンや会議中に、その場で複雑なシミュレーションを実施することができます

そして、その活用機会も、給与昇給額、商品別必要生産数など様々な分野であります!

しかも操作はとても簡単なんです!

ぜひ、ソルバーを使いこなして「数字が強い」人と言われるようになりましょう!

 これから、実際にソルバーを使用してどの程度のシミュレーションができるのかを見て頂きます

 ソルバーはマクロでも動かすことができます

「実演」は、マクロで行います

実演する、シミュレーションの内容は次の通りです

①今期の売上総利益が「675」⇒来期は「1000」にしたい

②部門がA、B、Cの3部門があり、それぞれ利益率違う

「利益率が一番高いA部門」の売上増加率は「?」%必要か?

シミュレーション実施前のエクセル画面

では目標の「1000」を上の画面の左上①に設定し、「目標・売上総利益」ボタンを押してソルバーを実行します

 上のGIFでは見えていませんが、マクロを実行した後にソルバーが起動しています

 しばらく計算に時間を要しますが、計算が終わった後はスピードメーターの針が振れているのが分かると思います

 上の例では何も制約条件を設けていませんが、実際にはA部門の増加率は”50%まで”、などの条件を追加できます。

では、本格的なソルバーの解説に入ります!

今回は、まずソルバーをご自身のエクセルで活用できるようにしましょう!

 通常のエクセル画面では、ソルバーは使用できるようになっていませんので設定が必要になります

 ソルバーの設定は、次のショートカットキーを押すところから開始になります!

  “Altキー+TI”

このショートカットキーを押せば次の画面が出てきます(ちなみにIはアルファベットのIです)

*他にはファイルタブからオプションを選択してから設定する方法もあります)

ソルバー設定

ソルバーアドインにチェックを入れてOKボタンを押しましょう

そうすれば、データタブの下から”ソルバー”が選べるようになっています

では、次回はソルバーを使って簡単なシミュレーションを行ってみましょう

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

にほんブログ村

ソルバーによるシミュレーション2~基本操作~

こんにちは、Excellent仕事術ガッツ鶴岡です

前回はエクセル画面にソルバータブを設定しました。

ところで、ソルバーとは何でしょう?

英語では、「解決」という意味になります

今回は”ソルバーとは何か”について触れた後、簡単な操作を実際にしてみましょう!

簡単な操作をしてみた後、「ソルバー」の意味を実感して頂けると幸いです!

1.ソルバーとは何か?

まずはソルバーの画面を見てみましょう!

データタブから「ソルバー」をクリックしてみましょう

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

大きく分けて3つの構成になっています

 ①シミュレーションの目的設定

 ②①を達成する為に変動させる「値」及び「値範囲」の設定

 ③①を達成する際の制約条件の設定

つまり、③の設定条件を設定した上で、②の値や「値範囲」を動かしながら➀の値をシミュレーションしようということになります

ここまでの解説で、ソルバーについてのイメージが少し沸いてきましたでしょうか?

2.実際に操作する

では、2つのセルを乗じた値を最大化するシミュレーションを行いましょう

下の図のようにB8セル(茶色)に、B3(黄色)とB4(緑)のセルを乗じる数式(B3*B4)を入れておきます

上の図でB8セル(茶色)が1.で解説したシミュレーションの①目的になります

では、こちらを実際にソルバー画面に設定します

目標値は「最大」「最小」「指定値」とありますが、今回は最大で設定します

次に、B3:B4(黄色~緑)を1.②の変動する値範囲として「変数セルの変更」に設定します

1.①目的と②変動させる「値」「値範囲」を設定したところで、最後に制約条件も作成します

制約条件については、次の画像の箇所から設定します

追加をクリックすれば下の画像のようなダイアログボックスが開きます

今回は、変動する値範囲それぞれに「4以下」という制約条件を設定します

➀~③を設定するとソルバーの設定画面が以下のようになっているはずです

ではソルバーの解決ボタンをクリックしましょう!

変動する値の制約条件に応じた16(4x4)が算出されましたでしょうか?

今回の解説は以上になります

では次回からは他の条件でソルバーを活用してみましょう!

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

にほんブログ村

ソルバーによるシミュレーション3~実践編・整数設定~

こんにちは、Excellent仕事術ガッツ鶴岡です

前回はソルバーの基本的な操作を行いました

今回はもう少し実践的な方法に取り組んでみましょう!。

 今回は、ソルバーで解決した値が実際のビジネスで使用できるように、整数にて「最適な解」を出力する方法を解説します!

 実は、実践的にソルバーを使うにあたっては「符号」の問題もクリアする必要があります

この最重要ポイントについては、後述する事前準備・解説の②の中で行います

今回は下の図の課題に取り組みます

・購入単価が違う商品A~Cを組み合わせて購入します

・購入に当たっては、購入金額が予算を超えないようにします

 では本題に入る前にソルバーを実戦的に活用する為の必要知識として、プラスで下の①②の2点を解説します

➀SUMPRODUCT関数

この関数を使うと、本来は長くて複雑な数式の設定が必要なところを2つの引数を指定するだけで済ませることができます

下の画像の右側、購入金額の欄には、左表の商品A、B、Cそれぞれの【価格x数量】の合計を数式で表示する必要があります

この場合、本来は購入金額(価格1X数量1+価格2X数量2+・・・)を計算するのに、延々と数式を足す作業が必要となります

今回はSUMPRODUCT関数を使用して、図の左の価格欄と数量欄、それぞれの範囲だけを指定すれば済むようにします

②^2

これは2乗するという意味です

今回の課題では、下の図のG4セルに【差額:予算-購入金額】の「2乗」を入力します

何故、2乗をする必要があるかという点について以下、実際の例(シナリオ1と2)で解説を行って行きます

今回の課題では差額を「目的」として設定し、差額を最小化する値範囲を設定します

・シナリオ1

*予算金額:5,000,000➡購入金額:5,000,0000➡差額:0

・シナリオ2

*予算金額:5,000,000➡購入金額:5,000,0002➡差額:-2

この場合、シナリオ1が本来は正解です

ただ、差額の符号をマイナスでも取りうることができると、シナリオ2の方が差額が小さいので、シナリオ2の差額-2が正解になってしまいます

ですので、-1x-1=1、と-2x-2=4という風に2乗することにより、「目的値を絶対値」に変換して計算できるようにしておきます

では準備の2点を説明したところで本題に入ります

1.制約無しでソルバーを動かしてみる

まずは、前述した数式を2つセットしましょう

②の(予算ー購入金額)の2乗が目的の値になります。これを最小値にする商品AからCの購入数量の組み合わせを求めます

実際のビジネスでは、数量を少数点にした値では購入しませんよね?

実際には役に立たない結果が出てしまっています

2.制約条件に整数を指定する

整数の指定の仕方はとても簡単です

まず制約条件の追加を押してください

実は次の画面でINTという指定をするだけで整数指定ができます

では下の画像のように整数指定できているのを確認できたら解決ボタンを押しましょう!

結果はきちんと整数になっています

今回はこれで終了です。今回のポイントを復習すると

Ⅰ.SUMPRODUCT関数で数式の足し算を省力化する

Ⅱ.^2を使い差額の絶対値を目的の計算に使用できるようにする

Ⅲ.制約条件画面にて、INTの指定を通じて、ソルバーの結果の整数指定を行う

の3つになります

最後に、ソルバーを使う上での注意点を付け加えておきますが、

”ソルバーの値はあくまでシミュレーションであり、ビジネスとして絶対的に正しいわけではありません”

この点は、予め理解した上でソルバーを活用していきましょう!

ではまた次回、更に実践的な内容に取り組みます

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

にほんブログ村