データテーブルの項目キー毎の件数を取得

データテーブルの項目ごとに件数を取得したいのですがどのように実施すれば良いかアドバイスをください。

項目1,項目2

トマト,100
トマト,105
メロン,2000
スイカ,1500

処理結果は、以下の想定します。
トマト,2
メロン,1
スイカ,1

元データはテキストファイルで、直接取得できれば良いのですが調べた結果、UIPATHだけでは出来そうもないのでdatatableに取り込んでから取得しようと考えています。
(SQLであればGROUP BY句でカウントするような感じです)

テキストファイルは約500件、1テキストファイルは項目はMAX6種類で約20,000行ほどあります。

最終的な結果はEXCELに出力しようと思っています。

以上、よろしくお願いいたします。

UiPath上、ダイレクトにご希望の結果を返す手法がありません。代替手法はいくつか存在しますが、UiPathを用いて実装することを考慮して、急ぎぱっと思いついたものを記載します。

  • 元のデータテーブルを rawTable とします。
  • rawTable から、グループ化したい対象の列のみを保持するデータテーブルを生成し、そのデータテーブルの重複を排除します。
    • これによって、対象の列に含まれるデータのユニークなリストが生成できます。
    • このユニークなリストとなっているデータテーブルを keyListTable とします。
  • keyListTable に、カウント用の列を追加します。
  • keyListTable に含まれるレコードの繰り返しを実装し、下記の動作を実装します。
    • rawTable をフィルターし、グループ化したい対象の列のデータが、現在の keyListTable のデータと一致するもののみ抽出します。
      • フィルターされた結果を、 filteredTable とします。
    • filteredTable の行数(=filteredTable.Rows.Count)を、keyListTableのカウント用の列に代入します。

この書き込みには、キー毎の合計を求めるサンプルロボがあります。
合計部分を改造して、件数にすると行けるかな?

こんにちは

元の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を経由する必要はないかもしれません。(テキスト処理だけでそれを取得できると思います)

拙作「かんたんDataTableアクテイビティ」に集計はあるけど、件数はないんだよね。組み込んでみようかなヽ(^o^)丿

みなさん、回答ありがとうございます。

まずは、Yoichiさんのやり方でチャレンジし、結果をご連絡させていただきます。

1 Like

結果報告です。
Yoichiさん方法ですと、resultの型を"IEnumerable"に指定するとエラーになってしまい、解決できませんでした。
HANACCHIさん方法で実行しました。
(カウント仕様に変更があった為にfilterは使用しなかったのですが)
ありがとうございました。

1 Like

こんにちは

すでに処理済みとのことなので参考レベルですが実装サンプルつけておきます。

Sample20200520-1.zip (16.8 KB)

色々なアプローチで解決する方が助けてくれます。次は taniguchi.michioさんが回答する番ですね(^。^)

よろしければ、解決に至った返信の解決策にチェックをお願いします。