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

締切り済みの質問

先ほどの質問の続きですで申し訳ございません。

Option Explicit

Function getCode(MyTime As Date) As String
 Dim wsTime As Date
 wsTime = MyTime - Int(MyTime)
 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
これで、参照セルを変えるでかけでみごとに動きました。
もう一点質問です。
Function で数式を呼び出せるとはわかりますが、
セルの内部に「=getCood(参照セル)」だけでは、申し訳ございませんがいまいち理解ができません。
あえて、通常の「 Sub...() 」で書いた場合はどうなるんでしょうか?

投稿日時 - 2019-01-20 20:55:43

QNo.9579723

困ってます

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

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

-広告-
-広告-

回答(2)

ANo.2

エクセルのスプレッドシートを扱うときに
多くの場合、
=SUM(A1:A5)

=INT(B5)
といった具合に、出来合いの関数を使うわけわけですが
加えて、
VBAのfunctionを使うことで
自前の関数を作り使うこともできることから
今回のような解を紹介しました。

sub getCode()
・・・
end sub
このような記述を使い期待される処理を行うことは可能ですが
この場合、この命令を明示的に呼び出す必要があり、
呼び出す契機(イベントと呼びます)が必要です。

つまり、ボタンを配置してクリックするとか
シートが書き換わったときに行うとか
シートが選択されたときに行うとかです。
このイベントが明示されないと
コードを紹介できません。

また、
計算の元となるデータたちがどのセルにあり
判定した結果をどのセルたちに書き込む必要があるのかがわからないと
コードを提示できません。

投稿日時 - 2019-01-20 21:22:16

ANo.1

 
元の質問に繋げないと、何を問うてるのか判りません。
 

投稿日時 - 2019-01-20 21:03:07

補足

あ、失礼いたしました。下記に追加いたします。
「就業時間基本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」判定とは出てくれません。
どなたか、正しい判定方法を教えてください。

投稿日時 - 2019-01-20 21:09:12

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-