プログラミング中級3
日計入力


なぜ日計入力?


私は、ある方にパソコンを教えています。 その方をTさんと呼ぶことにします。

Tさんは個人商店の店主で、自分の店の売上をパソコンで計算して記録しておきたいと望まれました。 (今時「レジ」も扱えないのか、と突っ込まないでください。) (^^;

単純な日計計算(1日の売上金額合計)なので、EXCEL を使うことをおすすめしました。 しかし、Tさんは、パソコンの「ちょ〜〜〜入門者」で、EXCEL の操作は難し過ぎました。(^^;
そこで私は、Tさんのために、日計入力のプログラムを作って差し上げました。

せっかく作ったのですから、ここに公開して、お勉強のネタといたします。




どんな仕様がいいのかな?


すでに画面とプログラムを公開していますので、今から「どんな仕様がいいのかな?」と尋ねても、 公開済みの画面しか思い浮かばないかもしれませんね。すみません。 m(_ _)m

でも、中級の段階に入って、すでに「カレンダー」という1本のプログラムを勉強しましたので、 もうこれからは あなたが仕様を積極的に考える習慣を つけてください。 そのために、サンプルとして簡単な日計入力を選んだのですから。

まず、目的は何でしょうか?

  1. 1日の売上計算を EXCEL操作より簡単に行うこと。
  2. 1日の売上合計結果を消さずに残しておくこと。
  3. 月ごとに合計を表示すること。

この3つが、Tさんと話し合った結果、出て来ました。

1つずつ説明していきます。

  1. 1日の売上計算を EXCEL操作より簡単に行うこと。
    EXCEL が簡単だと思われる方には、ちょ〜〜〜入門者が、どういう点に悩むかが理解できませんね。
    まず「セル」の概念を理解するのに、時間がかかります。
    また、日によってお客様の数や、売上げた商品の数が違うのですから、合計関数の SUM をあらかじめセルに埋め込むにしても、 どのセルを使用すればよいでしょうか? (1行目を使用すればよいのですが・・・)
    他にも、どのシートを使用して1日の計算をするか、合計値はどうやって該当月日の欄にコピーするか (Tさんは、まだコピーの仕方を知りません。)等々、実に細かいところまで EXCEL の知識が必要とされるのです。

    一度、あなたが EXCEL をまったく知らないと仮定して、考えてみてください。 ちょ〜〜〜入門者には、EXCEL の操作すら難しいということが理解いただけるでしょう。

  2. 1日の売上合計結果を消さずに残しておくこと。
    これは EXCEL 上なら、簡単ですね。問題ないと思います。

  3. 月ごとに合計を表示すること。
    これも、EXCEL に まかせました。 つまり、月の一番下のセルに、合計関数 SUM() の式を埋め込みました。
    EXCEL で簡単に出来ることまで、VBA でやる必要はありません。

以上のことでわかると思いますが、1日の売上げ合計が簡単に入力できることが、最大の問題なのです。 それで、VBA のフォームを使用して、日計入力させるようにプログラムを作成しました。




どんな EXCELシート がいいのかな?


まず、上記目的の 2. 3. を満たす EXCEL シートを考えてください。
  2. 1日の売上合計結果を消さずに残しておくこと。
  3. 月ごとに合計を表示すること。


2. から、毎日の売上合計をセルに記録しておくことが必要だとわかります。
1日1セルの関係がピンときますか?

3. からは、月ごとにまとめておく必要性を感じ取りましょう。
1日1セルですから、1月分を縦なり横なりにまとめておいて、 合計計算(SUM関数)しやすく、さらには「見やすく」しましょう。
中級からは、自分以外の人にも使ってもらえるようなプログラム作りを意識しましょう。

結果として、私は次のようなシートを作りました。
イメージ

1年を1ブック(ファイル)とし、4ヶ月で1シートとしました。
「4ヶ月で1シート」と決めたのは、Tさんのパソコンの解像度が低かったためです。 私のパソコンなら、6ヶ月で1シートとしたことでしょう。

後日談です。Tさんには「シート」の概念もわかってもらえず、結局1年で1シートとしました。(涙)? (笑)? でも こんなTさんでも、私の作った「日計入力」を使って、「エクセルを使っている」気になっているのです。 私は、良いことをしたのでしょうか? (疑)

また、上記目的 1. のために、「日計ボタン」をつけました。 このボタンをクリックすると、ユーザフォームが現れて、 EXCEL 操作より簡単に売上げ入力&合計ができる、というわけです。
本当は「日計ボタン」と表示せずに、「日計」とだけ表示したかったのです。 しかしTさんは「ちょ〜〜〜入門者」なので、「ボタン」と言ってもなんのことかわからなかったのです。
「ボタン」の説明をして、「ボタンに見えませんか?」と尋ねると、「見えない」との返事。(T_T)
仕方なく「日計ボタン」と表示して、私が「日計ボタンを押してください」と言うと、 やっと納得してくれました。
(最近「クリック」という言葉を覚えてくれました・・・) (^^;




どんなフォームがいいのかな?


さてそれでは、上記目的の 1. を満たす フォームを考えてください。
  1. 1日の売上計算を EXCEL操作より簡単に行うこと。

この目的から、1日の売上計算のために、売上を逐一(全部)入力することが必要だとわかりますか?
売上げを入力するためには、売上げ用のテキストボックスが必要ですね。

でも、一体いくつのテキストボックスが必要なのでしょうか?
売上げは1日1件じゃないでしょう。 1日に何件あるかは、決まっていないことでしょう。

こういう場合どうすればよいかと言うと、まず依頼主に聞いてみることです。
「1日に売上げが何件ありますか?」と。
その返事によって、売上げ用のテキストボックスの数を決めましょう。 業種によって、数はずいぶん違うと思われます。

Tさんの場合は、取り扱う商品がちょっと特殊だったため、1日に数十件だという返事でした。 それで、テキストボックスを50こ使ってフォームを作りました。 もし50こで足りなければ、50こずつ入力してもらえば、どんどん足し算されますので問題ありません。


では次に、日計用のフォームに必要な項目は何でしょう?
「日計」なのですから、日付が必要だとわかりますか?

今回は、1年1ブックですから、すでにブックを選択してオープンしている段階でしか このプログラムを実行できないことを考慮して、年はすでに決定されているものと考えます。
要するに「月日がわかれば、どのセルに合計を記録するかわかる」ということです。
従って、「月」と「日」のテキストボックスが必要ですね。


さらに必要な項目を考えてみましょう。
あと、どうしても必要なものは、入力された売上げの合計を、該当セルに記録するタイミングを知るものです。 要するに「いつ終了するか」ってことですね。
売上げの件数が決まっていませんから、どこまで入力されれば終わりかは、プログラムで判断できません。 無論50こ全部のテキストボックスが入力されたら、その時は終了だとわかりますが、 10しか売上げがないのに、50も入力することなどできません。
それで、コマンドボタンを押して、終了をプログラムで判断できるようにしました。


今回のフォームです。

イメージ



1〜10 のラベル、「曜日」のラベル、「合計」のラベル、「中止」のコマンドボタンは、 ユーザフレンドリー(親切設計)になるように追加しました。


それぞれのオブジェクト名を以下に書いておきます。

  1. フォーム: F_Nikkei
  2. 月のテキストボックス: tbTuki
  3. 日のテキストボックス: tbHi
  4. 曜日のラベル: lblYobi
  5. 売上げのテキストボックス: tbKin1 〜 tbKin50
  6. 合計のラベル: lblGokei
  7. 合計金額のラベル: lblKinGokei
  8. 中止のコマンドボタン: cmdCancel
  9. OKのコマンドボタン: cmdOK


今回からは、できるだけ「仕様」に関する考え方を書いていこうと思っています。
説明のしにくい部分ではありますが、簡単なプログラムをサンプルとして、頑張ってみます。

皆さんも、身の回りのことで、どんなものがプログラムできるか、 自分ならどんなプログラムを作成するか、考えてみてください。




戻る

楽天モバイル[UNLIMITが今なら1円] ECナビでポインと Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!


無料ホームページ 無料のクレジットカード 海外格安航空券 解約手数料0円【あしたでんき】 海外旅行保険が無料! 海外ホテル