• ベストアンサー

サブルーチンの方法

今までExcelシートで行っていた 1週間の各曜日毎の作業時間の計算を、VBで行う画面を作成しています。 画面イメージとしては下記のような感じです。 【】はテキストボックスで、 Excelのセルのような扱いをしています。 画面入力箇所に数値を入れて、 lostfocusで各テキストボックスを抜けると、 計算結果出力箇所に出力されます。 画面入力箇所の数値を変更したら、再計算されます。 (数値の妥当性チェック等は、説明では省略します) 規定時間【(1)規定時間(画面入力箇所)】 午前の作業時間【from(画面入力箇所)】~【to(画面入力箇所)】= 【(2)to-fromの時間(計算結果出力箇所)】 午後の作業時間【from(画面入力箇所)】~【to(画面入力箇所)】= 【(3)to-fromの時間(計算結果出力箇所】 1日の作業時間【((2)+(3))-(1)(計算結果出力箇所)】 これを7日分作ると、 変数が沢山になってしまうので、 サブルーチン化しようと思っています。 イマイチうまく出来ないので、 アドバイス、ソース等をお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • yuu200
  • ベストアンサー率20% (5/24)
回答No.3

画面のテキストボックスを配列にし、 LostFocus時、そのテキストボックスのindexを引数にした サブルーチン(計算部分)を作ればいいと思います。

その他の回答 (3)

  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.4

さて サブルーチンとするやり方ですけど、 テキストボックスは インデックス化して、番号を与えただけで どのテキストボックスかわかるようにしましょう。 また、サブルーチンの中では、なるべくグルーバル変数を使わないようにするなどの配慮も必要です。 サブルーチンの中で使う変数は、サブルーチン内で宣言するものなんです。 あと、それを7日分作ると大変とありますが、まず 1日分は できたのでしょうか? 1日分が出来ているのであれば、それをサブルーチン化することは たやすいことですよ。 1日分の作り方ができないのか、それとも 1日分は 出来てるが、それをサブルーチン化するのが できないのか どちらか 分かりませんからね。

usi-iti
質問者

お礼

>回答者の皆様 ありがとうございました。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

こんにちは。maruru01です。 No.1の人の言う通り、配列を使用するなどしましょう。 または、ユーザー定義型を使用するのもいいでしょう。 そして、配列なりユーザー定義型なりを、引数として渡して、作業時間を計算して返すFunctionプロシージャを作成すればいいのではないでしょうか。

  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.1

変数がたくさんになってしまうからサブルーチン化しようという考え自体、おかしいです。 サブルーチン化するのは、同じ処理を何度も記述しなくていいようにするためです。 変数が増えるならば、配列を使用すべきです。

usi-iti
質問者

お礼

>変数が増えるならば、配列を使用すべきです。 ご指摘の通り、同じ処理を 何度も書かなくて良いように サブルーチン化しようと思っています。 その辺が認識不足でした。

関連するQ&A

  • ACCESS 除算での小数点切上げ方法

    こんにちは。 ACCESSを使った入力フォームにて、除算の自動計算を考えております。 テキストボックスAに入力された数値÷テキストボックスBに入力された数値  の結果をテキストボックスCに小数点切り上げで計算するにはどうしたらいいでしょうか? ご回答よろしくお願いします。

  • access2000レポートで2つのテーブルからデータを持ってくる方法を教えてください

    はじめまして。ゆきこと申します。 レポートのデザイン画面でページヘッダーにある テキストボックスは テーブル2 (項目:[出力年月FROM]、[出力年月TO][出力ステータス])から それ以外は テーブル1 (項目:[部長コード][部署コード][担当者名]...とテーブル1と同じ項目はありません。)から データをもってきて表示する、 という風にしたいのですが、 ページヘッダーのテキストボックスのプロパティの コントロールソースの式ビルダで =[1]![出力年月FROM]と、各とエラーになってしまいます。 ちなみにテーブル2の中身は 日付FROM  日付TO 2005/01  2005/10 のように入っているのですが、 それを レポートのテキストボックス1に日付FROMの「2005」、 テキストボックス2に「1」という風に表示させたいのですが、 可能でしょうか。 言葉が足りないとは思いますが、 よろしくお願いします。

  • 市販ソフトをスクリプト処理したいのですが

    市販の構造計算ソフトを使って部品の強度計算をやってます。 手順は、 1.計算に必要なパラメータをテキストファイルにして保存する。 2.構造計算ソフトを立ち上げて、   ・入力パラメータを読み込むために、入力ファイル指定ボタンを押す   ・入力ファイル選択ダイアログが開き、ファイルを選択   ・テキストボックスに計算結果を書き出す出力ファイル名を入力   ・計算開始ボタンを押す   ・計算が実行され、計算結果がテキストファイルとして書き出される 3.計算結果のテキストファイルの中身から必要な数字のみをExcelに移して、表やグラフにする。 実作業では、パラメータを少しずつ変えた100個ほどの入力テキストファイルを作り、構造計算ソフトでファイル名の指定、入力、ボタン押しを100回繰り返し、出力された100個の結果をまとめてます。 上の手順1と3はExcel VBAで作業の負荷を軽減するツールを作ったのですが、2は手作業でやっており、100件で1時間ほど束縛されております。 市販ソフトの繰り返し入力の単純作業をスクリプト処理する方法はないのでしょうか?

  • 計算をFLASHかjavascriptで

    FLASH8 win を使っております。 ホームページ上に FLASHかjavascriptで計算表を作りたいと思っております。 たとえば (1)のテキストボックスに任意数値入力 (2)のテキストボックスに任意数値入力 ((1)テキストボックス-(2)テキストボックス)×7000=(3)テキストボックス (3)テキストボックス÷30=(4)テキストボックス のように(1)と(2)を入力すれば(3)と(4)が自動入力されるような仕組みは どのようにしたらよろしいのでしょうか。 よろしくお願い申し上げます。

  • VB2008で日付と時間の計算

    教えて下さい。 VBで日付と時間の足し算をしたいのですがやり方がわかりません。 フォームに6つのテキストボックスを配置し、6つのテキストボックスには それぞれ日・時・分の数値を入力します。 例えばヤフーオークションの終了時刻を計算したい場合、 TextBox1~3に現在の日時を入力し、TextBox4~6に残り時間を入力します。 現在時刻 [4] 日 [17] 時 [44] 分 残り時間 [3] 日 [6] 時間 [30] 分 この数値の足し算結果をメッセージボックスに終了時刻として表示させるようにしたいのですが、やり方が分からず困ってます。 教えていただけないでしょうか。

  • テキストボックスの入力チェック(ACCESS VBA)

    テキストボックスに何かを入力し、フォーカスが他のものに移動したときに、LostFocusイベントで入力内容のチェックをかけています。(文字数チェック、ストアドをつかって入力内容と一致するものがDBにあるかなど) もし、入力が誤っている場合には他のものにフォーカスを移さず、そのテキストボックスにフォーカスを残したい(setfocusを使用)のですが、setfocusをしてもlostfocusされてしまうため、うまくいきません。 VBではValidateイベントというものがあるようですが、 VBAではみあたりません。 どなたかよい方法をご存知でしたら教えてください。

  • ステップごとにファイル名を変えて出力する方法を教えてください(fortran)

    数値計算で初期から100ステップまで計算するとします。 ステップ10,20,30・・・のときの結果を見たいのでそれぞれステップ数でファイル名をつけてテキストに出力するようにしたいのですが,どうやったらいいのでしょうか? どなたか教えていただけませんか?

  • ExcelVBA テキストボックスについて

    フォーム上100個のテキストボックスがあります このテキストボックスに入力制限を加えたいのですが、どのように書けばよろしいでしょうか?  ・半角数字だけしか入力できない(計算に使う)  ・入力すると、1,234,567のような表示になり、右詰め  ・10桁までしか入力できない  ・予定の計算結果だと、10億を超えない  ・計算結果は数字が入力されるたびLabel1に表示される 私の作ったマクロだと、全てのテキストボックスに同じようなマクロを登録する結果になってしまい、これってもっと短くかけるのでは?と思い、質問いたしました よろしくおねがいします

  • アクセス 式ビルダの使い方

     アクセス初心者です。いまいち式ビルダの使い方がわからないので教えてください。    フォーム画面にて、テキストボックスに入力した値を計算させて、テキストボックスに計算値を自動に入力するようにしたいです。 テキストボックス1*テキストボックス2のような、式を作り(例えです)テキストボックス3に計算値を反映したいです。    式ビルダでできるでしょうか?教えてください。

  • CASLIIについて

    CASLIIについて質問します。 キーボードから数字を入力し、計算した結果を画面に出したいのですが、計算するために数値に変換する方法と画面に出力するために文字に変換する方法を教えてください。

専門家に質問してみよう