• ベストアンサー

セルの日時から時間のみ マクロ

日時の時間のみを照らし合わせて判定するマクロを教えて下さい。 添付画像のC列、D列に日時が入っています。 表示形式はユーザー定義でyyyy/m/d h:mmです。 今回行いたいのは例えば C12セルとD12セルの時間 15:45(C12セル)と15:55(D12)であればセルI12に朝礼と表示したいです。 日付は見ずに時間がこの並びになっていたら、I列に文字を表示したいということです。 C17とD17も同じです。 C列とD列の関係で日付は考えず時間で照らしあわせるには どのようなコードを書けばよいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • mt2015
  • ベストアンサー率49% (258/524)
回答No.3

サンプルマクロを作ってみました。 「朝礼」だけでなく「昼礼」「夕礼」を追加し、それぞれ開始時刻を15:45、9:30、22:30、所要時間を10分、15分、20分とします。 対象範囲は4列目~31列目までです。 C列の開始時刻と、D-Cの値=所要時間が一致しているか確認し、一致していたら文字列をI列に表示します。 Sub Sample()   sMessage = Array("朝礼", "昼礼", "夕礼") 'I列に入れる文字列   sStart = Array("15:45", "9:30", "22:30") '開始時刻   nMin = Array(10, 15, 20) '所要時間(分)      For nRow = 4 To 31     sSta1 = Format(Cells(nRow, 3).Value, "h:mm") 'C列の開始時刻     nMin1 = Int((Cells(nRow, 4).Value - Cells(nRow, 3).Value) * 1440)     For i = 0 To UBound(sMessage)       '開始時刻と、所要時間が一致しているか確認       If (sStart(i) = sSta1) * (nMin(i) = nMin1) Then         'I列に文字列代入         Cells(nRow, 9).Value = sMessage(i)         Exit For       End If     Next i   Next nRow End Sub

yyrd0421
質問者

お礼

まさにやりたかったことができました。 ありがとうございました。

その他の回答 (2)

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.2

15時なのに何故朝礼? それは良いとしてマクロでやらなきゃいけない理由がないならセル式の方が楽です セルI12に↓の式でどうでしょう =IF(AND(INT((D12-C12)*1440)=10,TEXT(C12,"h:mm")="15:45"),"朝礼","")

yyrd0421
質問者

補足

この時間から仕事開始の人もいまして(^_^;) 回答ありがとうございます。 しかしやはりマクロの方が助かります。 関数を入れるセルが多くなってしまうためブックを開く際重くなってしまいます。 また今回は例で朝礼にしていますが 他にもきまった時間で入れたい文字があるので できればマクロがいいです。 よろしくお願いします。

  • foomufoomu
  • ベストアンサー率36% (1018/2761)
回答No.1

エクセルの日付のシリアル値は、基準日(1900年1月1日だったと思う)からの日数が整数部で、それ未満の時間が小数部で記録されています。 時刻だけを比較したいなら、小数部だけを取り出して比較すればよいです。小数部を取り出す数式は =A1-INT(A1) です

関連するQ&A