• 締切済み

初めてメールさせて頂きます。エクセルでの、時間の差分について教えて下さ

初めてメールさせて頂きます。エクセルでの、時間の差分について教えて下さい。宜しくお願いします。 マシーンの稼働率を算出する為に、LogData内のStart/Endの時間から差分を求め、その合計を、業務営業で割り、稼働率を求めたい所ですが、時間表示が、以下のように12H(AM/PM)になっています。 2010/10/18 Start 12:10 AM: 2010/10/18 End 1:23 PM 2010/10/18 Start 12:45 PM: 2010/10/19 End 3:01 AM このような行が、Monthlyベースで、多い時は900行前後有ります。今回、稼働率の精度を上げる為に、初めてLogDataをベースとした解析に取り組んでいますが、具体的な作業としては、"Start-AM","Start-PM","End-AM","End-PM"というワークシートに、フィルターで指定した各データを、それぞれのワークシートにコピーし、個々のワークシートにて、12Hから24Hに表示変換し、最終的に、それらを1つのファイルにマージさせています。また、マージさせたファイルから差分を求める際、0時をまたぐ場合のデータに関しては、別のワークシートにて、End時間にStart時間(0時までの残時間)を加算し、それを再度、マージしたデータに反映させて、最終的なSUMを求め、稼働率を算出しました。 以上の説明で、ご理解頂けるか不安ですが、解析工数を削減する為のアドバイスを頂きたく、深くお願い申し上げます。 不明な点が有りましたら、お知らせの程、宜しく願い致します。

みんなの回答

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 回答番号:ANo.2です。  もし、毎回のStart時刻やEnd時刻、及び、毎回の稼働時間の一覧表が必要ない場合には、条件さえ揃えば、Sheet2が無くとも総稼働時間や稼働率を求める事も可能です。  LogDataが並んでいるSheet1のB列の2行目以下には、途中に空欄等のLogData以外のデータが存在せず、加えて、B2よりも上のセルには空欄が存在しない場合には、 Sheet2を使用しなくても、次の数式で総稼働時間を求める事が出来ます。 =SUMPRODUCT(VALUE(SUBSTITUTE(MID(OFFSET(Sheet1!$B$2,,,COUNTIF(Sheet1!$B:$B,"><")-1),FIND("M:",OFFSET(Sheet1!$B$2,,,COUNTIF(Sheet1!$B:$B,"><")-1))+3,99),"End ",))-VALUE(SUBSTITUTE(LEFT(OFFSET(Sheet1!$B$2,,,COUNTIF(Sheet1!$B:$B,"><")-1),FIND("M:",OFFSET(Sheet1!$B$2,,,COUNTIF(Sheet1!$B:$B,"><")-1))),"Start ",)))  更に加えて、LogDataは必ず、最古のデータが最も上に表示され、最新のデータが最も下に表示される場合には、Sheet2を使用しなくても、次の数式で稼働率を求める事が出来ます。 =SUMPRODUCT(VALUE(SUBSTITUTE(MID(OFFSET(Sheet1!$B$2,,,COUNTIF(Sheet1!$B:$B,"><")-1),FIND("M:",OFFSET(Sheet1!$B$2,,,COUNTIF(Sheet1!$B:$B,"><")-1))+3,99),"End ",))-VALUE(SUBSTITUTE(LEFT(OFFSET(Sheet1!$B$2,,,COUNTIF(Sheet1!$B:$B,"><")-1),FIND("M:",OFFSET(Sheet1!$B$2,,,COUNTIF(Sheet1!$B:$B,"><")-1))),"Start ",)))/(VALUE(SUBSTITUTE(MID(INDEX(Sheet1!$B:$B,COUNTIF(Sheet1!$B:$B,"><")),FIND("M:",INDEX(Sheet1!$B:$B,COUNTIF(Sheet1!$B:$B,"><")))+3,99),"End ",))-VALUE(SUBSTITUTE(LEFT(Sheet1!$B$2,FIND("M:",Sheet1!$B$2)),"Start ",)))

iline
質問者

補足

こんなに早くご対応頂けるとは思いもせず、深く感謝申し上げます。ここで、追加補足させて頂きます。今回、9月分に関しての稼働率を、時間がかなり掛かりましたが算出しました。パラメータを述べます。マシーン台数:4台,明細数(注文依頼書):400-900件/マシーン(明細間には、システムセットアップの為のInterval(段取り)が発生),Logdata:htmlファイル。 作業手順を以下に述べます。 1.html -> txtに変換 フリー変換ソフトを使用(900件の場合でも、全てのデータをドラック&ドロップで変換可能。非常に助かりました) 2.変換されたtxtファイルを、100ファイル毎(1-100,101-200のような)のディレクトリに仕分けし、個々のディレクトリ内の100ファイルをマージする(フリー結合ソフトの制約の為、100ファイルまでしか出来ない為) 3.マージされたtxtファイルを、xlsファイルに変換。その際、区切り文字として、タブ/スペースを選択 4.個々のxlsファイルを、1つのファイルにコピー/ペーストして、マージする 5.マージされたファイルは、以下のように、個々のセルに表示される Start 8/31/2010 08:21:45 PM End 9/01/2010 01:27:02 AM Start 9/01/2010  01:33:08 AM End 9/01/2010 01:34:06 AM Start 9/01/2010 01:37:13 AM End 9/01/2010 01:38:39 AM Start 9/01/2010 01:44:16 AM End 9/01/2010 03:27:53 PM 尚、今回の稼働率算出から、明細間のIntervalも算出し、Yield低下の原因として、Intervalにかなりのバラツキがある事が判明しました。参考までに、これまでは、オペレータからの停止時間の自己申告によって、運用状況を把握していたので、Intervalのバラツキは、全く見えていませんでした。 作業手順については先日のメールの通りですが、今回アドバイス頂いた内容をじっくり読ませて頂き、改めてメールさせて頂きますので、ご理解の程、宜しくお願い申し上げます。

全文を見る
すると、全ての回答が全文表示されます。
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 確認したいのですが、LogDataは、Startの日付、Startの時刻、Endの日付、Endの時刻が、各々別のセルに表示されているのではなく、 2010/10/18 Start 12:10 AM: 2010/10/18 End 1:23 PM というパターンの文字列が、1つのセルに表示されていると考えて宜しいのでしょうか?  もし、そうだとした場合には、以下の様にされると良いと思います。  今仮に、Sheet1のB2以下にLogDataが並んでいて、Sheet2に24時間表示に変換したデータを表示するものとします。  まず、Sheet2のA2セルに次の数式を入力して下さい。 =IF(Sheet1!$B2="","",Sheet1!$B2)  次に、Sheet2のB2セル(Start時刻を表示するセル)に次の数式を入力して下さい。 =VALUE(SUBSTITUTE(LEFT($A2,FIND("M:",$A2)),"Start ",))  次に、Sheet2のC2セル(End時刻を表示するセル)に次の数式を入力して下さい。 =VALUE(SUBSTITUTE(MID($A2,FIND("M:",$A2)+3,99),"End ",))  次に、Sheet2のD2セルに次の数式を入力して下さい。 =IF(AND(ISNUMBER($C2),ISNUMBER($B2)),$C2-$B2,"")  次に、Sheet2のB2セルとC2セルを選択してから、次の操作を行って下さい。 選択範囲を示す黒い太枠の内側にカーソルを合わせて、マウスを右クリック   ↓ 現れた選択肢の中から、[セルの書式設定]を選択してクリック   ↓ 現れた[セルの書式設定]ウィンドウの[表示形式]タグをクリック   ↓ [分類]欄の中から、[ユーザー定義]を選択してクリック   ↓ [種類]欄に yyyy/m/dd h:mm と入力する   ↓ [セルの書式設定]ウィンドウの[OK]ボタンをクリックする  次に、Sheet2のD2セルを選択してから、同様の操作を行い、[セルの書式設定]ウィンドウの[種類]欄に [h]:mm と入力後、[セルの書式設定]ウィンドウの[OK]ボタンをクリック下さい。  そして、Sheet2のA2~D2の範囲をコピーして、同じ列の3行目から1000行目辺りまで貼り付けて下さい。  次に、総稼働時間を表示するセルに、Sheet2のD2セルと同じ書式を設定し、次の数式を入力して下さい。 =SUM(Sheet2!$D:$D)  最後に、稼働率を表示するセルに次の数式を入力して下さい。 =SUM(Sheet2!$D:$D)/(MAX(Sheet2!$C:$C)-MIN(Sheet2!$B:$B))

全文を見る
すると、全ての回答が全文表示されます。
  • shinkami
  • ベストアンサー率43% (179/411)
回答No.1

自分の思い違いかもしれませんが、日付と時刻は別々の系列とご理解されているのではないでしょうか ウィンドウズの世界では日付も時間も連続した正の実数の系列として取り扱われています。 従って 差分 = END - START でよろしいのでは 因みにセルA1に =now()と入力してどのように表示されるか確認してください。 尚 EXCELのカテゴリーは 「teacupちょっとききタイ! > デジタルライフ > ソフトウェア > Office系ソフト」 です。

参考URL:
http://www.eurus.dti.ne.jp/~yoneyama/Excel/hiduke.htm#hiduke-text
全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBで配列の差分を取りたいのですが

    VB2005を使用しています。 エクセルに2つのシートには更新前と更新後のデータがあって、 それの差分を取るために一度2次元配列に確保してから処理を行い たいのですが、配列を入れ子にして順にループ、比較させると時間がかかりすぎてしまいます。 どうしたらよいのでしょうか?

  • 時間の算出について教えて下さい。

    時間の算出について教えて下さい。 1日の稼動時間が8時間で、4時間使用した場合に値が50%になるような計算式を知りたいです。 ちなみに15分を0.25Hで入力します。 最小値は0.25Hです。 分かりづらいと思いますが、よろしくお願いします。

  • 全シート内の差分比較とそのセル色塗りつぶしマクロ

    Excelファイルデータの差分比較とそのセル塗りつぶしのマクロを作成したいのですが、今の自分には、下記のマクロでとどまっており、 マクロを実行するファイル内シートにデータをコピーしたり、 マクロ内でその都度、シート名の記載の変更、差分比較データ範囲の変更が必要になり、大変不便で困っております。 やりたい事は、マクロでユーザがExcelのファイルを選択出来て、 そのファイルの中の全シートのデータについて、差分比較とそのそのセルの塗りつぶしをして、塗りつぶしをファイルへ反映させて保存させることです。 どうか、お分かりの方がいらっしゃいましたら、ご教示をお願い出来ますと大変助かります。 各シート内のデータは、列、行共にほぼ同じフォーマットで値が入っています。 それらのシート内のデータで修正した箇所を見つける為、差分比較がしたいです。 例えば、シートが3つの場合は、 1つ目のシートは修正前のデータ、 2つ目のシート内は1つ目のシートの値を部分的に修正したものです。 3つ目のシート内のデータも、1つ目のデータの値を更に再修正したものです。 この3つのシート内のデータを差分比較したいです。 シートの数は、選択したファイルによって異なります。 Sub TEST1() Dim s1, s2 As Worksheet 'Worksheetsオブジェクト用 Set s1 = Worksheets("修正前S装置検索システム") '比較元シート名 Set s2 = Worksheets("修正後装置検索システム") '比較先シート名 Dim arr1 As Variant, arr2 As Variant arr1 = s1.Range("$A$2:$W$548").Value arr2 = s2.Range("$A$2:$W$548").Value For i = 1 To UBound(arr1, 1) For j = 1 To UBound(arr1, 2) If arr1(i, j) <> arr2(i, j) Then '塗りつぶし処理 s1.Cells(i + 1, j).Interior.Color = RGB(255, 0, 0) s2.Cells(i + 1, j).Interior.Color = RGB(102, 255, 51) End If Next Next End Sub

  • エクセルデータのリンク貼付(?)

    ワークシート1は、データ入力用に使用し、月単位で初期化しています。 ワークシート2は、年間データ用に使用し、ワークシート1で入力したデータをすべて保持しています。 ワークシート1と2の形式・内容等は同じです ワークシート2は、使用上必ずデータの1行目(B6:H6)を表示させております。 行数が最終的には5000~7000行位になりますので、貼付位置を確定するのに大変な為、A列にオートフィルタで、入力済は1を未入力行は0を表示させ、A列が0の行を先頭に表示出来るようにしています。 今は、ワークシート1で入力したデータをワークシート2へ貼り付けていますが、このような設定で、下記のようにしたいのですが、ご指導のほどよろしくお願いいたします。 ワークシート1の入力したデータを、自動的にワークシート2の未入力行の先頭行に(値だけでも可)表示する。   ワークシート1     ワークシート2 (B6:H29)入力済  (B6:H29)入力済(表示済) 30行目入力 (B30:H30)    150行目へ  (B150:H150) 31行目入力 (B31:H31)    150行目へ  (B151:H151)

  • エクセルVBAで機械の稼働時間を管理

    機械の稼働時間を管理したいのですが、機械の種類も多く稼働時間が機械によってさまざまです。 機械も途中でストップして、また再開したり、またストップしたりとあるので稼働時間計算がわかりません。 イメージが伝わるかわからないですが、教えて下さい。 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(距離) B(速さ)  C(所要時間) D(時間) 1 3.9    5     0:46     13:52? 2 14.7    5     2:56     16:49? 3 0.9     5     0:10     17:00 まず、C1の「所要時間」を出すのに、 「3.9/5/24」の計算で「h:mm」表示にし、0:46としました。 これを1分繰り上げて(「h:mm:ss」だと0:46:48になるので)0:47と 表示させるには、どうしたら良いですか? C3も同じく0:11の表示にしたいです。 そうやってCの「所要時間」を全て出した後、今度はD3の17:00から 逆算してD1のスタート時間を算出するにはどうしたら良いですか? 単純なD3ーC3の引き算だと、計算が合わなくなります。 意味わかって頂けたでしょうか。。 宜しくお願いします。

  • 時間の加算(その2)php

    DBからある範囲の日付けの時間だけを取ってきて取ってきた時間の差分の累計を計算したいです。 例えば、4月16日から5月15日までのスタート時間とエンド時間を所得 させてエンド引くスタート、日々の差分を累計するようなことが実現したいです。 下記のように書いてデータだけは引っ張ってこれるようになったのですが加算方法が分かりません。ご教授いただけませんでしょうか? (ソース?php $ym = date("2022-04-22"); $tm = date("n",strtotime($ym));//月 $ty = date("Y",strtotime($ym));//年 $countdate=date('t',mktime(0,0,0,$tm,1,$ty));//4月の日数を計算 for ($i = 0; $i < $countdate; ++$i) { $d = mktime(0, 0, 0, $tm, 16 + $i, $ty); //日付ごとの配列のキー $dd = date('Y-m-d', $d); foreach($e_all as $e_time){ if (in_array($dd, (array)$e_time->date_time)) { echo $e_time->start_time;   echo $e_time->end_time; }} } ?> 因みにechoで表示されたデータは 09:00:00 20:00:00 08:00:00 18:00:00 09:00:00 19:10:00 となっていて 順番に登録してある4/20 のスタート時間、エンド時間 4/21のスタート時間、エンド時間4/22のスタート時間、エンド時間 の並びで取れています。よろしくおねがいします

    • ベストアンサー
    • PHP
  • エクセル 0:30 を整数の 30 に置き換える方法

    -------------------------------- A B C 1 start end lap 2 10:30 11:00 0:30 *C2の数式  =b2-a2 *C2のセルの表示形式  [h]:mm --------------------------------  上記のエクセルワークシートにおいて  C2で得た 0:30 という値を 整数の 30 に変える方法はありませんでしょうか。  0:30 は30分を表していて、それを整数 の 30 という数値に置き換えたいという 意味です。

  • EXCELで24時間表記を午前・午後表記に変えたい

    A列に、12:00、14:00、19:00、23:00……と午後の時刻を24時間表記されたデータがあります。 これをB列に、0:00、2:00、7:00、11:00のように「PM」や「午後」などの文字がいっさい付かない時刻数字だけの12時間表記に変えたいのですが、その方法が分かりません。 表示形式の時刻には必ず後ろに「PM」が付くし、ユーザー定義で「PM」などを付けないで時刻だけで12時間表記にすることをいろいろ試してみましたがどうしてもできません。 午前の時刻は「AM」など付かないで表わせるのに、午後はどうして「PM」がつくのかも分かりません。 表示形式で出来なければ、何らかの関数式でB列にそのような表記をする方法はないでしょうか。 データが多いので、いちいち入力し直すのは大変なので、ご存知の方教えてください。

  • エクセル 時刻の計算 特定範囲の時間を求める。

    いつもお世話になっております。 標題につきご回答お願い申し上げます。 エクセル愛好家の皆様よろしくお願い致します。 平日、休日を認識し、かつ指定時刻ないの時間を求めたい。 説明 赤○の数式がわかりません。  土曜、日曜、祝日が休日稼働、それ以外は平日作業 日中はAM8:00~PM8:00(20時) 夜間はPM8:00~AM8:00です。 平日休日判定は日付の横のセルに、平日="平" 休日="日"と記載し判定しようかなと思っています。

このQ&Aのポイント
  • 都城市・市役所の寒桜が話題となりましたが、桜の開花時期はいつごろなのでしょうか。
  • また、桜の名所についても教えてください。
  • この記事では、都城市の桜の開花時期とおすすめの桜の名所について紹介します。
回答を見る