- ベストアンサー
VBAによる時間変換及び時間計算
勤務表を作成しているのですが、書式変換及び残業計算できません。 (前提) Web勤怠システムの数値をコピー&貼り付けをしてエクセルへ転記しています。なので、書式が文字列になってしまいます。 A1==>19:40 ・・・書式は時刻 A2==>20:02 ・・・書式は文字列 Range("A3") = (TimeValue(Range("A2")) - Range("A1")) / 24 これでは、上手くできません。 他の方法(式)を、教えて下さい。 合わせて、6分未満は切り捨ての式を含めてくれると嬉しいです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (4)
- Wendy02
- ベストアンサー率57% (3570/6232)
- 有田 賢治(@ARIKEN43)
- ベストアンサー率50% (563/1116)
- xls88
- ベストアンサー率56% (669/1189)
- KURUMITO
- ベストアンサー率42% (1835/4283)
関連するQ&A
- エクセル2007で時間を足したり引いたりできます?
エクセル2007を使っている者です。 A1、A2のセルに文字列でそれぞれ3時間45分、1時間30分と入っていたとして、その2つを足したり、引いたりすることはできますか? TIMEVALUE関数で文字列を時刻に直した後でセルの書式設定で時刻表示にすればできるというようなことが書いてあるページがあったのでそれをやろうとしたのですが、うまくいきませんでした。 まずA1のセルを時間に直そうとして「=TIMEVALUE(A1)」と入れたのですが、#VALUEとのエラーが出てしまいます。 どなたかお願いいたします。
- ベストアンサー
- オフィス系ソフト
- タイムカードから就業時間計算
Excel2000でタイムカードの出勤・退出時刻を入力して、就業時間を出そうとしています。 定時は8:30~17:15、休憩は12:00~12:50、14:50~15:00、17:15~17:30です。 http://www.h3.dion.ne.jp/~sakatsu/WorkingTimeCalc.htm ↑このサイトを参考に、 A列に出勤時刻(手入力)、 B列に退出時刻(手入力)、 C列に24時補正、 =IF(OR(A2="",B2=""),"",IF(A2<B2,B2,B2+1)) D列に深夜1(0:00~8:30)、 =IF(OR(A2="",C2=""),"",IF(AND(A2<TIMEVALUE("8:30"),C2>=TIMEVALUE("0:00")),MIN(C2,TIMEVALUE("8:30"))-MAX(A2,TIMEVALUE("0:00")),0)) E列に午前(8:30~12:00)、 =IF(OR(A2="",C2=""),"",IF(AND(A2<TIMEVALUE("12:00"),C2>=TIMEVALUE("8:30")),MIN(C2,TIMEVALUE("12:00"))-MAX(A2,TIMEVALUE("8:30")),0)) …の要領で、F列に午後1(12:50~14:50)、G列に午後2(15:00~17:15)、H列に夜(17:30~24:00)の式をそれぞれ入力し、I列でD~H列を合計しています。=SUM(D2:H2) このうち午前・午後1・午後2は正確に表示されるのですが、深夜・夜が0:00のままで表示されません。(退出を夜or深夜にしても0:00のままです) 午前・午後と同じような式を使っているのにどうしてなのでしょうか。どうすれば正確に出るのでしょうか。 セルの書式設定はユーザー定義で[h]:mmにしています。 今日午後から連休明けまではここを覗けないのでお礼ができませんが、よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- 時刻の計算結果を15分未満で切り捨てたい、他
勤怠簿を作っています。以前に↓にて質問させていただきました。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1652568 質問した結果、無事「深夜」「夜」の時間が出るようになりました。 そこで新たに質問が2つあります。 (1)今度はこの「深夜」「夜」の計算結果を15分未満切捨てにしたいのですが、どうすればいいのでしょうか。 「午前」「午後1」「午後2」は15分未満切捨てができています。この式を元に自分でも格闘してみたいのですが、できませんでした。。。 ちなみに「深夜」の式は =IF(OR(B2="",D2=""),"",IF(OR(B2<TIMEVALUE("8:30"),D2>=1),TIMEVALUE("8:30")-MIN(B2,TIMEVALUE("8:30"))+MAX(D2,1)-1,0)) 「夜」は =IF(OR(B2="",D2=""),"",IF(AND(B2<1,D2>=TIMEVALUE("17:30")),MIN(D2,1)-MAX(B2,TIMEVALUE("17:30")),0)) になっています。 (2)出勤が8:15以前の場合に早出としてカウントしないようにするには、どうすればいいでしょうか。 よろしくおねがいします。。。
- ベストアンサー
- オフィス系ソフト
- エクセルで残業時間を分数表示する計算式は??
日毎の残業時間を小数点で表すにはどういう式を入れればいいのでしょうか。 条件は、30分未満は切り捨てです。 残業時間→表示 月 3:29→3.0 火 3:30→3.5 水 3:59→3.5 木 3:00→3.0
- ベストアンサー
- 財務・会計・経理
- 24時間以上の表示
いつもお世話になります。 Excelで勤務実働時間の変換作業を行ってます。 元のデータは"文字列"で表示されてて、"=TIMEVALUE(A1)"を使って 12:1 → 12:01 と表示させてます。 そこで質問ですが、"24:1"以上の場合ですが、"TIMEVALUE"を使うと当然"00:01"に表示されるので、 =IF(TEXT(LEFT(A1,2),"#,###")>="24",TIMEVALUE(A1)+"24:00" と数式を入れました。続いて、同じ様に"IF"を並べて">=96"、">=72"、">=48"と作ったのですが、今度は"100:00"以上の場合です。同じく =IF(TEXT(LEFT(A1,3),"#,###")>="120",TIMEVALUE(A1)+"120:00",IF(TEXT(LEFT(A1,3),"#,###")>="100",TIMEVALUE(A1)+"96:00"を追加してみたのですが、そうすると今度は "100:1"以上はうまく表示できたのですが"36:1"以上"99:59"いかが正しく表示されなくなりました。中身を確認すると"=TEXT"表示に問題があるようです。 長々と説明させていただきましたが、ようするに、3桁~6桁の文字列表示の時刻を"TIMEVALUE"に表示させ、それを元に関数を使ってまた別の計算式を作りたいのです。 解りにくい内容ですみませんがよろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- TIMEVALUEと"時刻"の違いを知りたいです
エクセルで残業時間を計算しています。 A B 1 退社時間 残業時間 2 20:00 ? という表があり退社時間が 18:00を過ぎた場合→残業時間を求める 18:00を超えない場合→0を表示させる というようになっています。 実は既に関数は組まれており =IF(A2>TIMEVALUE("18:00"),A2-"18:00",0) という関数がB2には入っています。 そこで質問なのですが このIF関数中の論理式 「A2>TIMEVALUE("18:00")」の意味は分かるのですが、 真の場合は「A2-"18:00"」なぜこれだけで答えがでるのでしょうか? 17:30を""で囲むだけでシリアル値に戻してくれるのでしょうか? だったら、論理式の「A2>TIMEVALUE("18:00")」中にTIMEVALUEは いらないのではないでしょうか? と思い、論理式のTIMEVALUEを「A2>"18:00"」に置き換えてみたのですが答えはでませんでした・・・ 「TIMEVALUE」と「時刻をダブルクォーテーションで囲む」 違いを教えてください。
- ベストアンサー
- オフィス系ソフト
- 時間の計算が分かりません
時間の計算で、B列にいれる式が全く分からなくて困っています。 A列が 空白だったら”空白” 7:30以下だったら”空白” 8:00以上だったら”0:30” 7:31~7:59の間だったら"7:30を超えた0:30未満 =IFS(A1="","",A1<="7:30","",A1>="8:00","0:30"にANDやMAXなどを組み合わせてみたのですが出来ません。 教えてください。 宜しくお願い致します。
- ベストアンサー
- Excel(エクセル)
- エクセル 時間の合成
インターバル = TimeValue("00:50:00") 早速ですが インターバル = TimeValue("00:50:00") Debug.Print Now + インターバル これは エラーになりません。 しかし If Format(Now, "hh:mm:ss") < Format("3:00:00", "hh:mm:ss") Then 終了時刻 = Format(Now, "yyyy/mm/dd") & " " & TimeValue("3:02:00") Else 終了時刻 = Format(DateAdd("d", 1, Now), "yyyy/mm/dd") & " " & TimeValue("3:02:00") End If Debug.Print 終了時刻 + インターバル これは、型が合わないエラーです。 終了時刻は 文字列的に合成されただけ・・・だろうと 推察するのですが では、「終了時刻 + インターバル」 が 可能な終了時刻は どうして 作ればいいのでしょうか?
- ベストアンサー
- Visual Basic
- セルの書式が標準なのに文字列にできるのはなぜ?
会社のシステムで吐き出したデータですが セルの書式設定が標準なのに文字列となっています。 マクロを利用して、あるセルの値を別セルへ転記すると、 数字は数値に変換され、先頭の0は消え、桁数が多いと指数表示になってしまいます。 会社のシステムが吐き出したエクセルはセルの書式が標準なのに 中の数字が文字列でいられるのが疑問です。 会社のシステムの吐き出したデータは Microsoft Excel 2.1ワークシートで 全てのセルの書式設定は「標準」です。 で例えば 12345678901234 は 12345678901234 と表示されていて 「数値が文字列として保存されています」 となっています。(先頭に ' は入っていません) 0101という値のセルでも 表示は0101ですが 「数値が文字列として保存されています」 となっています。(先頭に ' は入っていません) それらのセルの値をマクロとかで別セルに転記すると 転記先では1.23457E+13 と表示されてしまいます。 (0101は101になります。) まっさらなエクセルに自分で手入力すると ・セルの書式設定が標準だと 12345678901234 ↓ 1.23457E+13になります。 ・セルの書式設定が数値だと 12345678901234 ↓ 12345678901234 ・セルの書式設定が文字列だと 12345678901234 ↓ 12345678901234 (ただし 数値が文字列と保存されています と注釈有) なのに会社のシステムの吐き出しデータは セルの書式設定が標準なのにもかかわらず 12345678901234 ↓ 12345678901234 (ただし 数値が文字列と保存されています と注釈有) となっています。 手入力で書式設定が標準の状態でセルに12345678901234 と表示させるには先頭に ' をつける方法しか知りませんが ' が無いのに表示されています。 でもこの該当セルをマクロで別セル(書式設定:標準)に転記すると 1.23457E+13 となります。 またシステムが吐き出したエクセルの同じシート内に 以下のマクロで転記すると ↓ Sub 転記() 行 = 2 Do If Cells(行, 6).Value = "" Then Exit Do If Cells(行, 6).Value >= 10 Then Cells(行, 7).Value = Range("A2") Else Cells(行, 7).Value = Range("A3") End If 行 = 行 + 1 Loop End Sub ↓ このマクロだと A列~F列が書式設定が標準なのに文字列として表示されているのですが 転記先のG列が書式設定が標準であっても 12345678901234 (数値が文字列と保存されています と注釈有) と同じ状態のまま転記できます。 新しいBOOKのシート2に 会社の吐き出しデータをシートコピーした後、 (セルの書式設定:標準だが文字列で表示されている) そのBOOKに登録されているマクロで シート2のセルからシート1のセル(書式設定:標準)に転記すると 数字は数値に変換され、先頭の0は消え、桁数が多いと指数表示 となってしまいます。 ちょっと混乱しています。 理屈等教えていただければと思います。お願いします。
- ベストアンサー
- オフィス系ソフト
- VBAの記述方法について
罫線や色がつけられたコピー先のエクセルファイルに値だけ貼り付けて、データを転記しようと考えています。 .Worksheets(1).Range("B2:B145").Copy xBk.Worksheets(1).Range("C5").xlPasteValuesのような式をかきまし たが、貼り付け先では、値だけコピーされず、罫線や色の情報が失われてしまします。 値のみを転記し、罫線や色、フォントの情報を残すには、どのようにコピー文を書き換えればよろしいでしょうか。 お手数をおかけいたしますが、よろしくお願いいたします。
- 締切済み
- Visual Basic
お礼
回答有難うございます。また、親切に式の説明してくれて大変有難く思っています。 おかげさまで、思い通りになりました。 大変勉強になり、有難う御座いました。