お力をお貸しください。
Csvファイルから読み込んだDatatableの情報を項目ごとに値を集計したいです。
|カラム1|カラム2|
itema 1
itema 100
itemb 2
itemb 200
itemc 3
itemc 300
Datatable内で操作したい場合、どのようなアクティビティになるか教えてください。
お力をお貸しください。
Csvファイルから読み込んだDatatableの情報を項目ごとに値を集計したいです。
|カラム1|カラム2|
itema 1
itema 100
itemb 2
itemb 200
itemc 3
itemc 300
Datatable内で操作したい場合、どのようなアクティビティになるか教えてください。
sumireさん
ありがとうございます、合致しています。
DataTable型の変数.Compute(”sum(カラム名)”, Nothing)
で列の合計を取得出来ます。
オブジェクト型で帰って来るので、string型で取得したい場合は
DataTable型の変数.Compute(”sum(カラム名)”, Nothing).toString
int型で取得したい場合は
Integer.Parse(DataTable型の変数.Compute(”sum(カラム名)”, Nothing).toString)
でとれます!
ExcelでいうところのSUMIFってことですね!
そしたら
他所のサイトを貼るだけでごめんなさい…
こんにちは
LINQ使えばできそうですが、かなり複雑になると思うので、今回のケースの個人的なお勧めはDictionaryに詰め込む方法です。計算量もO(n)で済みます。
サンプル添付します。
Sample20191004.zip (10.7 KB)
n-shiumiさん
ありがとうございます。以下の通り指定してみたのですが構文エラーとなりました。
【指定内容】
Integer.Parse(dt1.Compute(“Sum(Column2”,str_Jyoken).ToString)
※str_Jyokenには「“Column2='” & row(“Column1”).ToString & “'”」
【エラー】
IncludeExceptionDetailInFaults=true により作成された可能性のある ExceptionDetail の値:
System.Data.SyntaxErrorException: 集約引数の構文エラー : 可能な ‘Child’ 修飾子を含む単一列の引数を指定してください。
なぜか教えていただけませんでしょうか?
Youichiさん
サンプルありがとうございました。
端的にお聞きすると、Csvで取り込んだ現在使用しているDatatableではなく、新たにDictionaryを作ってそちらに入れ込みながら、計算し、Csvへ書き戻す際はまたDictionary→DataTableへ書き戻す感じでしょうか?
すみません、すこし勘違いしていました。
項目ごとに合計を出したいのですね!!
項目がわかっている場合にこのようにとることができます!これはitemaだけ集計してます。
↓
データテーブル変数.Compute(”sum(カラム2)”, ”カラム1=‘itema’”)
(データテーブル変数、カラム2、カラム1、itema、は必要に応じて変更してください。カラム1、カラム2は列名でitemaは項目名です。)
全部の項目を集計したい場合は、
データテーブルをカラム1の重複がないようにフィルタリングする
データテーブルをループで回す
以下の式で、項目ごとに集計する
データテーブル変数.Compute(”sum(カラム2の値)”, ”カラム1=‘カラム1の値’”)
というようなかたちになると思います!
こんにちは
端的にお聞きすると、Csvで取り込んだ現在使用しているDatatableではなく、新たにDictionaryを作ってそちらに入れ込みながら、計算し、Csvへ書き戻す際はまたDictionary→DataTableへ書き戻す感じでしょうか?
最終的な集計データの扱い次第ですね。
元のDataTableに書き戻しても良いですし、新規に集計結果のDataTableを構築しても良いかと思います。
またEXCELに書き出すなら直接個々の値をWriteCellで書き込むようなケースもあると思います。
n-shiumiさん
うまくお伝え出来ず恐縮です。
サンプル.pdf (126。4 キロバイト)
こちらのような単純なファイルで、
本当に申し訳ありません、.netからやり直せ!と思いますがどうぞご教授いただきたく。
n-shiumiさん
ありがとうございます。何とか解決しました。御指南ありがとうございます。
This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.