- ベストアンサー
VB.NETについて
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
老婆心ながら。 「SQL Serverにあるデータを集計処理してExcelブックに書きこむ」という処理を、 For や While という反復処理のキーワードが魔法のようにやるというわけではありません。 次のような流れですね。 SQL Server … (A) RDBだからSQLで操作。テーブル、レコードとかフィールドとか。 | … (B) ADO.NET、ADO、ODBC など VB.NET … (C) アルゴリズム | … (D) OLE(COM)、ブックではなくCSVならファイルの読み書き Excel ブック … (E) Excel、CSV? 画像では (E) の最終形しか示されてませんが、まず (A) のテーブル構造がわからないと、(C) のロジック(あなたがいう For とか While の部分)の指針を示しようがないですね。また、具体的なコードを示そうとしても、(B)がどういった方式かわからないので、コードの示しようがないです。また、(E) はブックといってますが、(D) の方式がわからないし、(E) はほんとうにブックでしょうか?CSVのテキストファイルではないですか? さて。 (A) が一般的な正規化をされていて、(B)がADO.NET、(D) がOLE、(E) がブックだとすると、 (A) は 売上ID、店舗名、商品名、売上高 だとすれば、 (C) では、店舗名、商品名、売上高を順に並べ替えて DataSetを取得しましょう。このとき、店舗名、商品名をキーにして、売上高で合計してあればよいですが、SQLは割愛します。 並べ替えられ、集計されたDataSetが取得できたならば、あとはブックに順にはめていくだけです。 VB.NET で OLE で Excel を新しくひらくときは、以下。 Dim xlBooks As Excel.Workbooks = xlApp.Workbooks Dim xlBook As Excel.Workbook = xlBooks.Add Dim xlSheets As Excel.Sheets = xlBook.Worksheets そうすると、xlSheets 変数に、ワークシートの参照ができるから、Range や Cells プロパティで座標を指定してはめていけばよいでしょう。 DataSetが複数行に対して、Excel一列になりますから、For は列を中心にするとわかりやすいかな。列を固定して、DataSetが、同一店舗で、商品名が前のレコードと違えば、セルの行を次へ。店舗、商品名の両方がちがえば、For は つぎのループをまわしてください。 お悩みなのは、典型的なキーブレイクの処理です。 まず、方式を明らかにしましょう。これが明らかになったなら、どこにどういう値が入らなければならないかという現象(I/O)を理解したうえ、順次、判断、繰り返しを用いたフローチャートを書くこと。一生懸命考えてください。 キーワードがなにかすべてをやってくれるわけではないですよ。 がんばってください。
お礼
分かりづらい質問の中で回答をして下さってありがとうございます。 方式などは書いて下さった通りです。また方式等をしっかりと理解し、考えていこうと思います。