• ベストアンサー

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

日時の時間のみを照らし合わせて判定するマクロを教えて下さい。 添付画像の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

  • 日付でデータを抽出したい

    A列には2007/10/1~2007/10/31と入力されていて B列にはランダムに数字が入っています。 yyyy/m/d~yyyy/m/dまでのB列の平均を求めたいです。 「yyyy/m/d」(検索する日付)は常に変えられるようにしたいです。 オートフィルタのオプションでも出来るのですが 値を求めて別セルに入力したいため それ以外の方法が知りたいです。 A列yyyy/m/dに隣接するB列の値だけなら VLOOKUP関数で求めたい日付をC1に入れて =VLOOKUP(C1,A:B,2)で求められるのですが 「yyyy/m/d~yyyy/m/d」の求め方がわかりません。 よろしくお願いします。

  • マクロでの検索の仕方をお教えください。

      24時間表示でデーター並んでいますが マクロで9:00:00検索をすると21:00:00もヒットしてしまいます セルの書式は yyyy/m/d h:mm 表示は 2013/8/29 9:00 セルには 2013/8/29 9:00:00        2013/8/29 10:00:00 1時間ごとに24時間500日くらいデータがA列にあります  21:00:00 にヒットしないようにしたいのです 宜しくお願いします。 またときにはオブジェクト変数またはWith ブロック変数が設定されていません。 というエラーになるときもありどうすればよいのかわかりません。 どうかよきアドバイスをお願いいたします。

  • 同一セルに日時があるものを日付と時間に分ける方法

    ひとつのセルに日付と時間が混在している下記の様なセルがあったとして 加工しやすいように日付と時間に列を分けたいのですがどのようにすれば よいでしょうか。 変更前例:8/8/2011 14:00(A2のセルに日にちと時間が混在) 変更後例:8/8/2011(B2のセル)、14:00(C2のセル) A列が入力されていてそのデータをB列、C列にわけたいです。 宜しくお願い致します。

  • EXCELで日付の表示

    お世話になります。 年月日のデータが3つのセルに分かれて入っており、   A   B   C   D   2005   5    1 Dのセルにつなげた日付表示をしたいのですが、 どのようにしたらよいのでしょうか。 ちなみに、セルDに「=CONCATENATE(A1,B1,C1)」と入れたら、 「200551」と表示されました。セルの表示形式を 「yyyy/m/d」としたのですが、変化なく、 セルEに「=TEXT(D1,"0!/00!/00")」と入れたら、 「20/05/51」となってしまいました。 もとデータのB列C列の表示形式を「00」にしてみましたが、 表示は「05」「01」となるのですが、セルD、Eに反映されないのです。 何か良い方法がありましたら、 教えてください。

  • 【Excel】 表示形式のyyyyを2005で表示したい。

    こんにちは E列は、他のセルを参照し、その内容から日時を表示しています。 (E列の表示形式は「m/d h:mm;@」です。) これを「yyyy/m/d h:mm;@」に変更したところ参照するセルに 年のデータが無いために先月の分が 2006/12/31 12:30 というふうになってしまいます。 これを今から「yyyy/m/d h:mm;@」に変更し2005/12/31 12:30 にするにはどうしたら良いでしょうか。

  • 可視セルを関数に組み込むマクロ

    Z列に関数を入力するマクロを組みたいです。 最初に、A-D列のみ表示し、E-Y列はグループ化して非表示にしており、 A、B、C、D、Z 列のみ表示されています。 セルZ1に、A1、B1を引数とする関数を入力します。 次に、グループ化を解除し、E-H列のみ表示し、A-D列、I-Y列をグループ化して非表示にし、 E、F、G、H、Z列のみ表示します。 マクロを実行すると、セルZ1に、E1、F1を引数とする関数が入力されるようにしたいです。 グループ化は4列ずつ行い、画面に表示されるのは常に5列のみで、 Z列には、「表示されている第1列と第2列」のセルを引数とする関数を入力するように したいのです。 Z列から見て、表示されている列が変わっていくため、RC形式のセルの単純な相対表示では あらわせません。 よろしくお願いいたします。

  • マクロで書式設定を変更したいのですが・・・

    マクロで日付の書式を変更したいと思っています。 例) 2014年7月14日 という日付が入っているセルがあるとします。 これを2014/7/14 と変更したいのです。 これはあるファイルをダウンロードした時に日付がこの書式で設定されていまして 仮にA1にこの日付があった場合に Range("A1").NumberFormatLocal = ("yyyy/m/d") と、そのファイル上でマクロを動かせば、普通に変更するのですが・・・ 別のブックでマクロを動かして、そのファイルを開いて Range("A1").NumberFormatLocal = ("yyyy/m/d") と、同じマクロを動かすと 書式が変更されずに、エラーになるのです。 日付が2014年7月14日 の場合 書式設定が標準なら「41834」になると思うのですが この場合、標準にしても 2014年7月14日 になってしまうのです。 これは、何か原因があるのでしょうか? または、別のブックからはこのようなマクロはうごかせないのでしょうか? 説明が稚拙で申し訳ないですが、ご存知の方ご教示よろしくお願いします。

  • 【Excel2010】条件付き書式で色づけ

    MATCHとINDIRECTを組み合わせてできそうなのですが、うまくできないのでご教示願います。 B2と同じ日付の列(セルC4~I9)を色づけするだけです。 但し、画像では同じsheet内に配置してありますが、実際はB2は別sheetにあります。 B2とC4~I5の日付は表示上異なりますが、実際のデータはどちらも日付型(yyyy/m/d)です。 よろしくお願いします。

  • Excelで、特定の条件を満たすと指定のセルの値を消去するマクロ

    WindowsXP環境でExcel2000を使用しています。現在A列に日付、B列にA列の日付を引数として得た曜日を表示させ、条件書式で曜日が土日ならセルの色が赤くなるように設定しています。C列には始業時間D列は終業時間がそれぞれ予定としてあらかじめ入力した状態にしてあります。そこで、上記によって取得した曜日が土日にあたるセルの右側、つまりB列およびC列の値を自動的にもしくはマクロ処理で消去したいのですが、なにか良い方法はないでしょうか? よろしくお願いします。

  • ユ-ザ-定義のセル内容を文字列に変換できますか?

    セルの書式設定で ユ-ザ-定義を"yyyy/m/d h:mm:ss" としてあるセルが有ります。 セルの値はユ-ザ-定義通り"2007/3/20 8:00:00"と表示されています。 この表示を文字列に変換し 関数 CONCATENATEで他の文字列 と結合したいのですがどの様にマクロを組めば良いのでしょうか やりたい作業は 元の値 セルの書式が日付で "1997/3/4 13:30" セルの値は"2007/3/20 8:00"ですが、内容は秒まで入っています これを、秒まで表示させたいのでユ-ザ-定義を変え"2007/3/20 8:00:00"と表示させます 次に、文字"<= もしくは>="と結合させフィルタ-オプションの参照値としたいのですが セルの内容が指数として表示されてしまいうまく結合できません  マクロの初心者ですが、ご指導宜しくお願い致します  

専門家に質問してみよう