テーブル内の割り算

下記のような表があります。
合計金額を数量で割って単価を求めたいです。
端数があればエラー終了したいです。

ForEachRowで一行ずつ計算するしかないでしょうか?
行数は最大50行、表の処理件数は100件ほどです。

|品名|数量|合計金額|
|りんご|2|1000|
|みかん|3|3000|
|いちご|2|2000|
|りんご|1|1000|

自分でも調べましたが見つけられませんでした。

HI @m03901

You need to add a column and return the value there and if the value has fraction need to return error in the same column is that right?

Regards
Sudharsan

こんにちは

期待する結果を共有できますでしょうか?

結果は行単位の単価でしょうか、あるい表全体で同じ品名はグルーピングしての平均単価でしょうか?

ありがとうございます。情報不足で申し訳ございません。
理想はこちらです。単価を求めた後、同じ品目・単価同士で集計したいです。

|集計前|
|品名|数量|合計金額||
|りんご|2|1000||
|みかん|3|3000||
|いちご|2|2000||
|りんご|1|1000||
|りんご|3|1500||

|集計後|
|品名|数量|合計金額|単価|
|りんご|5|2500|500|
|みかん|3|3000|1000|
|いちご|2|2000|1000|
|りんご|1|1000|1000|

こんにちは

上記ですが、集計後にりんごが2行ありますが、正しいでしょうか?

こんにちは

まず各行の単価を求めて、品名と単価の組でグルーピングするということであっていますか?

1 Like

はい、行を追加しました。
同じ品目・単価で数量が違うデータが載っている可能性があります。
それは最終的には集計したいです。

はい、品名と単価でグルーピングしたいです

こんにちは

以下ForEachRowを使わない方法の一例です。

単価算定

dt = dt.AsEnumerable.Select(Function(r) dt.Clone.LoadDataRow({r("品名"),r("数量"),r("合計金額"),CDbl(r("合計金額"))/CDbl(r("数量"))},False)).CopyToDataTable

グルーピング

dt = dt.AsEnumerable.GroupBy(Function(r) Tuple.Create(r("品名").ToString,r("単価").ToString)).Select(Function(g) dt.Clone.LoadDataRow({g.Key.Item1,g.Sum(Function(r) Double.Parse(r("数量").ToString)),g.Sum(Function(r) Double.Parse(r("合計金額").ToString)),g.Key.Item2},False)).CopyToDataTable

Sample20221027-1.zip (3.4 KB)

1 Like

拝見いたしました!!!ありがとうございます!
自力では絶対できませんでした。
明日早速試してみます!
いつもありがとうございます。

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