既存の列からデータを抽出したり、新しいデータを作成したりする際に「例からの列」というコマンドを利用する方法もある。「例からの列」と言われても、その機能を想像しにくいと思われるので、具体的な例を示しながら使い方と注意点を紹介していこう。

「例からの列」を使ったデータの抽出

今回、紹介する「例からの列」は、既存の列をもとに「新しいデータ」を自動作成してくれる機能となる。この機能を使って“データの抽出”を行うことも不可能ではない。「例からの列」という内容を想像しにくいコマンド名になっているが、使い方そのものは難しくないので、この機会に覚えておいても損はないだろう。

  • 「例からの列」の使い方

それでは、さっそく使い方を紹介していこう。1つ目の例は、「所属」の列から「東京本社」や「△△支社」の文字だけを抽出する処理だ。前回の連載では「抽出」コマンドでデータを抽出したが、同様の処理を「例からの列」コマンドで実現してみよう。

  • 「所属」の列に記録されているデータ

データの抽出元になる「所属」の列を選択する。続いて、「列の追加」タブにある「例からの列」の▼をクリックし、「選択範囲から」を選択する。

  • 「例からの列」の開始

以下の図のような画面が表示されるので、「所属」の列だけチェックボックスがONになっていることを確認する。続いて、「作成したいデータの例」を自分で入力していく。たとえば、1行目には「東京本社」という文字を抽出したいので、「例1」の列の1行目をクリックして「東京本社」と入力する。

  • 例の入力(1個目)

「Enter」キーを押すと、他の行についてもデータが自動的に作成され、その結果が薄いグレーの文字で表示される。

  • 自動作成されたデータ

ただし、これらのデータが“意図した結果”になっているとは限らない。2行目の「名古屋支社」は正しくデータを抽出できているが、3行目の「大阪支社経理部」は元データをそのままコピーしているに過ぎない。よって、この部分を正しく修正する必要がある。3行目の結果をダブルクリックし、データを「大阪支社」に修正する。

  • 例の入力(2個目)

「Enter」キーを押すと、他の行についても結果が自動更新される。今度は、「所属」の列から“先頭の4文字”を抽出する、と判断されたようだ。先ほどデータが正しく抽出されていた「名古屋支社」も、「名古屋支」に結果が更新されている。

  • 自動作成されたデータ

ということで、今度は2行目の結果をダブルクリックして「名古屋支社」に修正する。このように、“想定外の結果”を“意図した結果”に自分で修正していくのが「例から列」の基本的な使い方となる。

今回の例の場合、2行目を「名古屋支社」、4行目を「東京本社」、8行目を「北海道支社」、11行目を「東京本社」という具合に結果を修正していくと、全データを“意図した結果”にすることができた。これを確認して「OK」ボタンをクリックする。

  • 例の入力を続行(正しく作成れた例)

データ表の右端に「新しい列」が追加され、そこに「例からの列」で得られたデータが表示される。あとは「列名」を変更して、列の並び順を変更するだけだ。

  • 追加された列

このように「例からの列」を使って、「所属」の列から「東京本社」や「△△支社」の文字だけを抽出することも不可能ではない。

念のため、「実際にどのような処理が行われているのか?」を確認しておこう。最後のステップを選択してM言語の記述を確認すると、以下の図のような記述が表示された。

  • M言語の確認

この処理内容を理解するにはM言語について学ぶ必要があるが、M言語に詳しくなくても大まかな処理内容を探ることはできるだろう。今回の例の場合、"京"、"北"、"古"、"名"、"大"、……という少し不可解な文字が列記されている。

このM言語の処理内容について補足しておこう。Text.Selectは、指定した文字だけを抜き出す処理となる。今回の例の場合、「所属」の列から"京"、"北"、"古"、"名"、"大"、"屋"、"支"、"本"、"東"、"海"、"社"、"道"、"阪"といった13種類の文字だけを抜き出す、という処理になる。

結果として、「東京本社営業部」→「東京本社」、「大阪支社経理部」→「大阪支社」などの処理を実現できることになる。とはいえ、かなり予想外の処理方法(アルゴリズム)といえるだろう。

普通に考えると、データの先頭から「社」までの文字を抜き出す、となりそうだが、実際にはそうなっていない。「所属」の列から13種類の文字だけを抜き出す、という処理を行うことにより、「たまたま“正しい結果”が得られた」というのが実情だ。

現時点のまま“支社名”や“部署名”が増えなければ、この処理方法でも正しく対処できるだろう。しかし、新しい支社名や部署名のデータが追加された場合は、不適切な処理方法になってしまう。たとえば、「大分支社営業部」といったデータが追加された場合、その処理結果は「大支社」になってしまう。同様に、「東京本社統括本部」といったデータが追加された場合、その処理結果は「東京本社本」になってしまう。

このように「例からの列」で指定した処理方法は、「現時点では正しく機能していても、将来的に正しく機能するかは不明……」という処理になってしまう危険性がある。M言語の内容を理解できていないと、「理屈はよく分からないが、とりあえず意図していた結果を得られたようだ……」という状況になる。つまり、処理内容がブラックボックスになってしまう訳だ。そういう意味では、初心者にとって使いづらい機能(むやみに使うべきではない機能)といえる。

「例からの列」が上手く機能しない例

もうひとつ具体的な例を紹介しておこう。今度は「住所」の列から「都道府県」だけを抜き出してみる。この例も、これまでの連載で何回も紹介してきたものだ。この処理を「例からの列」で実現できるか試してみよう。「住所」の列を選択し、「例からの列」→「選択範囲から」を選択する。

  • 「例からの列」の開始

「住所」の列だけチェックボックスがONになっていることを確認し、結果の例を入力していく。1行目の場合、「東京都」が求めている結果になるので、「東京都」と入力して「Enter」キーを押す。

  • 例の入力(1個目)

すると、上図に示したような結果が得られた。例が1つだけでは“意図した結果”を得ることができないようだ。ということで、2つ目の例を入力する。2行目に「岐阜県」と入力して「Enter」キーを押す。

  • 例の入力(2個目)

今度は「住所」の“先頭から3文字”を抜き出す処理と判断されたようだ。まだ“意図した結果”に至っていないので、3つ目の例を入力する。今度は6行目に「和歌山県」と入力してみた。

  • 例の入力(3個目)

すると、自分で例を入力した行以外はnull(データなし)という結果になってしまった。このままでは処理を実現できないので、さらに例をいくつか追加入力していく。すると、以下の図のような結果が得られた。

  • 例の入力(9個目)

今度は、自分で例を入力した行以外がすべて「東京都」になってしまっている。このように、どれだけ例を入力しても“意図した結果”にならないケースもある。この場合は「キャンセル」ボタンをクリックして操作を中断するしか手段がない。

「例からの列」は、自分で入力した結果(例)をもとに、最適な処理方法(アルゴリズム)を自動提案してくれる機能となる。ただし、必ずしも上手くいくとは限らない。上図のように、いつまでたっても“意図した結果”が得られないケースもあれば、最初に示した例のように“適切とはいえない処理方法”が示されるケースもある。

複数の列をもとに新しいデータを作成

続いては、複数の列をもとに新しいデータを作成する処理を「例からの列」で実現してみよう。

以下の図は、ある企業が扱っている商品の「型番」や「発売日」、「色」などの情報をまとめたデータ表だ。現時点では、「色」が異なる商品も同じ「型番」として扱われている。

  • 型番、発売日、色、価格の情報をまとめたデータ表

このままでは「型番」から「色」を特定できないので、「発売日」や「色」も含めた「新しい型番」を作成することにした。ここでは、以下のような形式で「新しい型番」を作成する場合を例に操作手順を紹介していこう。

◆新しい型番の形式
 (従来の型番)-(発売日の年月)-(色の記号)
 ※発売日の「年」は西暦の下2桁、「月」も2桁で表記

それでは、具体的な操作手順を示していこう。今回は“複数の列”をもとに新しいデータを作成するので「例からの列」→「すべての列から」を選択する。

  • 「例からの列」の開始

すべての列のチェックボックスがONになった状態で「例からの列」の作業画面が表示される。今回は「価格」の列を参照する必要はないので、「価格」の列のチェックボックスをOFFにする。

  • 参照しない列のチェックを外す

続いて、例を入力していく。1行目の場合、(従来の型番)-(発売日の年月)-(色の記号)は「DHS001-1905-WT」となる。これを自分の手で入力して「Enter」キーを押す。

  • 例の入力(1個目)

他の行の結果は上図のとおり。現時点では、(従来の型番)だけが正しく抽出されており、それ以降はすべて「-1905-WT」という記述になっている。このままでは“意図した結果”になっていないので、2行目にも例を入力する。こちらは「DHS001-1905-K」と入力すればよい。

  • 例の入力(2個目)

すると、(色の記号)の部分が正しく抽出されるようになった。ただし、(発売日の年月)が正しく抽出されていない結果が何件か見受けられる。この部分を“意図した結果”に修正していく。

  • 例の入力を続行(正しく作成れた例)

上図のように2つの例を追加入力すると、全データについて“意図した結果”を得ることができた。「OK」ボタンをクリックして処理を実行する。

  • 追加された列

データ表の右端に「新しい列」が追加され、そこに「例からの列」で得られたデータが表示される。

このように、複数の列からデータの一部を抽出して「新しい列」を作成する場合にも「例からの列」が活用できる。同様の処理を「抽出」や「列のマージ」などのコマンドで処理しようとすると、相当の手間を要するはずだ。

念のため、この処理のM言語も確認しておこう。今回の例では、以下の図のようにM言語が記述されていた。

  • M言語の確認

この処理内容を理解するには、やはりM言語について学んでおく必要がある。M言語を理解できない場合は、「例からの列」で指定した処理内容がブラックボックスになってしまう。M言語の記述をすべて解読できれば、そのアルゴリズムを把握できるようになるが、初心者にとって、これは少し難しい課題になるかもしれない。

今回の連載で紹介してきたように、「例からの列」を使って“新しいデータ”を自動作成することも可能である。ただし、「理屈はよく分からないけど、とりあえず意図していた結果を得られたようだ……」という状態になってしまう可能性が高い。

M言語を解読できる上級者にとっては、処理方法(アルゴリズム)を自動提案してくれる便利な機能といえる。しかし、そうでない方にとっては危険を伴う機能と考えられる。「例からの列」の使い方や利便性を紹介している記事は沢山あるが、その背後に「処理内容がブラックボックスになってしまう」という危険性が潜んでいることを忘れないようにして頂きたい。便利な機能ではあるが、安易に手を出すのは考え物だ。各自のスキルに合わせて利用する必要がある。