_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ _/ _/ ソフト名:kt時刻入力アドイン Ver1.01 _/ 種 別:フリーソフト _/ 開発環境:Windows98SE & Excel2000SR1(9.0.3821) _/ 動作環境:上記環境にて動作確認してあります。 _/      (Excel95では動作しません) _/ 著作権者:角田 桂一 < addinbox@h4.dion.ne.jp > _/           < http://www.h3.dion.ne.jp/~sakatsu/index.htm > _/ 免 責 :このマクロを使用したことで発生したいかなる損害に _/      ついても、作者は一切責任を負わないものとします。 _/ 再配布 :内容を改変しないという条件で、再配布は自由です。 _/ 転 載 :無断転載はご遠慮願います。 _/ 履 歴 :2002/5/27 Ver1.00 _/ 2002/5/28 Ver1.01 AMPM,AM,PM 指定時の初期表示[時]を _/ [正午]固定からマシン時刻[時]に変更 _/ その他 :McAfee VirusScan(5.13a)にてウィルスチェックしてあります。 _/      ウィルスデータファイル『4.0.4203 2002/5/18受信』 _/ _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/  ※この『kt時刻入力アドイン』に収録されている【ktSelClock 】関数は   『kt関数アドイン Ver2.50 』にも収録する予定です。   利用方法・インターフェースは全く同じにする予定ですので、『kt関数アドイン   Ver2.50 』リリース後には、参照設定先をそちらへ切り替えた方が便利です。  配布ファイル内にデモブック「kt時刻入力デモ.xls 」を入れてあります。 ---------------------------------------------------------------------------- 【構文】   ktSelClock( 時刻, [AMPM], [Title], [Pos_X], [Pos_Y] )   返却値‥‥‥ Boolean型   時刻 ‥‥‥ Date 型(ByRef)   AMPM ‥‥‥ String 型(省略可、 既定値:"AMPM" )   Title ‥‥‥ String 型(省略可)   Pos_X ‥‥‥ Variant(Integer)型(省略可)   Pos_Y ‥‥‥ Variant(Integer)型(省略可) ---------------------------------------------------------------------------- 【返却値】   時刻が選択された場合は返却値として"True"が返ります。   入力キャンセルした場合は"False"が返ります。 ---------------------------------------------------------------------------- 【パラメータ内容】   時刻 ‥‥‥ この項目に、選択した時刻が設定されて呼び元に返されます。          ※呼び元での変数定義が必要です。   AMPM ‥‥‥ 24時以上の入力可否とフォーム初期表示の際に選択しておく          『時』を指定します。           省略/"AMPM":マシン時刻に合わせて午前/午後を切り替え                  初期選択[時]はマシン時刻[時]           "AM"    :午前のマシン時刻[時]で初期表示           "PM"    :午後のマシン時刻[時]で初期表示           "0"〜"11" :午前の指定[時]で初期表示           "12"〜"23" :午後の   〃           "24"〜"35" :翌日午前の指定[時]で初期表示           "36"〜"47" :翌日午後の   〃           既定では、入力できる時刻は[0:00〜23:59]ですが、上記の           指定値の末尾に"#"を付加すると[0:00〜47:59]の範囲の           入力が可能になります(AMPM="24"〜"47"の場合には"#"           を付けなくてもOKです)。           (注) [0〜47]に # を付ける場合、必ずクォーテーションで              囲んで文字列として下さい("3#", "15#" etc)。              3# と記述すると、Double 型数値の[3]という風に、              # が型宣言文字と解釈されてしまいます。   Title ‥‥‥ ここに指定した文字列がキャプション部分に表示されます。          全角12文字/半角20文字程度まで指定できます。          省略時はフォーム名である[ktFormCLock]が表示されます。   Pos_X および Pos_Y      ‥‥‥ 時刻入力フォームを画面のどの位置に表示するかを指定する          パラメータです。UserForm のプロパティ(Left / Top )で          指定する値です。一方もしくは両方を省略すると『オーナー          フォーム中央』に表示します。    参考:表示位置によるPos_X および Pos_Y の値(1024×768サイズの画面)          画面全体の左上 ‥‥‥ Pos_X=0 , Pos_Y=0            〃  中央 ‥‥‥ Pos_X=300 , Pos_Y=170            〃  右下 ‥‥‥ Pos_X=580 , Pos_Y=350 ---------------------------------------------------------------------------- 【解説】   従来の時刻入力コントロールは、DropDownListから選択したり、SpinButtonで   時/分の値を変更する方式が一般的でしたが、この『kt時刻入力アドイン』で   は【ktSelClock 】関数により、    ・アナログ時計を模した時計盤フォームがポップアップ    ・AM/PM(&当日/翌日)はオプションボタンで切り替え    ・「時」は1〜12の時刻文字を『右クリック』で選択    ・後は、その時計盤上でマウスを滑らせれば「分」が[0〜59]の     間でリアルタイムに変化    ・3時の位置にマウスカーソルを置けば、それだけで「15分」    ・入力する時刻の位置にマウスを合わせたら、その場所でクリック     すれば、それで時刻が取り込まれます    ・時計盤の下には【現在日時】が表示されます(マウスを動かして     いる限りはリアルタイムで更新されます)    ・【現在日時】の上でマウスクリックすると、『現在時刻(時&分)』     で取り込まれます。【現在日時】上にマウスがある時は、時計盤     中央の「選択時刻」も現在時刻になります。   という風に直感的/視覚的なマウス操作で時刻入力が可能です。   (注) 時刻文字【付近】では「5分単位」の値になります。     [1分]とか[4分]などは、時刻文字の近くでは反応しませんので、     少し内側を探って下さい。   VBA専用関数です。ワークシート上に指定した場合は[FALSE]が返るだけです。 ---------------------------------------------------------------------------- 【使用例】 Dim MyTime As Date --- 基本形 ---   If ktSelClock(MyTime, "AMPM", Format(Date, "yyyy/m/d")) Then     xxxx = MyTime または xxxx = Format(MyTime, "hh:mm")     または xxxx = WorksheetFunction.Text(MyTime, "[h]:mm")   End If   (注) VBAのFormat関数での時刻書式では24時以上の値を指定しても     0〜23時にしか編集されません。24時以上の時刻入力が考えられる     場合は、ワークシートの[TEXT関数]を利用して編集してください。 --- パラメータの指定パターン例 --- (1) 省略できるパラメータを全て省略     ktselClock(MyTime)     マシン時刻に合わせて午前/午後で初期表示されます。     これは、下記の指定と同じ意味になります。      ktSelClock(MyTime, "AMPM", "") (2) 午前/午後を指定して初期表示     ktSelClock(MyTime, "AM") または ktSelClock(MyTime, "PM") (3) 24時以降も入力できるようにする     ktSelClock(MyTime, "AM#") または ktSelClock(MyTime, "PM#")     または ktSelClock(MyTime, "AMPM#") (4) 予め指定の時刻を選択した状態で表示する     ktSelClock(MyTime, "3")     ktSelClock(MyTime, "3#")     ktSelClock(MyTime, "28") など   (5) 現在時刻を予め選択した状態で表示する     ktSelClock(MyTime, Hour(Now)) または     ktSelClock(MyTime, Hour(Now) & "#") ---------------------------------------------------------------------------- 【利用コード例】   [DblClick]アクションを無効にする為に『Cancel = True 』は必須です。 (1) テキストボックスでの利用例    UserFormの場合は、そのUserFormのモジュールに、シート上のコントロールの    場合は、そのシートのモジュールに記述してください。    TextBox1 をダブルクリックすると時刻入力フォームを表示して、入力した時刻    を「hh:mm 」形式に編集してTextBox1に設定します。        Private Sub TextBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)    Dim MyTime As Date If ktSelClock(MyTime, Hour(Now)) Then TextBox1.Value = Format(MyTime, "hh:mm") End If Cancel = True      End Sub (2) ワークシートでの利用例(その1)    そのシートのモジュールに記述して下さい。    セルをダブルクリックすると時刻入力フォームを表示して、時刻を入力します。    入力した内容は、ダブルクリックしたセルの「表示形式」で表示されます。    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)    Dim MyTime As Date If ktSelClock(MyTime, Hour(Now)) Then Target.Value = MyTime End If Cancel = True    End Sub (3) ワークシートでの利用例(その2)    そのシートのモジュールに記述して下さい。    上記に、表示形式の指定を追加した例です。    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)    Dim MyTime As Date If ktSelClock(MyTime, Hour(Now) & "#") Then        Target.NumberFormatLocal = "[h]:mm" Target.Value = MyTime End If Cancel = True    End Sub (4) ワークシートでの利用例(その3)    そのシートのモジュールに記述して下さい。    ダブルクリックで時刻入力するセルを限定(B5セル)する場合の例です。    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)    Dim MyTime As Date    If (Target.Address = "$B$5") Then   If ktSelClock(MyTime, Hour(Now) & "#") Then   Target.Value = MyTime   End If   Cancel = True      End If    End Sub    [Cancel = True]を記述する位置に注意して下さい。 B5セル以外では『ダブルクリックでセルへのキー入力』は有効にしなければ    なりません。 (5) ワークシートでの利用例(その4)    そのシートのモジュールに記述して下さい。    ダブルクリックで時刻入力するセルを限定(C列)する場合の例です。    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)    Dim MyTime As Date    If (Target.Column = 3) Then   If ktSelClock(MyTime, Hour(Now) & "#") Then   Target.Value = MyTime   End If   Cancel = True      End If    End Sub    [Cancel = True]を記述する位置に注意して下さい。 C列以外では『ダブルクリックでセルへのキー入力』は有効にしなければ    なりません。 (6) ワークシートでの利用例(その5)    そのシートのモジュールに記述して下さい。    実際に業務で利用する場合は、下記のような工夫をして下さい。    ダブルクリックしたセルに時刻が入っていない場合は、1行上のセルの時刻    で初期表示する。明細の1行目の場合は、そこがタイトル行になるが、    『時刻データ以外』なので、1行目は「本日の年月」で表示される。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)    Dim strAMPM As String    Dim MyTime As Date   If (Target.Column = 3) Then   If (Target.Value = "") Then   If (Target.Offset(-1, 0).Value = "") Then   strAMPM = "AMPM#"         ' 時刻データかを判定   ElseIf Not IsError(WorksheetFunction.Text(Target.Offset(-1, 0).Value, "[h]")) Then   strAMPM = WorksheetFunction.Text(Target.Offset(-1, 0).Value, "[h]") & "#"   Else   strAMPM = "AMPM#"   End If       ' 時刻データかを判定   ElseIf Not IsError(WorksheetFunction.Text(Target.Value, "[h]")) Then   strAMPM = WorksheetFunction.Text(Target.Value, "[h]") & "#"   Else   strAMPM = "AMPM#"   End If     If ktselclock(MyTime, strAMPM) Then     Target.Value = MyTime     End If     Cancel = True   End If    End Sub    [Cancel = True]を記述する位置に注意して下さい。 C列以外では『ダブルクリックでセルへのキー入力』は有効にしなければ    なりません。 (7) ワークシートでの利用例(その6)    カーソルを「そのセル」に移しただけで、ポップアップさせたい場合は、    「Worksheet_BeforeDoubleClick」イベントの代わりに「Worksheet_    SelectionChange」イベントを使ってください。この場合は[Cancel]引数    が有りませんので、『Cancel = True 』ステップは不要です。 --------------------------------------------------------------------------------