データテーブルの項目ごとに件数を取得したいのですがどのように実施すれば良いかアドバイスをください。
項目1,項目2
トマト,100
トマト,105
メロン,2000
スイカ,1500
処理結果は、以下の想定します。
トマト,2
メロン,1
スイカ,1
元データはテキストファイルで、直接取得できれば良いのですが調べた結果、UIPATHだけでは出来そうもないのでdatatableに取り込んでから取得しようと考えています。
(SQLであればGROUP BY句でカウントするような感じです)
テキストファイルは約500件、1テキストファイルは項目はMAX6種類で約20,000行ほどあります。
最終的な結果はEXCELに出力しようと思っています。
以上、よろしくお願いいたします。
cheez_RPA
(いわさき りょうすけ (UiPath Japan MVP 2019 - 2021))
2
UiPath上、ダイレクトにご希望の結果を返す手法がありません。代替手法はいくつか存在しますが、UiPathを用いて実装することを考慮して、急ぎぱっと思いついたものを記載します。
- 元のデータテーブルを
rawTable
とします。
-
rawTable
から、グループ化したい対象の列のみを保持するデータテーブルを生成し、そのデータテーブルの重複を排除します。
- これによって、対象の列に含まれるデータのユニークなリストが生成できます。
- このユニークなリストとなっているデータテーブルを
keyListTable
とします。
-
keyListTable
に、カウント用の列を追加します。
-
keyListTable
に含まれるレコードの繰り返しを実装し、下記の動作を実装します。
-
rawTable
をフィルターし、グループ化したい対象の列のデータが、現在の keyListTable
のデータと一致するもののみ抽出します。
- フィルターされた結果を、
filteredTable
とします。
-
filteredTable
の行数(=filteredTable.Rows.Count
)を、keyListTable
のカウント用の列に代入します。
HANACCHI
(はなっち!UiPath Japan MVP 2019-2022)
3
この書き込みには、キー毎の合計を求めるサンプルロボがあります。
合計部分を改造して、件数にすると行けるかな?
Yoichi
(Yoichi)
4
こんにちは
元のDataTableをdtとしますと
result = dt.AsEnumerable.GroupBy(Function(r) r("項目1")).Select(Function(x) x.Key.toString+","+x.Count(function(y) y("項目1").toString=x.Key.toString).ToString)
で結果の文字列を(例えば”トマト,2”を1アイテムとした)IEnumerable<string>
型で取得できると思います。
この結果をDataTable型に変換したいのであれば、String.Join(vbCrLf,result)
をGenerate DataTable(データテーブルを生成)アクティビティにCSVとして入力すればDataTableになります。
なおこの方法は項目1の配列だけあれば良いので、あえてDataTableを経由する必要はないかもしれません。(テキスト処理だけでそれを取得できると思います)
HANACCHI
(はなっち!UiPath Japan MVP 2019-2022)
5
拙作「かんたんDataTableアクテイビティ」に集計はあるけど、件数はないんだよね。組み込んでみようかなヽ(^o^)丿
みなさん、回答ありがとうございます。
まずは、Yoichiさんのやり方でチャレンジし、結果をご連絡させていただきます。
1 Like
結果報告です。
Yoichiさん方法ですと、resultの型を"IEnumerable"に指定するとエラーになってしまい、解決できませんでした。
HANACCHIさん方法で実行しました。
(カウント仕様に変更があった為にfilterは使用しなかったのですが)
ありがとうございました。
1 Like
Yoichi
(Yoichi)
8
こんにちは
すでに処理済みとのことなので参考レベルですが実装サンプルつけておきます。
Sample20200520-1.zip (16.8 KB)
HANACCHI
(はなっち!UiPath Japan MVP 2019-2022)
9
色々なアプローチで解決する方が助けてくれます。次は taniguchi.michioさんが回答する番ですね(^。^)
よろしければ、解決に至った返信の解決策にチェックをお願いします。