
機械の稼働時間を管理したいのですが、機械の種類も多く稼働時間が機械によってさまざまです。
機械も途中でストップして、また再開したり、またストップしたりとあるので稼働時間計算がわかりません。
イメージが伝わるかわからないですが、教えて下さい。
VBAは現在勉強中です。
下記はイメージ
・機械の種類5種類1、2、3、4、5
・A列に日付と時間(2012/9/7 2:00)
・B列に機械の番号(1号機)
・C列に状態(スタート・ストップ)
A B C
1 2012/9/7 2:00 1 スタート
2 2012/9/7 5:00 2 スタート
3 2012/9/7 10:00 1 途中ストップ
4 2012/9/7 11:30 3 スタート
5 2012/9/7 13:50 2 再スタート
6 2012/9/7 10:00 1 途中ストップ
7 2012/9/7 13:50 2 再スタート
8 2012/9/8 16:00 1 停止
9 2012/9/8 17:00 2 停止
という感じにシート(sheet1)に入力していき、(sheet2)にそれぞれの現在の稼働時間や動いていなければ停止中という表示をしたいのです。
select caseを使って、機械ごとにまずは機械種類(B列)で一番下(新しい行)を検索して、その行の状態(C列)によってス停止なら「停止中」 スタートなら今の時間からスタートの時間合計を表示。
まではできるのですが、途中停止などが何度も入ったりするので、さっぱりわかりません。また、日をまたいだりしてるので時間計算もうまくできません。
説明が下手ですが、イメージ出来たかたは教えて下さい。
よろしくお願い致します。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
これが
A B C
1 2012/9/7 2:00 1 スタート
2 2012/9/7 5:00 2 スタート
3 2012/9/7 10:00 1 途中ストップ
4 2012/9/7 11:30 3 スタート
5 2012/9/7 13:50 2 再スタート
6 2012/9/7 10:00 1 途中ストップ
7 2012/9/7 13:50 2 再スタート
8 2012/9/8 16:00 1 停止
9 2012/9/8 17:00 2 停止
機械ごとにシートを分けて
A B C D
開始時刻 停止時刻 停止種別 経過時間
2012/9/7 2:00 2012/9/7 12:00 一時
2012/9/7 13:00 2012/9/7 16:00 終了
のようなら簡単なのですけどねぇ。
CC_Tさんも危惧しているように、
記入漏れや記入間違いのチェックも含めて考えないと
危なっかしくて使えないとおもいます。
No.2
- 回答日時:
リストでダブりがあったりでおかしいですが、実データはそんなことないだろうという前提で回答します。
一時停止せずに再スタートとか、まさかあり得ないですよね?
機械の状態と、運転スタートからの積算運転時間が知りたいとして、時間の方は「基準時」とステータス変更時間の間で経過時間を計算し、スタートまで遡って積算させるロジックで行けるんじゃないかと。
以下、セル参照や行検索の部分は省略してるから、そのままVBAに入れても動きっこないですが、
ロジックの参考になるでしょうか?(^^;
~~~~~~~~~~~~~~~~~~~~~~~
'---宣言
dim 「基準時」 as date,「運転時間」 as date
dim 「機械」 as integer,「判断行」 as integer
dim 「表示」 as string
'---機械別の処理
for 「機械」=1 to 5 '<--リアルタイム更新しないなら、For~Nextループで済む
「基準時」=now '<--これはマクロ実行時を基準とする場合。
「運転時間」=0
「判断行」=当該機械の最新状況の入った行数 '<-これ、別ループで検索ね。
'---
判断:
Select case 判断行のステータス
case 停止
「表示」="停止中"
goto 次の機械
case スタート
「表示」="運転中"
「運転時間」=now-スタート時間
goto 次の機械
case 再スタート
「表示」="運転中"
「運転時間」=「基準時」-判断行の時間 '(暫定計算)
goto 次の行
case 途中ストップ
表示="一時停止中"
「基準時」=判断行の時刻
goto 次の行
'---
次の行:
「判断行」=当該機械の次のステータス変化行。 '<-これも、別ループで検索ね。
goto 判断
'---
表示更新:
状態表示セル=表示
運転時間セル=「運転時間」 ’←24時間越対応のため、セルの書式設定は[hh]:mmにして下さい。
'---
次の機械:
next 「機械」
'---
end sub
No.1
- 回答日時:
別のシートや別の表に、整理した表を作りましょう。
以下の表は、元の表を並び替えて、始動、停止の時刻を、2、3、5、6、8、9…29、30行目に繰り返して入力した物です。時刻は「日付と時刻を一緒に、yyyy/mm/dd hh:mmの形式で入力します。
4、7、10、13…行目には、予め、式を入力しておき、表示形式を「hh:mm」にして「時:分」の表示にします。
23行目も、式を入力したら、表示形式を「hh:mm」にして「時:分」の表示にします。
A B C D
1 1号機 2号機 3号機
2 始動 2012/9/7 2:00 2012/9/7 5:00 2012/9/7 11:30
3 停止 2012/9/7 10:00 2012/9/7 13:50
4 時間 以下の式1 以下の式2 以下の式3
5 始動 2012/9/8 16:00
6 停止
7 時間 以下の式4 以下の式5 以下の式6
(略)
29 始動
30 停止
31 時間 式は略 式は略 式は略
32 稼動時間 以下の式7 以下の式8 以下の式9
33 状態 以下の式10 以下の式11 以下の式12
式1
=IF(ISBLANK(B2),0,IF(ISBLANK(B3),NOW(),B3)-B2)
式2
=IF(ISBLANK(C2),0,IF(ISBLANK(C3),NOW(),C3)-C2)
式3
=IF(ISBLANK(D2),0,IF(ISBLANK(D3),NOW(),D3)-D2)
式4
=IF(ISBLANK(B5),0,IF(ISBLANK(B6),NOW(),B6)-B5)
式5
=IF(ISBLANK(C5),0,IF(ISBLANK(C6),NOW(),C6)-C5)
式6
=IF(ISBLANK(D5),0,IF(ISBLANK(D6),NOW(),D6)-D5)
式7
=SUMIF(B2:B31,"<2000/1/1",B2:B31)
式8
=SUMIF(C2:C31,"<2000/1/1",C2:C31)
式9
=SUMIF(D2:D31,"<2000/1/1",D2:D31)
式10
=IF(MOD(COUNTIF(B2:B31,">=2000/1/1"),2),"稼働中","停止中")
式11
=IF(MOD(COUNTIF(C2:C31,">=2000/1/1"),2),"稼働中","停止中")
式12
=IF(MOD(COUNTIF(D2:D31,">=2000/1/1"),2),"稼働中","停止中")
式7~9は、個々の始動から停止までの時間のみを抽出して合計する式です。
日付時刻として入力されている物か、始動から停止までの時間が計算された物なのかの判断は「データが2000年よりも小さいか?」で判定しています。
式10~12は「日付時刻として入力されている物を数えて、奇数なら稼働中、偶数なら停止中」と言う式です。
日付時刻として入力されている物か、始動から停止までの時間が計算された物なのかの判断は「データが2000年よりも大きいか?」で判定しています。
稼働中の機器は「NOW()」により現在時刻を使用して計算しているので、F9キーを押すと再計算されて、現在の稼働時間が表示されます。
回答ありがとうございます。
エクセルではchie65535さんのように稼働時間計算は作成できたのですが、1年分のデータを入力しているとどうしても、ファイルが重くなったり、後から日付を指定して表示出来なくて困ってしまったのでVBAで作成できたらと思い質問しました。
丁寧な回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのVBAで日付を検索し転...
-
VBAのapplication.ontime メソ...
-
エクセルvba. PDF保存 フォルダ...
-
iPhoneのプッシュ通知の過去履...
-
iPhoneの通知が何故か来なくな...
-
スマホにYahooニュースが来ない...
-
最近、iPhoneがおかしいです 私...
-
PCでのAPEXで何度もアップデー...
-
ラインの通知設定有りにしてる...
-
MusicCenter For PC 再生できない
-
アンドロイドから通知無しで鳴る音
-
AQUOS sense6バッテリー
-
iPhoneの電話設定で、特定の番...
-
ファミリーリンクの通知が消え...
-
RainmeterのVista Rainbarについて
-
iPhoneアプリのLINEの音が鳴ら...
-
スマホ上にあるカレンダーで、...
-
iPhone 通知音変え方
-
電話の着信が来てないのに着信...
-
このPASMOの通知来ないようにで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルのVBAで日付を検索し転...
-
Eclipseの対応する括弧の強調表...
-
DataGridViewでyyyy/MM/dd
-
JSPからYYYYMMDDで日付入力する
-
ユーザーフォームのラベルに日...
-
VisualBasic6.0のFormat関数で...
-
コンボボックスに日付を表示する
-
今日より前の書き方 マクロ
-
1本あたり○円と表示する時どの...
-
VB6.0 のformat関数について
-
【Excel VBA】条件に合った行の...
-
【VBA】土日をスキップして日付...
-
テキストボックスにカレンダー...
-
ExcelVBAでSQLサーバの日付時刻...
-
VBA 日付、未来の日付はエラー...
-
日付をクリックすると別ページ...
-
Excel VBA で入社日から今日迄...
-
「eclipseで作るカレンダー(ス...
-
Pythonプログラムの使用期限設定
-
エクセルVBAで機械の稼働時間を...
おすすめ情報