呼出されて勤務した時間帯を管理したいのですが
selectcase文で18:00から2:00まで勤務したら『準夜-深夜』と表記したいのですが『型が合いません』とエラーが出ます
マクロは我流で勉強中なのでよろしくお願いします

Dim 開始時間 As Date, 終了時間 As Date
Dim 開始時間帯 As String, 終了時間帯 As String, 業務時間帯 As String

Private Sub 業務ステータス()
開始時間 = TimeValue(開始時間TextBox.Text)
終了時間 = TimeValue(終了時間TextBox.Text)
Select Case 開始時間
Case 開始時間 > TimeValue("8:29") And 開始時間 < TimeValue("17:00"): 開始時間帯 = "日勤"
Case 開始時間 > TimeValue("16:59") And 開始時間 < TimeValue("24:00"): 開始時間帯 = "準夜"
Case 開始時間 > TimeValue("0:00") And 開始時間 < TimeValue("8:30"): 開始時間帯 = "深夜"
Case 開始時間 = TimeValue("0:00"): 開始時間帯 = "深夜"
End Select
Select Case 終了時間
Case 終了時間 > TimeValue("8:29") And 終了時間 < TimeValue("17:00"): 終了時間帯 = "日勤"
Case 終了時間 > TimeValue("16:59") And 終了時間 < TimeValue("24:00"): 終了時間帯 = "準夜"
Case 終了時間 > TimeValue("0:00") And 終了時間 < TimeValue("8:30"): 終了時間帯 = "深夜"
Case 終了時間 = TimeValue("0:00"): 終了時間帯 = "深夜"
End Select

If 開始時間帯 = 終了時間帯 Then
業務時間帯 = 開始時間帯
Else
業務時間帯 = 開始時間帯 & "-" & 終了時間帯
End If
End Sub

このQ&Aに関連する最新のQ&A

A 回答 (2件)

質問のエラーは#1さんの通りだけど


caseの使い方も間違いだと思うので修正してみました
もう一度、ヘルプに目を通しておいた方が良いかと

Dim 開始時間 As Date, 終了時間 As Date
Dim 開始時間帯 As String, 終了時間帯 As String, 業務時間帯 As String

Private Sub 業務ステータス()
開始時間 = TimeValue(開始時間TextBox.Text)
終了時間 = TimeValue(終了時間TextBox.Text)
Select Case 開始時間
Case TimeValue("8:29") To TimeValue("17:00"): 開始時間帯 = "日勤"
Case TimeValue("17:00") To 1: 開始時間帯 = "準夜"
Case TimeValue("00:00") To TimeValue("8:30"): 開始時間帯 = "深夜"
End Select
Select Case 終了時間
Case TimeValue("8:29") To TimeValue("17:00"): 終了時間帯 = "日勤"
Case TimeValue("17:00") To 1: 終了時間帯 = "準夜"
Case TimeValue("00:00") To TimeValue("8:30"): 終了時間帯 = "深夜"
End Select

If 開始時間帯 = 終了時間帯 Then
業務時間帯 = 開始時間帯
Else
業務時間帯 = 開始時間帯 & "-" & 終了時間帯
End If
End Sub

日を跨ぐ時は日付も付加しないと、正確な計算が出来ませんよ
今回は時間の計算が無いため、希望の処理になると思いますが・・・
詳しい説明は省きますが、時間の計算が必要な時は気をつけてくださいね
    • good
    • 0
この回答へのお礼

わかりやすい説明&コード訂正、ありがとうございます。

今回初めてSELECT文を使ってみたのでずっと悩んでました(汗)
今まではIFばっかで分岐させてたのでコードが長くなっていたので一歩進んだことをしようとしてドツボはまってました。
これからも精進します。

時間計算のほうは克服済です(笑)ありがとうございました。

お礼日時:2009/05/12 01:54

TimeValue("24:00")



TimeValue("0:00")

関係無いお話だけど、Case文じゃなくIf文の方がよろしいかと。
    • good
    • 0
この回答へのお礼

ありがとうございました。
いろいろネット、本を見てもなかなか使いこなすまでが大変ですね

職場では私しかマクロしてないので、相談するブレインもいないので(泣)

お礼日時:2009/05/12 01:58

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QRico.Effect.FadeTo is null or not a

Rico.Effect.FadeTo is null or not an object

Ajax用ライブラリRicoで簡単なフェードイン/アウトなどの特殊効果をかけようとしていますが
上記タイトル通りのエラーが出て動きません。もちろん、Sizeも動きません(note.jpgはちゃんと表示されますが)。
以下がソースです:

### sample256.html ###
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=Shift_JIS">
<title>sample256</title>
<script type="text/javascript" src="scripts/prototype.js"></script>
<script type="text/javascript" src="scripts/rico.js"></script>
</head>
<body>
<form>
<input type="button" onclick="new Rico.Effect.FadeTo('img1',0.1,1000,20);" value="消す">
<input type="button" onclick="new Rico.Effect.FadeTo('img1',1.0,1000,20);" value="表示">
<input type="button" onclick="new Rico.Effect.Size('img1',30,30,1000,20);" value="縮小">
<input type="button" onclick="new Rico.Effect.Size('img1',270,230,1000,20);" value="拡大">
</form>
<p/>
<img id="img1" src="images/note.jpg"/>
</body>
</html>

…OSはWindows Vista (64-bit)で、ブラウザーはIE8です。
もちろん、Eclipseを介してTomcatは動いています。

Ricoは最新版でRico21.zipです。prototype.jsもそのzipの中のものを使いました。
展開したzipファイルのsrcにあったすべてのファイルを./scripts/の下にコピペしています
(Google Chromeでソースファイルにあるリンクをクリックすれば、二つの.jsのソースコードが表示されるので、ちゃんと認識されていると思います)。

検索すると、ブラウザーのヴァージョンが問題のこともあるらしいですが、今回の場合はお互い最新のヴァージョンなので、それ以外に原因があるような気がしてなりません。
別の例で、prototype.jsを使って「文字の上にマウスをのせると別の文字が表示される」というのは成功しました。
ですから、Ricoのみが動いていないんだと思いますけど、確認の仕方が分かりません。
Ricoが動くようになる良い方法はありませんか?
必要であれば補足します。どうか宜しくお願いします。

Rico.Effect.FadeTo is null or not an object

Ajax用ライブラリRicoで簡単なフェードイン/アウトなどの特殊効果をかけようとしていますが
上記タイトル通りのエラーが出て動きません。もちろん、Sizeも動きません(note.jpgはちゃんと表示されますが)。
以下がソースです:

### sample256.html ###
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=Shift_JIS">
<title>sample256</title>
<script type="text/javascript" src="scripts/prototype.js"></script>
<script type="text/j...続きを読む

Aベストアンサー

回答がないみたいなので…

Ricoって全然知らないけれど、
「Rico.Effect.FadeTo is null or not an object」ということは、呼出されて探しても見つからないということで、Effect.jsが読込まれていないのだと想像されます。
多分、その状態で alert(Rico)とかやってみればObjectを返すけれど、alert(Rico.Effect)だとundefinedなどになると思う。

検索してdemoページを見てみると、
http://dowdybrown.com/dbprod/rico2/examples/
 ↑のAnimationのページ
http://dowdybrown.com/dbprod/rico2/examples/client/effect_animation.html

まず、必要なモジュールを読込まなければならないみたい。
Effectを使うのであれば、 Rico.loadModule('Effect'); みたいな感じ。

>確認の仕方が分かりません。
これを実行すれば、alert(Rico.Effect)、alert(Rico.Effect.FadeTo)などとしてもObjectが返ってくるので、必要なものが読込まれているらしいことが分かると思います。

文法が書いてあるところが見つからないけれど、Effectを見ると引数の数が違うようですね。
こんなサイトがみつかりましたけれど、解説がほとんどないので良く分からない。
http://dowdybrown.com/dbprod/ricodocs/javascript/

まぁ、少なくともFadeToは
 FadeTo(element, value) でelementは対象要素、valueはopcityの数値みたい。

ご提示のサンプルで、(↑)のdemoページの方法をそのまま真似して、
new Rico.Effect.Animator().play( new Rico.Effect.FadeTo($('img1'), 0), {steps:30, duration:1000});
みたいにすれば、一応、画像がフェードアウトしますけれど、これが正しい使い方なのかどうかは不明。
step、durationはアニメーションの時間と分割数らしく、数値を変えれば動作もそのように変わるみたい。

どこかに、ドキュメンテーションがあると思うのだけれど…

回答がないみたいなので…

Ricoって全然知らないけれど、
「Rico.Effect.FadeTo is null or not an object」ということは、呼出されて探しても見つからないということで、Effect.jsが読込まれていないのだと想像されます。
多分、その状態で alert(Rico)とかやってみればObjectを返すけれど、alert(Rico.Effect)だとundefinedなどになると思う。

検索してdemoページを見てみると、
http://dowdybrown.com/dbprod/rico2/examples/
 ↑のAnimationのページ
http://dowdybrown.com/dbprod/rico2/examples/...続きを読む

Qあるセルに17:00と表示されてるのに、編集時に(セルをダブルクリックすると)5:00:00PMと表示されるには?

エクセル(97)のあるセルに「17:00」と
表示されてるのに、編集する時にセルを
ダブルクリックすると「5:00:00 PM」
と表示される事があるのですが、
これはどうやってるのでしょう?

表示形式を変えてしまうと、表示そのものが変わってしまいます。
何かの裏技でしょうか?

Aベストアンサー

OS側の時刻表示の設定です。
Windows2000の場合はコントロールパネルの地域のオプションの時刻タブで
時刻の形式「tt hh:mm:ss」
午前の記号「AM」
午後の記号「PM」
にすればそうなります。
ただタスクバーの時計の表示もこの形式になりますが...

QIS NULL

いつもお世話になっています。
PL/SQLでストアドを作成中なのですが、
あるUPDATE分のWHERE句の条件として“IS NULL”を使用したいのですが、監督者から “IS NULL”はNGという指示が出てしまい困っています。
(理由はNULLは索引の対照外だからということです。)
以前、“IS NOT NULL”の代用として、“項目名 ≧ 0”が使えることを学んだのですが、“IS NULL”にも同じように代用できる条件の記述方法はありますか?
“IS NOT NULL”が“項目名 ≧ 0”なら
“IS NULL”は“項目名 < 0”というのは無謀でしょうか?

Aベストアンサー

こんにちは。

確かに「IS NULL」は、INDEXを使いませんが、
NULLかどうかを判断するなら、仕方がないと思います・・・。
「NVL」で変換すれば何とかなりそうですが、レスポンス的には意味がありません・・・。
WHERE句の条件としてNULLを使用できないのなら、元のテーブル構造に問題があると言わざるを得ません・・・。

この場合はいたしかたないかと・・・。
(^^ゞ

Q7桁の時刻(00:00:00.0)のコンマ以下を省略する方法を分かる方教えて下さい!

エクセル初心者につき、教えて下さい!

7桁の時刻のコンマ以下を省略したいのですが、その方法を分かる方、教えて下さい!
例 18:34:32.5→18:34:32

Aベストアンサー

No.6です。
まだ解決していませんでしたか。

四捨五入ではなく切り捨てにしたいのであれば、
=TEXT(A1-"00:00:00.5","hh:mm:ss")*1
のように、丸めたい下の桁から5引いてから四捨五入されるようにするとよい。

TEXT関数で、数値に対して書式を指定して表示させ、1を掛けることで数値(シリアル値)に戻しています。
数式を入力したセルの表示形式をユーザー書式で "h:mm:ss" または "hh:mm:ss" にしてください。

QPostgreSQLの「not null」制約の追加

こんにちは。いつもお世話になります。

PostgreSQLのversion7.2.8で、「not null」制約の追加、削除の方法をおたずねします。よろしくお願いします。

ALTER TABLE テーブル名 ALTER COLUMN カラム名 SET NOT NULL;

で試したところ、syntaxエラー(構文エラー)で失敗。

ALTER TABLE テーブル名 ALTER COLUMN カラム名 DROP NOT NULL;

で試してみても、同じくsyntaxエラーです。

version7.2.8が原因でしょうか?
また、version7.2.8でも「not null」制約の追加、削除が
できる他の方法はありますでしょうか?

テーブルを作り直さずに、
既存のテーブルのカラムへの制約の追加、削除をしようとしています。

よろしくお願いします。

Aベストアンサー

マニュアルを見てみたところ、ALTER TABLEでの既存列のNOT NULLの追加や削除は、PostgreSQL 7.3で実装のようですね。

>テーブルを作り直さずに、既存のテーブルのカラムへの制約の追加、削除をしようとしています。

ALTER TABLEで、NOT NULLを許可しない列の追加などを行うと、内部的にはテーブルの作り直しが行われますよ?

Q条件付き書式 時間 0:00:00の場合

セルの値を差し引いて、時間を出してるのですが
その時間が「0:00」の時、
そのセルを灰色にしたいのですが、
条件付き書式でうまくできません。

「=$A65536="0:00:00"」
「=$A65536="0:00"」
でも、何も変わりません。

時間は、セルの書式設定で「h:mm」にしています。

Aベストアンサー

どれでも。

=$A65536=0
=$A65536-"0:00"=0
=$A65536="0:00"+0
=$A65536="0:00"-0
=$A65536="0:00"*1
=$A65536="0:00"/1
=$A65536="0:00"^1
=$A65536=--"0:00"
=$A65536=n("0:00")
=$A65536=value("0:00")
=$A65536=timevalue("0:00")
=$A65536=sum("0:00")
=$A65536=max("0:00")
=$A65536=min("0:00")
=$A65536=average("0:00")
=$A65536=median("0:00")
=$A65536=imreal("0:00")
=text($A65536,"h:mm")="0:00"
=delta($A65536,"0:00")

最もよく使われているのは多分「*1」だと思いますが、「0:00」という時間に限って言えば、いちばん上の式も十分に分かりやすいです。

なお問題になっているのは、セルに記入されている(あるいは算出されている)値が、数値なのか、それとも文字列なのかという点です。セルに数値があって(あるいは空白で)、それを「0:00」という文字列と比較しようとしても、そのままでは当然、一致しません。Excel にデータ型を自動変換させるため、上のような数式が必要になっています。

したがって、セルの書式は何であっても構いません。書式は見かけを設定するだけのことなので、値とは直接の関係がありません。

どれでも。

=$A65536=0
=$A65536-"0:00"=0
=$A65536="0:00"+0
=$A65536="0:00"-0
=$A65536="0:00"*1
=$A65536="0:00"/1
=$A65536="0:00"^1
=$A65536=--"0:00"
=$A65536=n("0:00")
=$A65536=value("0:00")
=$A65536=timevalue("0:00")
=$A65536=sum("0:00")
=$A65536=max("0:00")
=$A65536=min("0:00")
=$A65536=average("0:00")
=$A65536=median("0:00")
=$A65536=imreal("0:00")
=text($A65536,"h:mm")="0:00"
=delta($A65536,"0:00")

最もよく使われているのは多分「*1」だと思いますが、「0:00」という時間に...続きを読む

Qphpでnot null、a_iでテーブル作成

PHPで、以下のようなソースで、存在しているデータベースtestに接続し、もしない場合、name_listというテーブルを作り、1カラム目をカラム名がnoで、int型でnot null auto_incrementにして、2カラム目をカラム名がnameで、not nullで作りたいのですが、うまくテーブルが作られません。
どうすればうまく作られるか教えてください。

<?php
try{
$pdo = new PDO('mysql:dbname=test; host=localhost; charset=utf8', 'root');
$st = $pdo->prepare("create table if not exists name_list (no int(100) not null auto_increment, name varchar(100) not null);");
$st->execute();
}catch(PDOException $e){
print('Error:'.$e->getMessage());
die();
}

PHPで、以下のようなソースで、存在しているデータベースtestに接続し、もしない場合、name_listというテーブルを作り、1カラム目をカラム名がnoで、int型でnot null auto_incrementにして、2カラム目をカラム名がnameで、not nullで作りたいのですが、うまくテーブルが作られません。
どうすればうまく作られるか教えてください。

<?php
try{
$pdo = new PDO('mysql:dbname=test; host=localhost; charset=utf8', 'root');
$st = $pdo->prepare("create table if not exists name_list (no int(100) no...続きを読む

Aベストアンサー

PRIMARY KEYを設定してください。

create table if not exists name_list (no int(100) not null auto_increment PRIMARY KEY, name varchar(100) not null)


ところで、、、
以前、create table if not existsというクエリを流せばいいと回答しましたが、
サーバサイドで動かしているプログラムは基本的にテーブルありきで実装すると思います。
ですからIF NOT EXISTSというようにするというのはちょっとおかしいかな?と思いました。

Q1/1 15:00 - 1/2 13:00 の時間を23.0と表現したい

すいません。
質問が1つございます。

1/1 15:00 - 1/2 13:00 の時間を23.0と表現したいがどうすればよいでしょうか。

添付画像の通りですが、1/1 12:00 - 1/1 14:00 は 下記の式で2.0と対応できます。
(14:00 - 12:00) * 24

1/1 15:00 - 1/2 13:00 の場合、 -2.0と表現されてしまいます。。。

1/1 15:00 - 1/2 13:00 の時間を23.0と表現する方法を教えていただければ幸いです。

Aベストアンサー

まずE列に「=(C1-A1+D1-B1)*24」の式を入れて、書式は「0.0」にします。

ちなみに「23.0」は「22.0」の間違いですよね

QNOT NULL制約がついた項目のUPDATEについて

基本的な事で申し訳ありません。

Oracle10g を使用していますが、
SQLのUPDATE文で主キーではない、
NOT NULL 制約がついたVARCHAR2(30)の項目を
''(ブランク)で更新しようとした所エラーが返されました。(ORA-01407)
NULLで更新するのではないから大丈夫かと思っていたんですが、
NOT NULL 制約がついているとブランクでも更新ができないのでしょうか?

Aベストアンサー

良い参考URLが見つからないのですが。

Oracleでは、歴史的経緯から、空文字('')とNULLは同じものとして扱われます。そのため、NOT NULL制約があると空文字で挿入、更新できません。

余談になりますが、上記の理由で、「ある列が空文字のレコード」をSELECTする場合、以下のように書く必要があります。

SELECT * FROM TEST_TABLE WHERE STR IS NULL これはOK
SELECT * FROM TEST_TABLE WHERE STR = '' これはだめ

Qエクセル:関数で時間「0:59」を「1:00」にしたい

お世話になります。
急ぎの用務です。お助けください。
よろしくお願いします。

◆時間表示の切り上げを30分単位でしたいのです。
 関数でできますか?ご教授お願いいたします。

例)
「0:59」→「1:00」
「1:29」→「1:30」
「1:15」→「1:30」

よろしくお願いいたします。

Aベストアンサー

こういうこと p(..)でしょうか?

=CEILING(A1,"0:30")

セルの書式設定~表示形式を「時刻」に。


人気Q&Aランキング

おすすめ情報