DTの集約について(任意の列の文字列が一致する行の合計)

Continuing the discussion from DTの集計について(任意の列の文字列が一致する行の合計)合計列が300列あります:

お世話になっております。
先日、こちらのトピックで教えて頂いた式を使い、作成していたのですが、
以下のように、合計値を求めるセルの中に空白セルを含む場合、
image
このようなエラーとなりました。
解決策を教えて頂きたく、よろしくお願い致します。

元データ

希望する完成形

こんにちは

空欄を0扱いにしてよいなら

dt.AsEnumerable.GroupBy(Function(r) r("果物").ToString()).Select(Function(g) dt.Clone.LoadDataRow({cobj(g.Key)}.Concat(dt.Columns.Cast(Of DataColumn).Skip(1).Select(Function(dc) cobj(g.Sum(Function(r) if(Int32.TryParse(r(dc.ColumnName).ToString, new int32),CInt(r(dc.ColumnName).ToString),0))))).ToArray,False)).CopyToDataTable()

になります。ただし上記はシート上0と表示されます。0の部分を空欄にする必要ありますでしょうか?

1 Like

ありがとうございます。
無事に計算できました。
この計算後のリストを使い、さらに集計をしていく上で
0があった方が良いのか、逆に0が悪さをしてしまうのか、現時点では
判断がつかないので、
ご面倒をお掛けしますが、空白の際の式も教えて頂けますでしょうか。

少し冗長ですがいかがでしょうか

dt.AsEnumerable.GroupBy(Function(r) r("果物").ToString()).Select(Function(g) dt.Clone.LoadDataRow({cobj(g.Key)}.Concat(dt.Columns.Cast(Of DataColumn).Skip(1).Select(Function(dc)    if(g.Sum(Function(r) if(Int32.TryParse(r(dc.ColumnName).ToString, new int32),CInt(r(dc.ColumnName).ToString),0))=0,cobj(""),cobj(g.Sum(Function(r) if(Int32.TryParse(r(dc.ColumnName).ToString, new int32),CInt(r(dc.ColumnName).ToString),0)))))).ToArray,False)).CopyToDataTable()
1 Like

いつもありがとうございます。
0が消えていることが確認できました。
本当にいつもありがとうございます。

1 Like

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