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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

3回答

7074閲覧

VBでエクセルに合計値を書き込みたい

10morokoshi

総合スコア14

VB

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2017/04/20 02:46

編集2017/04/20 04:02

###前提・実現したいこと
現在このような表(一部省略しておりますが、一か月分あります)を
エクセル出力するためのプログラムをVisual Studio2015で作成しております。
データベースから日付ごとの数値を持ってきて、該当する日付のセルに挿入するまでのコードは書いたのですが、
これらの日付ごとの合計値を出すのにはどういった計算をすればいいでしょうか。
御教授願います。

一番下の合計という行をコードで計算したいです。
イメージ説明

###現在の処理の流れ
前提
データベースには
no(会員noのようなものでその人固有です),名前,日付情報,入れる数値があります
1 no列の取得
2 それに応じた氏名の取得
3 対応する日付に数値を入れる
4 もしnoが前のものと変わっていれば改行
変わっていなければまた対応する日付に数値を入れる
繰り返す

稚拙な文章ですみません。

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

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

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

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

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

guest

回答3

0

既に他の方からアドバイスいただいているとおり、おおきくわけて2つの実現方法があります。

①VB側で合計を計算して、Excelの合計行に計算結果の値を出力する
※akabeeさんご提案の方法です。

・個人別合計(横計)は個人合計用の変数を1つ作成し、人が変わるタイミングで出力する
・日付別合計(縦計)は日付毎に合計を計算する変数を31個用意してそれぞれ加算していき、最後に合計行に出力する

②VB内では合計計算をせず、合計行に合計をとるためのExcel関数(SUM関数)を出力する
※takitoさんご提案の方法です。

・個人別合計(横計)は例えば提示いただいたレイアウトの左上がA1の場合、=SUM(C2:AG2)のような式をAH2セルに出力する(列は1日~31日の範囲、行は出力行です)
・日付別合計(縦計)は例えば提示いただいたレイアウトの左上がA1の場合、=SUM(C2:C6)のような式をC7セルに出力する(列は1日~31日の各列、行はデータ行の範囲)


出力先のExcelファイルをあらかじめ用意しておいたテンプレートファイルなどからコピーして作成する場合、テンプレートにあらかじめ合計行を埋め込んでおく方法もとれます。
この場合、埋め込んでおくのは上記②のような計算式となります。


自分が作成するとしたら、②案を採用します。
作成後のExcelで数値を変更した際に、合計行が自動的に計算されるからです。

ただ、作成したファイルをあまりExcelに詳しくない人が使う場合には、計算式ではなくVB側で計算した合計数値を出力しておいた方が無難かもしれません。

どの方法を採用するかは環境や好み、今後のメンテナンス性などによって選択すればいいと思います。
参考になれば幸いです。

投稿2017/04/20 04:38

jawa

総合スコア3013

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

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

10morokoshi

2017/04/20 05:51

仕様上、①を採用することとなりました。ご回答ありがとうございました!
guest

0

合計セルにSUM関数を入れてしまう方法も

xlSheet.Range(合計セル位置).Formula = "=sum(合計対象セル範囲)"

投稿2017/04/20 03:13

takito

総合スコア3111

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

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

10morokoshi

2017/04/20 03:17

そんな方法があるんですね…!ありがとうございます!
guest

0

ベストアンサー

現状の処理内容が分からないのでなんともいえないのですが、恐らく以下のようなことをしているとすると、

1:no列を決定
2:その列の日付ごとの値を保持
3:保持した値をセルに書き出し
4:no列の次の行に移動
5:no列に値があれば1に戻って繰り返す
6:no列に値がなければ処理終了

少し手順を追加して、

0 :日付ごとの合計値を計算するための変数を用意
1 :no列を決定
2 :その列の日付ごとの値を保持
2.5:日付ごとの合計値を計算するための変数に、それぞれの日付の値を足す
3 :保持した値をセルに書き出し
4 :no列の次の行に移動
5 :no列に値があれば1に戻って繰り返す
6 :次のno列がなければ、最後に合計行を出力し日付ごとの合計値を計算するための変数の値を出力して終了

という計算をすれば良いかと思います。
「日付ごとの合計値を計算するための変数」は、なんでも良いのですが例えば31個の要素を持つ配列を用いて実現できると思います。

また、特にプログラムでそこまで実現することが目的でないのであれば現状の状態でExcelを出力して手作業で合計行を作っても良いかと思います。
手作業になりますが、EXCELのSUM関数等で容易に実現可能かと思います。

投稿2017/04/20 02:59

編集2017/04/20 03:01
akabee

総合スコア1947

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

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

10morokoshi

2017/04/20 03:16

ありがとうございます!流れを追記しました。こちらを参考に試みてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問