やりたいこと
Computeを使用して集約計算を行う
以下にDataTable型の変数dt従業員があるとします。
年齢の合計値を求めるためにはComputeを使用します。
dt従業員.Compute("sum(年齢)", String.Empty).ToString
String.Emptyの部分には条件を設定することができます。
例えば、
dt従業員.Compute("sum(年齢)", "[性別] = '男'").ToString
とすることで、データ内の男性の年齢の合計を求めることができます。
特に条件を設定しない場合は、String.Emptyとしておきます。
それでは メッセージボックスに表示させてみましょう。
結果↓
エラーメッセージで「Objectの使用が無効です。」が表示されてしまします。
原因を調べたところデータテーブルの読み込み方法に問題があったようです。
dt従業員はExcelApplicationScopeアクティビティを使って読み込みを行っていたのですが、その場合データテーブルの中の値は強制的にobject型になってしまうようです。
Computeを使用する場合は、数値型である必要があるためエラーとなってしまうことがわかりました。
値の型を変更するために、BuildDataTableアクティビティを使用します。
日本語表記だとデータテーブルを構築です。
こちらのアクティビティで先ほどと同じデータを作成します。
↓
年齢の型をInt32に変更してプロパティでデータテーブル型の変数dt従業員を設定します。
再度メッセージボックスで表示すると、、
結果↓
無事に年齢の合計値を表示することができました!
やはり、年齢の型を変更することで正常にComputeが動作することがわかりました。
sumの部分を
Avgにすると平均値を算出することができ、
Max,Minにすることで最大値、最小値を算出することもできます。
ひとこと
ExcelAplicationScopeで読み込んだテーブルをComputeしたいケースは時々あるのですが、どうやら難しいみたいです。
データ量が多いとBuildDataTableで作成することが難しいので、悩みどころです。
他に便利な方法があれば教えていただけると幸いです。
LINQを使えばうまくできるみたいなので、今度挑戦してみたいと思います。
( ..)φメモメモ
他にもデータテーブルの操作について紹介しているので、ぜひ参考にしてみてください(^^)it-rpa.hatenablog.com