はじめに
データテーブルってとっつきにくいし、データテーブルに対するテクニック・解説などは載ってても、実際の業務で使える考え方・パターンは載ってないかなーと思って、
私が業務作業でやっているデータテーブル操作を書いていこうと思います。
参考になれば幸いです。
対象者
・日々の業務でエクセルのVLOOKUP関数を多用する人
・2種類のデータテーブルを使って、目的の行や列に対して操作・更新をしたい方
サンプルで使うデータテーブル
県と特産物のような形でデータテーブルをつくりました。
データテーブル活用パターン1
2つのデータテーブルの中で条件が合う行を出力したい!という場合はこちら
データテーブルを結合アクテビティを使います。
結合ウイザードの中はお互いの「列名」を指定します。
結合型を「Inner]に指定します。
指定した列名で値が合致するものがデータテーブルCへ出力されます。
今回はお互いのデータテーブルでは「東京」が合致するので、該当の行が出力されるか見てみましょう。
実行結果
こんな感じになりました!条件が合う行が互いに合体したようなイメージです。
気を付けないといけないのは、条件指定した列に関して、お互いのデータテーブルに格納されている値は一緒でないと、データテーブルCは狙ったデータテーブルにはなりません。
地名で例をあげると「市ヶ谷」と「市谷」とか、「アルプス」と「アルプス」とかね笑
右と左は一緒でないといけない。つまり、ドラゴンボールでいうとフュージョンみたいなイメージでしょうか
さて、日々の業務でデータの出力だけが目的であれば、この後「データテーブルをフィルター」アクテビティを使って、データテーブルCの余計な行を削除し、「CSVに書き込み」アクテビティなどで利用することが可能です。
データテーブ活用パターン2
どちらかのデータを軸にして、片方にある行や列に更新をかけたい場合は2種類のアクテビティを組み合わせて使います。
繰り返し(データテーブルの各行)アクテビティ
データテーブルを探索 アクテビティ
組み合わせはこんなイメージです。繰り返しの中に検索アクテビティを入れる感じ。
繰り返しアクテビティから解説すると
CurrentRowにはデータテーブルの1行が格納されます。
列に格納された値を出力したい場合は「CurrentRow("データテーブルAの列名").ToString」で値を取得します。今回のデータテーブルAでは、1回目の繰り返し実行では「山梨」、2回目の繰り返し実行では「東京」の値が取得できます。
さて、データテーブルを検索アクテビティでは、どのデータテーブルの中から探したいか指定するので「データテーブルB」を指定しました。「列」「列名」「列番号」とありますが。どれかが入力されていれば大丈夫です。今回はデータテーブルBの列名はわかっているので、列名を入力しています。
検索値にはデータテーブルBの中から探したい値を入力します。今回は繰り返しの際には「山梨」「東京」が入っていくような形です。
また、出力結果に「行インデックス」という項目があります。この出力結果はInt32型になります。
データテーブルBに値が存在しない場合-1が返ってきます。値が見つかった場合はデータテーブル内の行番号を整数で返します。
データテーブルBに値が見つかったときに、目的の列の値を更新したいのでこのように表現します。
つぎに発見行インデックスが-1以上であれば、データテーブルBに該当する行が存在するので、else ifアクテビティなどでふるい分けます。
データテーブルBの行へアクセスするには「データテーブルB.Rows(発見行インデックス).Item("Bの列名").tostring」で行のデータを取得できます。す。
実行結果
実行結果はこのようになりました。
最初に「山梨」っていう値でデータテーブルBを検索したところ、ヒットしないので「-1」が返ってきます。
次に「東京」っていう値でデータテーブルBを検索したところ、「0」が返ってきます。
「0」なのはデータテーブルの1行目はゼロから始まるからです。(ゼロオリジン)
目的の行が見つかったら行項目を更新アクテビティで更新をすれば大丈夫です。