【初心者】データテーブルから重複行の削除

お力かしてほしいです

下記CSVデータの情報(Q~T列)を取得し、データ数分一行一行ひな型Excelに転記していく処理を作成しています。
管理Noが重複しているものがデータ内にあり、重複している管理Noに関してはQ~T列の数値を合算しています。
合算した後に重複している管理Noはの行は削除したいです。

【理由】重複している管理Noの処理を繰り返ししていると時間がかかるため

【現状】
①データテーブルとして取得【データテーブルの繰り返し】 変数値:データテーブル

②データテーブルから管理No取得

③管理Noでフィルターし、フィルター後のデータテーブルを再度取得 変数値:データテーブルフィルター後

④管理Noの重複があれば、Q~R列の値をすべて合算

⑤【やりたいこと】合算後に重複データの行を削除、①の繰り返しに戻る

重複行が削除されるため、繰り返し回数が減る

こんにちは

ダミーでもよいので元データをファイルで共有可能でしょうか?

1 Like

返信ありがとうございます。
CSVデータアップロードしようとしたのですが、許可されませんと出ます。。。
こちらにはアップロード可能なのでしょうか?

ユーザーの権限にも依存しますが、zipに圧縮してもアップロードできませんでしょうか?

デモデータ.zip (824 バイト)

できました!
加工したので少しカラムがずれますが、合算したい数値はD~G列の値になります。
管理NOはC列です。
ご確認お願い致します。

デモ転記.zip (5.6 KB)

念のため作成したシナリオも共有させていただきます。

グルーピングの問題なのでそれ用のメソッドを使う方法を共有します。

dt.AsEnumerable.GroupBy(Function(r) r("管理№").ToString).Select(Function(g) dt.Clone.LoadDataRow({g.First().Item("請求年月"),g.First().Item("実績年月"),g.Key,g.Sum(Function(r) CDec(r("実績(件1)"))),g.Sum(Function(r) CDec(r("実績(件2)"))),g.Sum(Function(r) CDec(r("実績(個数)"))),g.Sum(Function(r) CDec(r("実績(M3)")))},False)).CopyToDataTable()

サンプル
Sample20240402-1.zip (3.6 KB)

1 Like

ありがとうございます!
希望していた通りのデータ加工ができました!!
こちらをデータテーブルとして読み込んで繰り返し転記していくイメージですかね!!

dt.AsEnumerable.GroupBy(Function(r) r(“管理№”).ToString).Select(Function(g) dt.Clone.LoadDataRow({g.First().Item(“請求年月”),g.First().Item(“実績年月”),g.Key,g.Sum(Function(r) CDec(r(“実績(件1)”))),g.Sum(Function(r) CDec(r(“実績(件2)”))),g.Sum(Function(r) CDec(r(“実績(個数)”))),g.Sum(Function(r) CDec(r(“実績(M3)”)))},False)).CopyToDataTable()

関係ない質問で大変恐縮ですが、上記の書いていただいた様なコードはどうやって学習していくのがよいのでしょうか。。。
全く見たことないので今後自分で書いたりできるようになりたいのですが、、、

このあたりはVB.netの範疇なので、それの学習でしょうか。(上記はLINQなので初級よりは上のレベルのものになりますが)

VB.NETの学習になります。
質問ばかりで大変恐縮なのですが、コードについて{g.First().Item(“請求年月”)}と調べると請求年月の最初の行を取得していると思うのですがなぜなのか全くわからないです。。。もし可能であればご教示いただけると助かります。

CSVはデモなのでかなり列を削除したのですが、ほかにも使わない列が沢山あります。それらの列も請求年月のように最初の行の取得の設定が必要になるのでしょうか?

これは要件次第です。要件中にこれらの列をどうすべきかの指定がなかったのと、グルーピングした結果各グループ内の値がすべて同じでしたので、最初の行を採用しましたが、例えば最後の行でも結果は同じになるかと思います。

CSVはデモなのでかなり列を削除したのですが、ほかにも使わない列が沢山あります。それらの列も請求年月のように最初の行の取得の設定が必要になるのでしょうか?

先のご質問と同様要件次第です。グルーピングしたデータの値が同じなら最初の行で良いと思います。

1 Like

確かに日付に関しては指定していませんでしたね!承知いたしました!
ご丁寧に回答していただきありがとうございます。
また宜しくお願い致します。

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