VBAはまったくの初心者です。

仕事でExcelを使用して勤務時間表を作成しています。
出勤時間と退勤時間から一日の勤務時間を計算しているのですが 、規則で一日の勤務時間が6時間を越えたら必ず60分以上の休憩をとらないといけません。
勤務時間が6時間を超えた場合に、休憩時間の列に数値を入力する亊を促すメッセージを画面に表示したいのですが、計算式が入っているセルをもとに「文字の入力規則」コマンドが使えないことがわかり、色々調べながらVBAで作ってみたのですが、当然の事ながらうまく動作しません。

ちなみに勤務時間表は1ヶ月分で1つの表(最終行には1か月の勤務時間を求める合計の式もあります)となっていて、12か月分が1シートにそれぞれ数行空けて縦に並んでいる状態です。(これは会社の様式なので変更ができません)

最初の1ヶ月分の表の一日の勤務時間がセルF3~F33に入っていると考えて

Private Sub Worksheet_Calculate()
For t =3 To 33
If Range("F" & t).Value >= 6.5 Then
MsgBox "6時間を越えています。" & vbCr & "60分以上の休憩を入力してください。", vbCritical, "エラー"
End If
Exit For
Next
End Sub

とまで作成し、1か月分だけならこれでなんとか動作したのですが、12か月分全部についても同様のメッセージを出すにはどのようにするといいでしょうか。

どなたかお知恵をお貸しください。よろしくお願い申し上げます。

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

A 回答 (1件)

>計算式が入っているセルをもとに「文字の入力規則」コマンドが使えない


 ⇒VBAを使用しなくても「退勤時刻セル」に入力規則(ユーザ定義)を設定すれば良いと思う。
  例えば、=(退勤時刻-出勤時刻)*24<=6

  因みにこの警告は勤務完了時にアラートする意味が不明です。
  6時間超勤務時は休憩しないといけないのであれば、6時間超の場合には無条件に
  休憩時間を1時間減算すればアラートは不要ではないでしょうか。
    • good
    • 0
この回答へのお礼

mu2011様、早々のご回答ありがとうございました。
週明けに職場でこの方法で試してみます。

>因みにこの警告は勤務完了時にアラートする意味が不明です。
>6時間超勤務時は休憩しないといけないのであれば、6時間超の場合には無条件に
>休憩時間を1時間減算すればアラートは不要ではないでしょうか。

私はアルバイトの身なので詳しいことはわからず指示通りに動作するように言われているだけなのですが、この勤務表はどうやら嘱託職員用のもので年間の総勤務時間が決まっていて、1日6時間超えの勤務になった時は、60分以上何分でも自分の好きなように休憩できるそうなのです。

お礼日時:2011/04/09 17:53

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

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

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

Qエクセル プルダウンの作り方

お世話になります。
エクセルでプルダウンの作り方を教えていただけませんでしょうか?
住所を▼のボタンでクリックしたら【北海道,青森,秋田,岩手・・・】などの選択ができるようにしたいのです。
宜しくお願いします。

Aベストアンサー

メニューから「データ」、「入力規則」、「設定」で「入力値の種類」を「リスト」を選択します。
そうすると「元の値」という表示がでますので、そこで前もって作っておいたリストの範囲を指定します。
多くないのでしたら、そのままそこにカンマで区切って入力しても出来ます。

Qexcel で計算式が入っているのに、計算結果が変

excel で、セルに計算式(たとえば、SUM(A1:A5))が入っているのですが、

A1からA5の数字を変えても、計算結果が変わりません。

計算式が入っているセルをクリックして、

計算式を一回クリックすると、正しい計算結果になるのですが、

どうしてこんなことになってしまうのかわかりません。

解決法を教えてください。

Aベストアンサー

計算方法が手動になっているのでしょう。

ツール>オプション>計算方法のタブで
計算方法を「自動」に変更してください。

Qエクセルでプルダウンメニューの作り方

  エクセルの画面で、よく三角形を逆さまにした形をクリックするといくつかメニューが出てき、どれかを選べるようになっていますが、その作り方を教えてください。
 会社で人事を担当していますが、三角形(プルダウンボタン)をクリックすると社員氏名一覧が表示され、そこから選択できるようにしたいのです。
 しばらく自力でいろいろやってみましたが、さっぱり見当がつかず、どうやればいいのか分かりませんでした。よろしくお願いします。

Aベストアンサー

こんばんは!
当方使用のExcel2003での一例です!

↓の画像のようにSheet2に名簿表を作成しておきます。
画像ではSheet2のA2セル以降を範囲指定 → 名前ボックスに仮に「名簿」と入力しOK
これで範囲指定したセルが「名簿」と名前定義されましたので、

Sheet1のリスト表示させたいセルを範囲指定 → メニュー → データ → 入力規則
→ リスト → 「元の値」の欄に
=名簿
としてOK

これでSheet1のセルをアクティブにすると右側に下向き▼が表示されますので、そこをクリック!
これで希望に近い形にならないでしょうか?
Excel2007の場合は↓のURLが参考になるかもしれません。

http://www.eurus.dti.ne.jp/~yoneyama/Excel2007/excel2007-ny_kis2.html

尚、同一Sheetに「名簿表」を作成する場合は名前定義する必要はなくて
「元の値」の右側の四角をクリックし、リスト表示したいセルをそのまま範囲指定すればOKです。

以上、お役に立てば良いのですが・・・m(_ _)m

こんばんは!
当方使用のExcel2003での一例です!

↓の画像のようにSheet2に名簿表を作成しておきます。
画像ではSheet2のA2セル以降を範囲指定 → 名前ボックスに仮に「名簿」と入力しOK
これで範囲指定したセルが「名簿」と名前定義されましたので、

Sheet1のリスト表示させたいセルを範囲指定 → メニュー → データ → 入力規則
→ リスト → 「元の値」の欄に
=名簿
としてOK

これでSheet1のセルをアクティブにすると右側に下向き▼が表示されますので、そこをクリック!
これで希望に近い形にならない...続きを読む

Qexcel入力規則リストに計算式を複数設定したい

皆様のご教授をお願いいたします。

excelの入力規則のリストに複数の計算式を設定し、ドロップダウンリストから計算式を選択すればそれぞれの計算式に対応した計算結果が表示されるようにしたいのですが、リストの元の値に計算式を入力してもエラーが出てしまいます。

どうすれば設定できるでしょうか?
それとも別のやり方があるのでしょうか?



設定したい計算式
=ROUNDUP(Q210*B282,0)
=ROUNDUP(S210*B282,0)

ちなみに、文字列のように

=ROUNDUP(Q210*B282,0),=ROUNDUP(S210*B282,0)

と入力してもダメでした。

皆様の知恵をお貸しください。宜しくお願い致します。

Aベストアンサー

入力規則のリストに計算式を設定する事は、全く出来ません。

入力規則(仮にZ列)ではたとえばAとBから選択できるように仕込んでおき、その隣のセルで
=IF(Z210="","",IF(Z210="A",ROUNDUP(Q210*B282,0),ROUNDUP(S210*B282,0)))
などのようにして、AとBの指定に対応する計算結果を表示するといった具合に仕込んでみて下さい。

Qエクセル(Excel) 納品書の作り方【画像修正版

昨日http://oshiete.goo.ne.jp/qa/7348426.htmlで質問させていただき、詳しくご回答いただき少し進んだのですが、状況が変わったので改めて質問させていただきます。

■エクセル(Excel)で納品書の作成をしています。
シート1に納品書、シート2に商品マスタ(一覧)を作っていて、シート2の一覧を反映させて
納品書に番号を打ち込むだけで、商品名・単価までが出るシステムを作りたいのですが、
昨日のご回答の中の「VLOOKUP」?を入れて、自分なりにマス目の数字を変えてやってみたのですが
反映されずN/?のようなエラーになってしまいます。

※画像が見にくかったのでシート<CENTER></CENTER>だけにしました。

1、上記のように、シート2との関連付けの係数を、写真の場合の数字で教えてください。

2、合計と、合計から20%を引いた数値を割り出す関数も、写真の数字で御願いします。

宜しくご教授お願い致します。

Aベストアンサー

こんばんは!
前回投稿した者です。

当方もかなり古い(人間も古い!なぁ~んちゃって!)Excel2003を使用しています。
↓の画像のようにSheet2にデータを作成しておきます。

#N/A というエラーは、「検索値」がない!ということですので
お示しの画像のB列にSheet2のA列にないデータを入力するとそういったエラーが表示されます。

画像のセル配置ですと
C4セルに
=IF($B4="","",VLOOKUP($B4,Sheet2!$A:$C,COLUMN(B1),0))
(「$」マークの位置に気を付けてください)
という数式を入れD4セルまでオートフィルでコピー!
そのまま最後の24行目までコピーしておきます。

F4セルには
=IF(COUNTBLANK(B4:E4),"",D4*E4)
という数式を入れ、F24までオートフィルでコピー!

これでB列に商品番号を入力すればSheet2のデータが反映され、
E列に数量を入力でF列に金額が表示されると思います。

最後に合計金額のF26セルは
=IF(COUNT(F4:F24),SUM(F4:F24),"")
手数料のF27セルは
=IF(F26="","",F26*0.2)

これで何とか形にならないでしょうか?

※ 振込金額の欄は不明ですので手を付けていません。

参考になりますかね?m(_ _)m

こんばんは!
前回投稿した者です。

当方もかなり古い(人間も古い!なぁ~んちゃって!)Excel2003を使用しています。
↓の画像のようにSheet2にデータを作成しておきます。

#N/A というエラーは、「検索値」がない!ということですので
お示しの画像のB列にSheet2のA列にないデータを入力するとそういったエラーが表示されます。

画像のセル配置ですと
C4セルに
=IF($B4="","",VLOOKUP($B4,Sheet2!$A:$C,COLUMN(B1),0))
(「$」マークの位置に気を付けてください)
という数式を入れD4セルまでオートフィルで...続きを読む

Qexcel(2003,2007) VBA 入力規則 別シートを参照した

excel(2003,2007) VBA 入力規則 別シートを参照したリストについて、リストの中身しか選べなくしたい

OS:Windows XP
Office:2003,2007

入力規則でリストを作った時、「元の値」に別シートに作ったリストを参照する設定にしています。
そのリストの内容が「赤」「青」「黄」だった場合、その3つしか選べないように制限することは可能でしょうか?
同じシート内にリストを作れば可能であることは知っていますが、別シートを参照した状態でもそれができればいいなと思っています。
別シートを参照している場合は無理なのか、無理でなければどうすればいいのか。
方法をご存知の方、教えてください。宜しくお願い致します。

Aベストアンサー

回答1、myRangeです。

>リスト以外の文字列(今回で言うと「赤」「青」「黄」以外:「黒」など)が入力できてしまうと思うのですが

それはリストが別シートなのか、同じシートなのかには関係なく、
入力規則でエラーメッセージを出さないようにしてあればそうなります。

●入力規則でエラー設定もしてみてください。

----------------------------------------------------------------
もし、
「設定項目以外が入力されたら▲エラーは表示せず▲に、
 その入力値を消し、設定セルを再度アクティブにしたい」
ということであれば数行のマクロを書くことになります。

何れにしろそこら辺りをも少し明確にさせた方がいいでしょう。
以上です。

Qエクセル(Excel) 納品書の作り方【改めて】

昨日http://oshiete.goo.ne.jp/qa/7348426.htmlで質問させていただき、詳しくご回答いただき少し進んだのですが、状況が変わったので改めて質問させていただきます。

■エクセル(Excel)で納品書の作成をしています。
シート1に納品書、シート2に商品マスタ(一覧)を作っていて、シート2の一覧を反映させて
納品書に番号を打ち込むだけで、商品名・単価までが出るシステムを作りたいのですが、
昨日のご回答の中の「VLOOKUP」?を入れて、自分なりにマス目の数字を変えてやってみたのですが
反映されずN/?のようなエラーになってしまいます。

※画像が貼り付けてあります。商品名は1番以外伏せさせていただいています。
くっつけてありますが、左側がシート1・右側がシート2です。

1、上記のように、シート2との関連付けの係数を、写真の場合の数字で教えてください。

2、合計と、合計から20%を引いた数値を割り出す関数も、写真の数字で御願いします。

宜しくご教授お願い致します。

Aベストアンサー

画像がいまいちよく見えないのですが、納品書の項目は左から、No、商品番号、商品名、単価、数量、金額でいいのでしょうか(名前は多少違っていても意味があっていればもんだいないです)

でしたら、
C1セルに=IF(ISBLANK(B2),"",VLOOKUP(B2,Sheet2!$A$2:$C$200,2,FALSE))
D1セルに=IF(ISBLANK(B2),"",VLOOKUP(B2,Sheet2!$A$2:$C$200,3,FALSE))
E1セルは空白で
F1セルに=IF(D2="","",D2*E2)
といれて、C1からF1までをコピーしてその下の行にタテに貼り付ければ出来ますよ。
おそらくエラーが出たのは、コピーしたときにVLOOKUP関数の最初のセルの指定がずれてしまっているのでは無いかと思いますよ。     

QEXCELで入力された式の値を求めて自動計算

A B C D E
1|データNO |数値1| 数値2| 数値3|
2| 1| 0.3 | 0.2 | 0.5 |
3| 2| 0.3 | 0.2 | 0.5 |
4| 3| 0.3 | 0.2 | 0.5 |

--------------------------------------------

10| 2/1| 数式1| 数式2 | 数式3 |
11| 3/2| 数式4| 数式5 | 数式6 |
12|

【求めたい値】
数式1には=C3/C2、数式2には=D3/D2、数式3には=E3/E2
数式4には=C4/C3、数式2には=D4/D3、数式3には=E4/E3

B列の2/1というのをそのまま式にしたいです。
2/1、3/2などは規則性はありません。その都度変わります。
C列の式ではC列の値を、D列の式ではD列の値を用います。

関数で=MATCH(LEFT(D34,SEARCH("/",D34,1)-1),D1:D23,0))と入れ、C3の値を求めようと思いましたが
この時点でエラーになりました。=MATCH(2,D1:D23,0)だと大丈夫なのですが・・・。
関数でやるととても式が長くなりそうなので、VBAの方が良いかとも思っています。

どのようにコード、もしくは式を書けば希望の値が得られるでしょうか?
VBAの場合は2/1などの数値を入れた時点で自動計算できれば嬉しいです。

よろしくお願いします。

A B C D E
1|データNO |数値1| 数値2| 数値3|
2| 1| 0.3 | 0.2 | 0.5 |
3| 2| 0.3 | 0.2 | 0.5 |
4| 3| 0.3 | 0.2 | 0.5 |

--------------------------------------------

10| 2/1| 数式1| 数式2 | 数式3 |
11| 3/2| 数式4| 数式5 | 数式6 |
12|

【求めたい値】
数式1には=C3/C2、数式2には=D3/D2、数式3には=E3/E2
数式4には=C4/C3、数式2には=D4/D3、数式3には=E4/E3

B列の2...続きを読む

Aベストアンサー

B10以下には「2/1」のように『割り算』しか入らないとします
B10以下に「2/1」のように記入するため,B10以下のセルは「文字列」の書式設定を施しておきます
またB2以下の1,2,3の番号も,「文字列」の書式を付けた上で1,2,3の番号の数字を改めて記入し直しておきます。(必ず行う)
#ご利用のエクセルのバージョンが不明ですが,「緑の▼」が表示されて目障りなときは,セルを選んで表示される「黄色い!」からエラーチェックオプションで「文字列として保存されている数値」のチェックを外す


ふつーに/の前後で番号の数字を切り分けて該当する値を参照し,割り算する:

C10に事前に「数値」などの書式を設定してから次の式を入れること
=IF($B10="","",VLOOKUP(--LEFT($B10,FIND("/",$B10)-1),$B$2:C$8,COLUMN()-1,FALSE)/VLOOKUP(--MID($B10,FIND("/",$B10)+1,9),$B$2:C$8,COLUMN()-1,FALSE))
右に下にコピーする



#補足
前段にごちゃごちゃ書いた説明をキチンと行っておけば,アナタが当初考えて失敗した式でも計算できたと思います。

B10以下には「2/1」のように『割り算』しか入らないとします
B10以下に「2/1」のように記入するため,B10以下のセルは「文字列」の書式設定を施しておきます
またB2以下の1,2,3の番号も,「文字列」の書式を付けた上で1,2,3の番号の数字を改めて記入し直しておきます。(必ず行う)
#ご利用のエクセルのバージョンが不明ですが,「緑の▼」が表示されて目障りなときは,セルを選んで表示される「黄色い!」からエラーチェックオプションで「文字列として保存されている数値」のチェックを外...続きを読む

Qエクセル2007でプルダウンで選んだものに反応

Excel2007でプルダウンで選んだものに反応して隣のセルが自動入力される方法(エクセル2007)
A1をプルダウンで「猫」「犬」から選べるようにし、「猫」を選んだ場合B1に自動に「111」が、「犬」を選んだ場合B1に自動に「222」と入力されるようにしたいです。
ご教授の程、宜しくお願いします。

Aベストアンサー

VLOOKUP関数での方法です。
(1)別シートに入力文字列と対応コード表を作成。(仮にSheet2のA:B列範囲で順不同)
(2)B1に=IF(COUNTIF(Sheet2!A:A,A1),VLOOKUP(A1,Sheet2!A:B,2FALSE),"")を設定
   入力文字列が存在しない場合は空白としています。

QVBAで入力規則 エラーでも入れたい

Excel2003を使っています。

Range("B1").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=INDIRECT(A1)"

これを使って「=INDIRECT(A1)」を入力規則のリストとして、セルのA1が空欄の状態で入れたいのですが、実行時エラー1004となってしまいます。
セルのA1には複数ある定義された名前のどれか一つが入るようにします。そして、そのどれか一つが入っていれば、エラーは起こることなく入力規則は設定されます。
ただ、A1は後々この資料を使うときに打ち込みたいため、VBAを走らせている段階では空欄のままにしておきたいのです。

これ、VBAを使わず直接入力規則を設定するときも、A1が空欄だと「元の値はエラーと判断されます。続けますか?」というメッセージが出ますよね?
たぶん、これが原因だと思いますが、直接入れるときはそのメッセージを「はい」で強行することができます。
これをVBAで入れるときにもできないものかなと思っています。
VBAで強行して設定する方法はないものでしょうか?

ちなみに「On Error Resume Next」をつけてみましたが、その場合はエラーは出ないものの入力規則も設定されませんでした・・・。

Excel2003を使っています。

Range("B1").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=INDIRECT(A1)"

これを使って「=INDIRECT(A1)」を入力規則のリストとして、セルのA1が空欄の状態で入れたいのですが、実行時エラー1004となってしまいます。
セルのA1には複数ある定義された名前のどれか一つが入るようにします。そして、そのどれか一つが入っていれば、エラーは起こることなく入力規則は設定されます。
ただ、A1は後々この資料を使うときに打ち...続きを読む

Aベストアンサー

>ただ、A1は後々この資料を使うときに打ち込みたいため、
>VBAを走らせている段階では空欄のままにしておきたいのです。
設定した後に消去すれば良いと思います。

または入力規則側でエラー制御するか。
Formula1:="=IF(A1="""",A1,INDIRECT(A1))"

http://oshiete.goo.ne.jp/qa/4207340.html?order=asc


このカテゴリの人気Q&Aランキング

おすすめ情報