質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

4734閲覧

VB.NET 同じIDを持つ数値の総和を求めたい

_LAGRANGE_

総合スコア44

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2016/04/07 05:12

VB.NETにおいて、たとえば、

1,10
1,15
2,5
3,15
4,30
4,55
4,25
5,20
5,10

といった具合のcsvファイルがあるとき、カンマの左側をID、右側をIDの持つ数値とします。

このときにIDが等しいものの総和を求めたいです。

上記だと

sum1 = 25
sum2 = 5
sum3 = 15
sum4 = 110
sum5 = 30

となります。

VB上ではデータグリッドビューで、
1列目=ID、2列目=数値、3列目=和
として出力させたいです。

現状だとIDの種類の数だけ以下のようなプログラムを用意しています。
・If文で IDが等しいセルの行数を取り出す
・ループでsum = sum + i行2列目.valueで加算する
・3列目に1つ1つ値を出力する

これだとIDが10個になると同じ事を10回書かないといけなくて不便です。

いい方法はないのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

まずは、条件を決めてください。
簡単な処では、
IDの範囲:1~5でよければ、加算用の値を入れる配列を5個+1個用意します。
処理系が、配列を5個確保した場合に、要素を0~4でアクセスするのかどうか
によります。
IDの値を、要素のへの指定番号として、配列の要素へ、値を加算します。
配列の範囲が不定であり、配列の要素数の上限以内であれば、
ReDim などで対応可能ですが、何事にも、便利な面があれば、不利な面もある
と云う事も、想定してください。

投稿2016/04/07 05:23

編集2016/04/07 05:26
daive

総合スコア2028

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_LAGRANGE_

2016/04/07 05:36

アドレスとしてIDを利用し、総和を出してからではなく一回ずつ指定セルへ足していくということであっていますか?思いつきませんでした。ありがとうございます。
daive

2016/04/07 07:10

>指定セル 予め用意しておいた、数値配列ですね。 EXCELなどの表は、2次元の配列と考えます。  シートの串刺しは、3次元になります。 データベースの、データも2次元の配列と考えられます。 ’ StreamReader で、一括読込してしまう場合は、 どのみち、分割処理が必要になってしまいますので、 Tak1waさんの方法の様に、するのもありで、 CSVを、ADO.NETから、ODBC/OLE-DBで読込するのであれば、 クエリも使えなくはありません。 ⇒これらは、ユーザーインターフェース(見た目&操作部分)と、  機能(ロジック)の分離を、正しく行っていれば、  機能の部分を書換える事で、対応出来たりします。
guest

0

こんにちは。

解決済みみたいですが、Linqでグルーピングして出力するのが良いと思います。

VB

1Module Module1 2 3 Sub Main() 4 5 'CSV Data 6 Dim list = New List(Of Item) 7 list.Add(New Item() With {.Id = 1, .Num = 10}) 8 list.Add(New Item() With {.Id = 1, .Num = 15}) 9 list.Add(New Item() With {.Id = 2, .Num = 5}) 10 list.Add(New Item() With {.Id = 3, .Num = 15}) 11 list.Add(New Item() With {.Id = 4, .Num = 30}) 12 list.Add(New Item() With {.Id = 4, .Num = 55}) 13 list.Add(New Item() With {.Id = 4, .Num = 25}) 14 list.Add(New Item() With {.Id = 5, .Num = 20}) 15 list.Add(New Item() With {.Id = 5, .Num = 10}) 16 17 'Calc 18 Dim result = list.GroupBy(Function(a) a.Id). 19 Select(Function(y) New With 20 { 21 .Id = y.Key, 22 .Sum = y.Sum(Function(z) z.Num) 23 }) 24 25 End Sub 26 27End Module 28 29Class Item 30 Property Id As Integer 31 Property Num As Integer 32End Class

投稿2016/04/07 05:39

編集2016/04/07 05:40
Tak1wa

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_LAGRANGE_

2016/04/07 05:52

ありがとうございます。 Linqは初めて聞いた用語なのでもう少し調べてからやってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問