卒業研究 最適マンニング作成問題
文教大学 情報学部 経営情報学科 根本研究室 辻村 大介
私は、大学1年生のときにアルバイトを初めた。3年目にもなると色々な仕事を任せられるようになったが、それと同時に、従業員の不満や、経験と勘だけに頼った仕事のやり方を、まのあたりにした。
その中でも特に「マンニング」というその日1日の営業に使われる、レジの人員配置スケジュール表の作成には、様々な条件を満たしてなくてはならず誰にでもすぐに作成できるものではなく、多くの時間を必要とするので従業員達の大きな負担となっている。また、手書きでマンニングを作成する為、書き間違えや様々な問題が起こっており、働いている人達の間で不満が生じている。
このような状態をORで得た知識を使って、解消したいと考えた。そこで、ORで研究されている「スケジューリング問題」をこの問題に適用した。
また、ORの手法を用いた理由は、経験や勘に頼るのではなく、理論的に求めることによって、従業員の負担が軽減され、不満も減少すると考えられるからである。
次の第2章では、「マンニング」とはどういうものか。さらに、そこに起きている問題点などについて説明する。また、第3章からは、その問題に対して具体的なアプローチの方法について説明していき、結果については、第6章で説明する。さらに、第7章以降では、研究途中で感じた、疑問点について取り組んだ。
2-1. マンニングとは
マンニングとは、私のアルバイト先の食品レジで用いられる、その日1日の営業における、レジの人員配置スケジュール表のことである。以下のようなことが記載されている(図2-1参照)。
1.日付、天候と今日の責任者
2.作成する上での参考にした過去のデータの日付、売上金額、ガント(売上予算比率)
3.今日のガント(売上予算比率)
4.何時から誰がどのレジに入るか
5.休憩時間を何時から何時まで取るか
6.予想売上点数(商品が何個売れるか)
7.実績売上点数(実際に売れた商品の数)
8.仮説稼働台数(稼動していなければならない台数)
9.予定稼働台数(マンニング上で何台稼動する予定か)
10.実績稼働台数(実際の稼働台数)
11.客待ち人数(何人のお客様がレジに並んだか)
図2-1「マンニング」
2-2. 現状
契約の更新は、半年ごとにおこなわれ、それに基づいた個々の契約が記載された「ワークシート」と呼ばれるものが毎月発行され、以下のようなことが記載されている(図2-2参照)。
1.職務(どこの売り場を担当しているのか)
2.社員番号
3.社員群(社員、アルバイト、パートなどの区別)
4.氏名
5.休日パターン(休みの曜日)
6.その日ごとの出勤時間と退社時間、休憩時間
7.変更(その日の契約に変更などがある場合)
「マンニング」は、人の手で作られていて、上記で説明した「ワークシート」を基にし、作成条件と、過去のデータ(過去の「マンニング」)、作成者の経験、意思に基づいて作成されている。また、レジは103から117と名付けられ、15台で構成されている(図2-3参照)。
作成条件については、2-3で詳しく説明する。
図2-2「ワークシート」
図2-3「レジの構成図」
2-3. 作成条件
作成条件は、次の通りである。
1. 「ワークシート」の記載通りに作成する。
2. 「仮説稼働台数」を満たしていなければならない。
3. 103レジは、常に稼動していなければならない。
4. その日の稼動させる台数は決まっている。
作成条件1の「ワークシート」については、2-2で説明する。
作成条件2の「仮説稼働台数」とは、過去のデータから割り出された1時間ごとの必要レジ台数のことである。詳しくは第5章で説明する(図1参照)。
作成条件3は、103レジが他のレジよりも通路が広く取ってあり、車椅子優先レジになっているからである。
2-4. 問題点
マンニング作成には様々な条件を満たしていなければならず、これを人の手によって作成しているため、数々の問題が起こっている。
問題点は次の通りである。
1.作成には、様々な条件を満たしていなければならなく、経験が必要とされる。
2.(1)のことから作成するには、多くの時間を必要とする。
3.書き間違いによるミス。
4.レジ配属の不平等。
5.休憩時間が不適当。
6.急の欠勤などによる、「マンニング修正」に手間と時間がかかる。
問題点4は、レジには均等にお客様が来るわけではなく、忙しいレジと忙しくないレジがある。このことからレジの配属がいつも同じだと不公平が起こるということである(図の2-4参照)。
図2-4「お客様の流れ」
問題点5は、実働時間の半分あたりに休憩時間を取ることができず、始業間際や終業間際という時間帯に休憩を取らされているということである(図の2-5参照)。
図2-5「休憩時間の不適当の例」
3-1. スケジューリング問題とは
スケジューリング問題は、多くの仕事あるいは活動(スケジューリング用語ではジョブ(job)という)を種々の制約のもとで実行しなければならないとき、実行可能なスケジュールや、最適なスケジュールを見出す問題である。従って、効率的な運用が求められるあらゆる組織においてスケジューリング問題が存在する。【1】
3-2. 整数計画問題とは
最適化問題において、変数が整数値をとるという制約がいくつかの変数に付いているとき、これを整数計画と呼ぶ。整数値を取る変数は、整数変数と呼ばれる。整数計画問題は、NP困難と呼ばれる問題クラスに属しており、厳密解をいつでも効率的に求める算法の存在は、理論的に絶望視されている。しかしながら、様々な技法の開発と計算機の高性能化に伴い、実用的には十分短い計算時間で解ける問題のクラスとサイズは、いまも広がり続けている【2】。
3-3. スケジューリング問題の整数計画アプローチ
スケジューリング問題は0-1変数を用いて整数計画問題として定式化することができる。1つの仕事あるいは作業はある時点においてある1台の機械でしか処理できず、また機械はある時点において1つの作業しか処理できないことをはじめとするスケジュールに対する各種を、0-1変数を含む形式によって表現する。例えば、一機械問題の場合には、仕事 i を j 番目に処理するとき Xij = 1とし、その他の場合を0とする【3】。
4-1. 制約条件
第3章に示した、手法を用いて「マンニング」を作成をする。しかし、2-3・2-4で示した作成条件や問題点を、全て加味して解くのは、困難であるため、以下の3つのことを制約とし定式化をする。
1.「ワークシート」通りに作成する。
2.「仮説稼働台数」を満たしていなければならない。
3.
休憩時間が不適当。(休憩時間を適当にする(図の4-1参照))
図4-1「休憩時間の適当の例」
この3つを制約に選んだ理由は、「マンニング作成問題」は「レジの人員配置問題」と、「レジの人員スケジュール問題」との2つの問題に分けることができ、一般的にこのような問題に対しては、「レジの人員スケジュール問題」を解いた後に、「レジの人員配置問題」を解くのが良い解(実行可能解)を得られやすいからである。
4-2. 定数と変数の説明
定数 αij
i は従業員を指し、i
= 1, … , n 人いるとする。
j は時間を意味する。また、αij が契約時間内のとき αij = 1とし、契約時間外は
αij = 0 とする。
変数 Xij
従業員の休憩時間が適当になるような範囲内に X を用意し、Xij = 1 のときは働き、Xij = 0 のときは休憩中とする。
従って、α と X には次のような関係が成り立つ。
α = 0 のとき、必ず X = 0 となり、α = 1 のとき、その従業員の「適当な休憩時間」の範囲にある場合、X = 0 または、X = 1 となる。
4-3. 定式化
目的関数
実行可能解を求めれば良いので、適当な変数を置く。
制約
・「ワークシート」通りに作成する
αij が、働くとき αij = 1とし、働かないとき
αij = 0
・「適当な休憩時間」 例-適当な休憩時間の範囲が11時から13時で、必ず1時間休憩をとる場合
Xi11 + Xi12 + Xi13 = 2
・「仮説稼働台数」を満たしていなければならない
α1j + ( α2j * X2j) + ・・・・・ + αnj >= 仮説稼働台数
・X が、必ず 0 か 1 をとる
Xij ∈ { 0 , 1 }
5-1. LINDOとは
「LINDO」は、線形計画法、整数計画法、二次計画法といった、数理計画をコンピュータで解くための、ソフトウェアである。
線形計画法とは、複数の制約のもとで、目的関数と呼ばれる線形関数を最大化(または最小化)する問題である【4】。また、目的関数に、二次式が含まれる場合が二次計画問題である。
5-2. LINDOで解く
第4章で説明したような方法で定式化し、「LINDO」で解いてみる。このとき用いたデータは、2000年3月の「ワークシート」を基にし、さらに、問題の規模を小さくするために、月曜日の契約だけに注目し、定式化した。
月曜日に注目した理由は、唯一、私の手元にある「マンニング」のデータが2000年3月13日(月曜日)であり、「仮説稼働台数」を得ることができ、また新たに求めたマンニングとの比較ができることからである。
5-2-1. データと設定
使用したデータの詳細は次の通りである。
・労働可能時間
-
9時30分から21時30分まで(個人の労働時間帯は「ワークシート」に基づく)
・従業員数 - 19人
・「仮説稼働台数」(表5-1参照)
・このデータで不適当な休憩時間を取った従業員は、19人中6人。
表5-1「仮説稼働台数」
時間 |
台数 |
10時 - 10時30分 | 2 |
10時30分 - 11時 | 4 |
11時 - 12時 | 6 |
12時 - 13時 | 7 |
13時 - 14時 | 5 |
14時 - 15時 | 6 |
15時 - 16時 | 9 |
16時 - 17時 | 10 |
17時 - 18時 | 10 |
18時 - 19時 | 9 |
19時 - 20時 | 8 |
20時 - 21時 | 4 |
この問題を解くに当たって、次のように設定する。
・ j は15分間隔になるようにする。
これは、時給が15分単位で支払われる関係と、休憩時間に15分、30分、45分、60分という4つのタイプがあるからである。
・「適当な休憩時間」の制約を緩めに設定し、それに合わせて変数 X を用意する。
制約を緩めに設定するというのは、「適当な休憩時間」の範囲を大きくとるということである。
5-3. 問題点
「LINDO」は、第4章、5-2-1.で説明したような方法では、解くことができない。
原因は「LINDO」で使用できる定数と変数の数を超えてしまっているからである。
現状の定式化では、約1000個の定数と変数を使用しているが、この実験で使用している「LINDO」の使用可能な変数と定数は100個のため、解けないのである。
5-4. 改善
「LINDO」でも、解けるように、式と設定を変更する。
1. 定数 α
を削除して、0 , 1 を代入する。
2.「適当な休憩時間」の制約を厳しくする。
変更点1は、定数を削除することによって、変数と定数の総使用数を減らす。
変更点2の制約を厳しく設定するというのは、「適当な休憩時間」の範囲を小さくすることである。この変更によって、変数と定数の総使用数を減らす。
以上の改善によって、変数の数が99個まで減り、「LINDO」で実行可能となった。
6-1. 結果
「LINDO」で解いた結果、仮説稼働台数を満たすことができなかった時間がいくつか存在したため、実行可能スケジュールを得ることができなかった(表6-1、図6-2参照)。しかし19人、全ての従業員が適当な休憩時間の範囲内で休憩を取ることができた。
表6-1「LINDOによる結果」
時間 |
仮説稼動台数 | 予定稼働台数 |
10時 - 10時30分 | 2 | 6 |
10時30分 - 11時 | 4 | 7 |
11時 - 12時 | 6 | 9-11 |
12時 - 13時 | 7 | 7-12 |
13時 - 14時 | 5 | 8-14 |
14時 - 15時 | 6 | 11-17 |
15時 - 16時 | 9 | 14-16 |
16時 - 17時 | 10 | 12-15 |
17時 - 18時 | 10 | 11-15 |
18時 - 19時 | 9 | 7-9 |
19時 - 20時 | 8 | 7-8 |
20時 - 21時 | 4 | 7 |
※予定稼働台数の左の数字が最小予定稼働台数、右の数字が最大予定稼働台数
図6-2「LINDOの結果と仮説稼働台数の比較」
6-2. 問題点
全ての従業員が適当な休憩時間の範囲内に休憩を取ることが可能になったが、制約の「適当な休憩時間」を見てもわかる通り、t を15分間隔すると、15分の休憩のときは良いが、それ以外の休憩パターンに関しては、必ずしも休憩を連続して取れるとは限らない。例えば、ある1時間が適当な休憩時間の範囲として、30分の休憩を取らなければならないとすると、「連続して休憩を取らなければならない」という制約が入っていないため、最初の15分働いて、次の15分休憩を取り、その後また15分働いて、最後の15分は休憩を取る、というような状況が生まれてしまう。
6-3. 解決案
6-2で挙げた問題点を解決する方法は、2つある。一つは変数
t(15分間隔)の他に、変数 z(45分間隔)と 変数 h(60分間隔)を新たに用意する方法。もう一つは、実験では、t
は15分間隔になるように設定しているが、「仮説稼働台数」は、1時間ごとに求められている。この関係を利用して、連続して休憩時間が取られていない状態であっても、4つある
t のうち1つでも、「0」になっていれば、他の3つの t
を「0」に変更しても、最大値における「仮説稼働台数を満たしていなければならない」という制約を守ることができる。だが、この方法では最小値における「仮説稼働台数を満たしていなければならない」という制約を守れなくなってしまうので、適当な休憩時間の範囲内で、なるべく「予定稼働台数」が多い時間帯に、連続して休憩を取るようにするといったような調整が必要になってくる。短い範囲(時間帯)での作業なのでさほど難しい作業ではないと言える。
前者の解決案は、変数を大幅に増大させしまうので、「LINDO」では実行不可能になってしまうので、今回の研究では後者の方法を採用し、結果以下のような「予定稼働台数」になった(表6-3参照)。また、変更後と変更前とではほとんど台数に変化なく変更できた(図の6-4参照)。
表6-3「変更後の予定稼働台数」
時間 |
仮説稼働台数 | 予定稼働台数 |
10時 - 10時30分 | 2 | 6 |
10時30分 - 11時 | 4 | 7 |
11時 - 12時 | 6 | 9-11 |
12時 - 13時 | 7 | 7-10 |
13時 - 14時 | 5 | 9-13 |
14時 - 15時 | 6 | 11-17 |
15時 - 16時 | 9 | 14-16 |
16時 - 17時 | 10 | 12-15 |
17時 - 18時 | 10 | 11-15 |
18時 - 19時 | 9 | 7-9 |
19時 - 20時 | 8 | 7-8 |
20時 - 21時 | 4 | 7 |
※予定稼働台数の左の数字が最小予定稼働台数、右の数字が最大予定稼働台数
図の6-4「変更前と変更後の比較」
6-4. まとめ
今回の実験では、実行可能スケジューリングは求めることはできなかった。しかし、人が作る「マンニング」でも、全ての時間において、「仮説稼働台数」を満たすことは大変難しい。従って「LINDO」で解いた結果は、決して実行不可能なスケジュールとは言えなく、実際に使用されたマンニングと比較すれば、一目瞭然である(表6-5、図6-6参照)。
また、「適当な休憩時間」も達成され、さらに問題点についても良い解決案とは言えないが、解決することができ、最適マンニングを作成する上での大きな一歩を踏み出せた。
表6-5「過去のマンニングとの比較」
時間 |
人の手による 予定稼動台数 (最小値のみ) |
数理計画による予定稼働台数 (最小値のみ) |
10時 - 10時30分 | 6 | 6 |
10時30分 - 11時 | 7 | 7 |
11時 - 12時 | 8 | 9 |
12時 - 13時 | 8 | 7 |
13時 - 14時 | 10 | 9 |
14時 - 15時 | 11 | 11 |
15時 - 16時 | 13 | 14 |
16時 - 17時 | 13 | 12 |
17時 - 18時 | 10 | 11 |
18時 - 19時 | 7 | 7 |
19時 - 20時 | 7 | 7 |
20時 - 21時 | 7 | 7 |
図の6-6「過去のマンニングとの比較」
7-1. 仮説稼働台数とは
「仮説稼働台数」とは、過去のデータを基に、1時間ごとに求められ、この時間これだけのレジが稼動していれば、お客様に不満なくサービスを提供できる台数のことである(図2-1参照)。この場合のサービスとは、各レジに待ち行列ができていない状態のことを指す。
7-2. 現状-仮説稼働台数の算出方法-
1. 過去の売上金額と売上予算金額とを比較、計算し「ガント」を求める
「ガント」とは、売上予算比率のことである。
( 売上予算金額 ÷ 過去の売上金額 ) × 100 = ガント
2. 「ガント」から売上予算点数を求める
ガント × 1時間の過去の売上点数 = 1時間の売上予算点数
3. 「仮説稼働台数」を求める
1時間の売上予算点数 ÷ 500 = 1時間の仮説稼働台数
500とは、従業員1人が1時間に登録できる点数の数
7-3. 疑問点-仮説稼働台数の検証-
点数のみの情報だけで、正確な「仮説稼働台数」はもとめることができるのだろうか。
例1 - ・売上予算点数:500点 ・500人の客、全員が1点の買い物をした時
仮説稼働台数
500 ÷ 500 = 1
1台のレジだけでは絶対に足りない。
7-3-1. 提案
客数の情報から、「仮説稼働台数」をもとめる。しかし・・・
例2 - ・予想客数:10人 ・10人の客、全員が多数点買い物をした時
仮説稼働台数
10 ÷ 40 = 1
40とは、実際に1時間当りに何人のお客様にサービスを提供できたかを調査した結果である。この場合のサービスとは、「レジで会計を済ませること」という意味である。
1台のレジだけでは絶対に足りない。
7-3-2. 客数と点数の関係
客数と点数との間には実際どのような関係があるのかを調べる。
一人当り平均点数を求める(図7-1参照)。
点数 ÷ 客人数 = 1人当たりの点数
求めた平均値をプロットしてみる(図7-2参照)。
図7-1「一人当たり点数」
図7-2「プロット図」
8-1. 結果と考察
5-3-2の結果からわかったことは、平均客点数が12点前後であること(図8-1参照)。また、「仮説稼働台数」を求める時に用いるデータは、比例関係が成立つことから、点数・客数どちらから求めても良い。
今の方法でより正確な「仮説稼働台数」を求めるには、習熟度などをかみした、1時間当りの登録点数、1時間当りのサービスを提供できる客数ををもとめることである。(この場合のサービスとは、「レジで会計を済ませること」という意味である。
さらに、現在用いられている、「ガント」は予算比率であり、その比率に過去の売上点数を掛けて売上予算比率を求めている。しかし、商品の価格は様々であり、「ガント」と売上点数の間には、理論付ける関係がはっきりとあるとは言いがたい。従って、何らかの方法でより正確な売上点数を求めることが「仮説稼働台数」を求める上で重要である。
また現在、「仮説稼働台数」は手作業で求めていて、大変手間がかかっている。
図8-1「平均客点数」
8-2. 仮説稼働台数アプリケーションソフト
考察でも言ったが、現在、「仮説稼働台数」は手作業で求めているので、多くの時間と手間がかかっている。また、計算のミス、書き間違えなども、起こりうる状態であることは、言うまでもない。そこで計算をコンピュータで行うことにより、これらの問題が解消されると考えアプリケーションソフトを作成した。このアプリケーションソフト【T】は、Microsoft Visual Basic 6.0で作られたものです。
今回の研究では、目標に達することはできなかった。というよりは、最初の第1歩を踏み出したばかりと言えよう。
研究を進めれば進めた分だけ、数々の問題が出てきて最適なマンニングを作成するという問題の奥深さを痛感した。
今の段階では、マンニングを作成する上でのサポートシステムに過ぎない。今後は、実験で得られた結果から、最適な「レジの人員配置」の方法を考えていきたい。さらに、「仮説稼働台数」を現在の方法より正確に求める方法の提案を目指し、最適なマンニングの作成を目指していきたい。
本論文を書くにあたって、多くの方々の大きなご支援を頂戴致したことを厚くお礼申し上げます。特に同研究室の方々には、多くの指摘、アドバイスを頂きました。また、指導教員である根本先生には、多岐にわたるアドバイス、資料の紹介など、本当にお世話になりました。ここに謝意をあらわします。
【1】.【2】.【3】.【4】.-「OR事典2000」より引用
【T】仮説稼働台数アプリケーションソフト ● ダウンロード
プログラムソース(Microsoft Visual Basic 6.0)
Private Sub CmdEnd_Click() 'プログラムを終了する End End Sub Private Sub Command1_Click() '変数の宣言 Dim YosouKingaku As Currency Dim HikakuKingaku As Currency Dim Ganto As Single Dim HKT(10 To 20) As Single Dim YT(9 To 20) As Integer Dim YK(9 To 20) As Integer Dim KD(9 To 20) As Integer '金額を取得して変数に入れる YosouKingaku = Val(TxtYosouKingaku.Text) HikakuKingaku = Val(TxtHikakuKingaku.Text) 'ガントを求める Ganto = (YosouKingaku / HikakuKingaku) '求めた値をラベルに表示する LblGanto.Caption = Format(Ganto, "0%") '比較データ客点数を求めて表示する HKT(10) = Val(TxtHikakuTensu(10)) / Val(TxtHikakuKyakusu(10)) HKT(11) = Val(TxtHikakuTensu(11)) / Val(TxtHikakuKyakusu(11)) HKT(12) = Val(TxtHikakuTensu(12)) / Val(TxtHikakuKyakusu(12)) HKT(13) = Val(TxtHikakuTensu(13)) / Val(TxtHikakuKyakusu(13)) HKT(14) = Val(TxtHikakuTensu(14)) / Val(TxtHikakuKyakusu(14)) HKT(15) = Val(TxtHikakuTensu(15)) / Val(TxtHikakuKyakusu(15)) HKT(16) = Val(TxtHikakuTensu(16)) / Val(TxtHikakuKyakusu(16)) HKT(17) = Val(TxtHikakuTensu(17)) / Val(TxtHikakuKyakusu(17)) HKT(18) = Val(TxtHikakuTensu(18)) / Val(TxtHikakuKyakusu(18)) HKT(19) = Val(TxtHikakuTensu(19)) / Val(TxtHikakuKyakusu(19)) HKT(20) = Val(TxtHikakuTensu(20)) / Val(TxtHikakuKyakusu(20)) LblHikakuKTensu(10).Caption = Format(HKT(10), "0.0") LblHikakuKTensu(11).Caption = Format(HKT(11), "0.0") LblHikakuKTensu(12).Caption = Format(HKT(12), "0.0") LblHikakuKTensu(13).Caption = Format(HKT(13), "0.0") LblHikakuKTensu(14).Caption = Format(HKT(14), "0.0") LblHikakuKTensu(15).Caption = Format(HKT(15), "0.0") LblHikakuKTensu(16).Caption = Format(HKT(16), "0.0") LblHikakuKTensu(17).Caption = Format(HKT(17), "0.0") LblHikakuKTensu(18).Caption = Format(HKT(18), "0.0") LblHikakuKTensu(19).Caption = Format(HKT(19), "0.0") LblHikakuKTensu(20).Caption = Format(HKT(20), "0.0") '予想売上点数を求めて表示する YT(9) = ((Val(TxtHikakuTensu(10)) * 0.25) * Round((Ganto * 100))) / 100 YT(10) = ((Val(TxtHikakuTensu(10)) * 0.75) * Round((Ganto * 100))) / 100 YT(11) = (Val(TxtHikakuTensu(11)) * Round((Ganto * 100))) / 100 YT(12) = (Val(TxtHikakuTensu(12)) * Round((Ganto * 100))) / 100 YT(13) = (Val(TxtHikakuTensu(13)) * Round((Ganto * 100))) / 100 YT(14) = (Val(TxtHikakuTensu(14)) * Round((Ganto * 100))) / 100 YT(15) = (Val(TxtHikakuTensu(15)) * Round((Ganto * 100))) / 100 YT(16) = (Val(TxtHikakuTensu(16)) * Round((Ganto * 100))) / 100 YT(17) = (Val(TxtHikakuTensu(17)) * Round((Ganto * 100))) / 100 YT(18) = (Val(TxtHikakuTensu(18)) * Round((Ganto * 100))) / 100 YT(19) = (Val(TxtHikakuTensu(19)) * Round((Ganto * 100))) / 100 YT(20) = (Val(TxtHikakuTensu(20)) * Round((Ganto * 100))) / 100 LblYosouTensu(9).Caption = YT(9) LblYosouTensu(10).Caption = YT(10) LblYosouTensu(11).Caption = YT(11) LblYosouTensu(12).Caption = YT(12) LblYosouTensu(13).Caption = YT(13) LblYosouTensu(14).Caption = YT(14) LblYosouTensu(15).Caption = YT(15) LblYosouTensu(16).Caption = YT(16) LblYosouTensu(17).Caption = YT(17) LblYosouTensu(18).Caption = YT(18) LblYosouTensu(19).Caption = YT(19) LblYosouTensu(20).Caption = YT(20) '予想客数を求めて表示する YK(9) = ((Val(TxtHikakuKyakusu(10)) * 0.25) * Round((Ganto * 100))) / 100 YK(10) = ((Val(TxtHikakuKyakusu(10)) * 0.75) * Round((Ganto * 100))) / 100 YK(11) = (Val(TxtHikakuKyakusu(11)) * Round((Ganto * 100))) / 100 YK(12) = (Val(TxtHikakuKyakusu(12)) * Round((Ganto * 100))) / 100 YK(13) = (Val(TxtHikakuKyakusu(13)) * Round((Ganto * 100))) / 100 YK(14) = (Val(TxtHikakuKyakusu(14)) * Round((Ganto * 100))) / 100 YK(15) = (Val(TxtHikakuKyakusu(15)) * Round((Ganto * 100))) / 100 YK(16) = (Val(TxtHikakuKyakusu(16)) * Round((Ganto * 100))) / 100 YK(17) = (Val(TxtHikakuKyakusu(17)) * Round((Ganto * 100))) / 100 YK(18) = (Val(TxtHikakuKyakusu(18)) * Round((Ganto * 100))) / 100 YK(19) = (Val(TxtHikakuKyakusu(19)) * Round((Ganto * 100))) / 100 YK(20) = (Val(TxtHikakuKyakusu(20)) * Round((Ganto * 100))) / 100 LblYosouKyakusu(9).Caption = YK(9) LblYosouKyakusu(10).Caption = YK(10) LblYosouKyakusu(11).Caption = YK(11) LblYosouKyakusu(12).Caption = YK(12) LblYosouKyakusu(13).Caption = YK(13) LblYosouKyakusu(14).Caption = YK(14) LblYosouKyakusu(15).Caption = YK(15) LblYosouKyakusu(16).Caption = YK(16) LblYosouKyakusu(17).Caption = YK(17) LblYosouKyakusu(18).Caption = YK(18) LblYosouKyakusu(19).Caption = YK(19) LblYosouKyakusu(20).Caption = YK(20) '仮説稼働台数を求めて表示する KD(9) = cRound(YT(9) / Val(TxtTensu)) KD(10) = cRound(YT(10) / Val(TxtTensu)) KD(11) = cRound(YT(11) / Val(TxtTensu)) KD(12) = cRound(YT(12) / Val(TxtTensu)) KD(13) = cRound(YT(13) / Val(TxtTensu)) KD(14) = cRound(YT(14) / Val(TxtTensu)) KD(15) = cRound(YT(15) / Val(TxtTensu)) KD(16) = cRound(YT(16) / Val(TxtTensu)) KD(17) = cRound(YT(17) / Val(TxtTensu)) KD(18) = cRound(YT(18) / Val(TxtTensu)) KD(19) = cRound(YT(19) / Val(TxtTensu)) KD(20) = cRound(YT(20) / Val(TxtTensu)) LblKasetsudaisu(9).Caption = KD(9) LblKasetsudaisu(10).Caption = KD(10) LblKasetsudaisu(11).Caption = KD(11) LblKasetsudaisu(12).Caption = KD(12) LblKasetsudaisu(13).Caption = KD(13) LblKasetsudaisu(14).Caption = KD(14) LblKasetsudaisu(15).Caption = KD(15) LblKasetsudaisu(16).Caption = KD(16) LblKasetsudaisu(17).Caption = KD(17) LblKasetsudaisu(18).Caption = KD(18) LblKasetsudaisu(19).Caption = KD(19) LblKasetsudaisu(20).Caption = KD(20) TxtYosouKingaku.SetFocus End Sub Function cRound(tempvalue) '切り上げをする cRound = Int(tempvalue + 0.9) End Function |