会計パーソンのためのExcel~第2回~
皆さん、こんにちは。
お読みいただき、ありがとうございます。
第2回目は、第1回で取り込んだデータをもとに、実際のマスタやトランザクションデータの形にしていきますよ。
Power Query エディターの起動
方法はいくつかありますが、とりあえず2つ。
すでに取り込んだ履歴から
「データ」タブから
得意先マスタ(M_得意先)
完成イメージ
データを入れる箱を作る
今回は元々データがなく、新しくデータを格納するテーブルを作ります。
グレーのところで右クリック→新しいクエリ→その他のソース→空のクエリ
連番を作る
前回取り込んだ条件指定で、15件としていました。
得意先コードはC+数字4桁となっていますので、まずは15個の連番を作っていきましょう。
数式バーに以下の式を入れ、Enterを押してください。
すると、1~15までの連番(=リスト)が出来上がります。
※=を忘れずに!
= {1..15}
なお、上の例では"15"を直接入力しましたが、実際は条件指定した結果に応じて変更したいのです。そういうときは、最初に読み込んだクエリからデータを持ってくる、ということをやります。
条件指定した結果が入っているクエリ(以下の例では"_Condition_Customer")を選択し、
"15"の入っているセルを右クリック→新しいクエリとして追加
すると、15という数字だけを表示するようになり、以後、他のクエリでこの値を参照できるようになります。
つまり、最初に取り込む条件を変えれば、ここの数字も変わる、ということですね。
さて、ここで先ほどの式"= {1..15}"を置き換えてみます。
結果は同じですね。
= {1..得意先数}
さて、連番を作れましたが、リストは単にデータが一列に並んだだけのものですので、このあと、よく見るいわゆるテーブル形式に変換します。
リストがあるステップでは、リストツールというタブが選択できるようになるので、そこから「テーブルへの変換」を選択。
リストはうまく使うと色んな計算ができる(らしい?)のですが、難しいのでまた後日に。今回はそのままOK。
すると、少し見た目が変わりました。これで変換は完了です。
さて、少し右に目をやると、「クエリの設定」のところで、「ソース」「テーブルに変換済み」というステップが表示されています。
このように、何か加工をするごとに、ステップが追加されていきます。
また、いらなくなったステップについては、ステップ名の左側の✕を押すと削除され、ひとつ前の状態(下の例では「ソース」)に簡単に戻れます。
また、「名前」というところで、今回作成するもの(M_得意先)がわかるような名前に変更しておきましょう。
得意先コードを、新しい列で『"C"+4桁の数字』に変換する
さて、連番ができたところで、『"C"+4桁の数字』の列を追加します。
ただし、4桁に満たない場合は先頭をゼロで穴埋めします。
Excel関数での作業イメージは下記ですね
列の追加は、色々メニューがありますが、今回は「例からの列」を使ってみます。
右のほうに、「列1」という入力可能なテーブルが作成されるので、
たとえば1行目に、「C0001」と入力し、Enterもしくは余白をクリック
そうすると、「あなたが入力したいのは下記ですか?」と言わんばかりに候補が出てきます( ゚Д゚)
例からの列、というのは、ユーザーが入力した答えをもとに、ルールを推測してくれるってことですね。
一見、合っていそうですが、10番以降はC0010にしたいので、ちょっと違いますね。したがって、間違っている部分をまたクリックして、あるべき結果を入力すると、今度は数字は4桁になりました。問題なければ、OKをクリックします。
すると、元の連番だったテーブルに、今回作りたい列が追加されました。
また、意識する必要は現時点ではありませんが、今回実施した作業の中身の実態(関数)が自動作成されます。この辺は追々。
列の削除
リストはもういらないので、削除します。
やり方はいくつかありますが、わたしは下記で実施することが多いです。
※残したい列を選択>右クリック→他の列の削除
ここで、不思議に思ったかたもいるかと思います。
今回、この列はリストをもとに作りました。Excelであれば、元の列を削除すると、#REFでエラーになってしまいます。
PowerQueryでは大丈夫です。結果が値貼付のような状態になります。
むしろ、不要な行列がたくさん残っている状態で加工を進めると、大量データでは効率が悪いので、削除推奨です。
得意先名称(アルファベット3文字)をランダムで作る
前提として、Excelでは65がA、90がZを意味します。
CHAR関数でこれらを引数とすると、対象のアルファベットが返ってきます。今回はこれを利用します。
列の追加>カスタム列を選択します。
すると、どういう値を表示させるのか数式の入力が求められますので、今回は下記を入力します。
「Number.」というのが独特ですが、Roundは四捨五入、RandomBetweenはその間で乱数を発生させる、という点は通常のExcelと同じです。
=Number.Round(
Number.RandomBetween(65,90)
)
乱数ですので、この画面と皆様の結果は当然異なります。
65~90の整数が表示されていれば成功です。
今回は3文字にしたいので、これを3回繰り返します。
以下のようなフォームになっていればOKです。
次に、作った乱数の列それぞれからアルファベットへ置換します。
以下は[カスタム.1]の数字をもとに文字列に置換する例です。
他の2列は、[カスタム.1]を、[カスタム.2][カスタム.3]に読み替えます。
= Character.FromNumber([カスタム.1])
以下のようになっていれば成功です。
また、カスタム.1~カスタム.3は不要になったので削除します。
同じ行の列を結合する
カスタム.4~カスタム.6をShiftを押しながら選択し、列の追加>列のマージを選択します。
詳細画面で、区切り記号をカスタム「@」とし、OKを選択。
すると、区切り記号で選択した記号で列の文字列が連結されます。
以下は例ですので、どれでも良いです。
※画像の文字が違いますが、乱数が都度変化するためご了承ください。
※区切り記号で「なし」を選択すると、「完成イメージ」のように単純に結合されます。
最後に、カスタム.4~カスタム.6を削除し、列名を変更します。
ワークシートに結果をエクスポートする
ホーム>閉じて読み込む
データのインポートの画面で、「テーブル」を選択
どこに表示させるかは、「データを返す先を選択してください。」で選択
以上です!お疲れまでした。
補足
列のマージにおける列の選択順序
以下は、いずれも同じカスタム.4~カスタム.6を選択して「列のマージ」を実施しています。
一方は4→5→6(結合済み)、もう一方は5→6→4(結合済み.1)と選択して「列のマージ」をクリックしましたが、選択順序によって結果が異なるため注意。
最後に
実際、マスタを自分たちで作るなんてことはないと思いますが、実は利用頻度の高い機能をかなり使用しています。
上記がお役立ていただければ幸いです。