こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

さらに問題があります

『「就業時間基本5:30」なら「A」判定
「就業時間基本2:45」以上「5:29」なら「B」判定
「就業時間基本1:00」以上「2:44」ならば「C」判定
「修行時間基本1:00」未満なら「空白」
と判定させたいです。「就業時間基本」はワークシート関数で求めています。
例えば、2月1日から2月28日まで、VBAを使って「判定する」ならどうすれば良いでしょうか?
基本時間 If 関数で2:45 以上 5:29 「B」 判定としようとすると、おそらくは「シリアル値の問題」で簡単に「B」判定とは出てくれません。
どなたか、正しい判定方法を教えてください。』
に対して、
Option Explicit

Function getCode(MyTime As Range) As String
 Dim wsTime As Date
 wsTime = MyTime.Value - Int(MyTime.Value)
 If wsTime = TimeSerial(5, 30, 0) Then
  getCode = "A"
 ElseIf ((wsTime >= TimeSerial(2, 45, 0)) And _
     (wsTime < TimeSerial(5, 30, 0))) Then
  getCode = "B"
 ElseIf ((wsTime >= TimeSerial(1, 0, 0)) And _
     (wsTime < TimeSerial(2, 45, 0))) Then
  getCode = "C"
 ElseIf wsTime < TimeSerial(1, 0, 0) Then
  getCode = ""
 Else
  getCode = ""
 End If
End Function
で確かに=
=getCode(C)
でC列から「判定」ができりことはわかりました。
もう一点さらに困っている点があります。
2018年2月
A B・・・・・C     
1(金)   5:45
2(土)   5:15
と土曜だけ最大5:15が最大時間となります。
土曜日だけを判定し直すのはどうやったら良いのでしょうか?
曜日を返す変数も入れなければなりません。これも困っているのです。   

投稿日時 - 2019-01-21 06:26:47

QNo.9579877

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(4)

ANo.4

一部訂正
誤:添付の図ではF2:G4に判定用の表を作り、セルC2に以下の式を入れて下にコピーしています。

正:添付の図ではF2:G4に判定用の表を作り、セルD2に以下の式を入れて下にコピーしています。

投稿日時 - 2019-01-21 09:37:22

ANo.3

大元の質問へのリンクが無いので前提が良く解りませんが、なぜセル関数でやらないのでしょう?
添付の図ではF2:G4に判定用の表を作り、セルC2に以下の式を入れて下にコピーしています。
=IFERROR(IF((WEEKDAY(A2)=7)*(C2>=1*"5:15"),"A",VLOOKUP(C2,$F$2:$G$4,2)),"")

投稿日時 - 2019-01-21 09:36:03

ANo.2

なにやら
『「就業時間基本5:30」なら「A」判定
という条件に加え
「5:45」の条件と「5:15」の条件が増えているように読み取れます。

土曜日以外と土曜日での
判定条件をそれぞれ示してみてください。

投稿日時 - 2019-01-21 09:14:16

ANo.1

>土曜日だけを判定し直すのはどうやったら良いのでしょうか?
土曜日の条件を付け加えれば良いでしょう
Function getCode(MyTime As Range) As String
 Dim wsTime As Date
 wsTime = MyTime.Value - Int(MyTime.Value)
 If wsTime = TimeSerial(5, 30, 0) Then
  getCode = "A"
 ElseIf wsTime = TimeSerial(5, 15, 0) And _
   MyTime.Offset(, -1).Value Like "*土*" Then
  getCode = "A"
 ElseIf ((wsTime >= TimeSerial(2, 45, 0)) And _
   (wsTime < TimeSerial(5, 30, 0))) Then
  getCode = "B"
 ElseIf ((wsTime >= TimeSerial(1, 0, 0)) And _
   (wsTime < TimeSerial(2, 45, 0))) Then
  getCode = "C"
 ElseIf wsTime < TimeSerial(1, 0, 0) Then
  getCode = ""
 Else
  getCode = ""
 End If
End Function

投稿日時 - 2019-01-21 08:44:08

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-