- 締切済み
先ほどの質問の続きですで申し訳ございません。
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...() 」で書いた場合はどうなるんでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- HohoPapa
- ベストアンサー率65% (455/693)
エクセルのスプレッドシートを扱うときに 多くの場合、 =SUM(A1:A5) や =INT(B5) といった具合に、出来合いの関数を使うわけわけですが 加えて、 VBAのfunctionを使うことで 自前の関数を作り使うこともできることから 今回のような解を紹介しました。 sub getCode() ・・・ end sub このような記述を使い期待される処理を行うことは可能ですが この場合、この命令を明示的に呼び出す必要があり、 呼び出す契機(イベントと呼びます)が必要です。 つまり、ボタンを配置してクリックするとか シートが書き換わったときに行うとか シートが選択されたときに行うとかです。 このイベントが明示されないと コードを紹介できません。 また、 計算の元となるデータたちがどのセルにあり 判定した結果をどのセルたちに書き込む必要があるのかがわからないと コードを提示できません。
- 中京区 桑原町(@l4330)
- ベストアンサー率22% (4373/19606)
元の質問に繋げないと、何を問うてるのか判りません。
補足
あ、失礼いたしました。下記に追加いたします。 「就業時間基本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」判定とは出てくれません。 どなたか、正しい判定方法を教えてください。