DataTableのキー毎の合計を求める方法

uipath・VB.NET初心者です。やりたいことがあるのですが実現方法がわからず、こちらで質問させていただきました。言葉足らずのところがあるかもしれませんがご助言いただけると幸いです。

■前提
DataTableに以下のような値が入っています。(header無 かつ 空白のitemもある)

testA | 7 | 2 | 10.5 | | | 2.5
testB | 3 | 6.5 | | | | 7
testC | | | | 2 | 3.5 |
testA | | 1 | | | 1.25 |
testB | | 2 | 3.5 | 2 | 1 | 1

*1. [testA] など行(row) の値は変動です。
*2. すべてのitemに値があるわけではなくNULLの場合もあります。
*3. ExcelからReadRangeでDataTable型の変数に格納しているのですが、列(col) は起点のみ指定(A1等)しておりColumn数も変動です。

■実現したいこと
DataTableの先頭行名(?) をキーに、各itemの値を合算して再度DataTableに格納したいです。上記の値を以下のように加工したい。

testA | 7 | 3 | 10.5 | | 1.25 | 3.5
testB | 3 | 8.5 | 3.5 | 2 | 1 | 8
testC | | | | 2 | 3.5 |

Counter変数を作ってcolumnに連番の名前を付けてあげてForEachで{Integer.Parse(DataTable型の変数.Compute(”sum(カラム名)”, Nothing).toString)}などをまわす等、色々考えてみたのですが全く実現に至っておらず、、

お手数ですがご助言いただけますと幸いです。

DataTableのキー毎の合計を求める方法.zip (25.2 キロバイト)

事細かに説明すると大変なので、つくってしまいました。
1)キー列だけのDataTableを作成し、重複行を削除する(ユニークなキー状態にする)
2)もとのDataTableを、ユニークなキーとをマッチングし、一致する行をDataTable化する
3)新しいDataTableの行を初期化する。
4)一致する行をDataTable分、その新しいDataTableの行に格納する(空白、未設定、小数点ありなので、"0"をつけて、Trimした結果と連結し、Double化する)
5)全ての合算が終わったら、新しいDataTableへ格納する
6) 2)から処理を繰り返す。
7)全て終わったら、新しいDataTableをCSVに出力する

こんにちは

やり方はいろいろあるかと思いますが、Dictionary使ったサンプルupします。

Sample20200508-1.zip (11.1 KB)

HANACCHI さん

ご回答および作成までいただきまして誠にありがとうございます。
いただいたものを動かしてみて希望通りの結果が得られたのですが、お恥ずかしながらどういう処理が書かれているのかまでまだ読み解けておりません。。
datatableについてもっと勉強しなければいけないですね。週末使って読み解いてみようと思いました。

改めてありがとうございました!

Yoichi さん

サンプル作成ありがとうございます!動かしてみたところ希望通りの結果が得られました。大変助かります。
Dictionaryでこんなことができるのですね…。全く分かっていませんでした。。
いただいたサンプルを勉強のため読み解いてみたいと思います。

改めてありがとうございました!

途中途中でデータテーブルをcsvなどに出力してどんな結果になって行ったかトレースすると、理解が深まると思いますよ。是非!

1 Like

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.