ここから質問投稿すると、最大10000ポイント当たる!!!! >>

この様な勤怠管理表なのですが、土曜日だけ外して各々の集計をだすにはどうすればよいでしょうか?
また、土曜日のみ集計するにはどうすれば良いでしょうか?
会社の締め日が20日なため、20日までの集計と、20以降の集計で分けています。
どの様な関数が適切なのか?どうかわかる方教えてください。
宜しくお願い致します。

「勤怠管理表を作成しています、集計のやり方」の質問画像

質問者からの補足コメント

  • うれしい

    ありがとうございます!!
    現在出張なので、社に戻り次第やってみたいと思います。

      補足日時:2017/02/24 13:52
  • こんにちは!大分遅くなりましてすみません!!
    B列の曜日は自動ででるようにはなってます。
    この前頂いた関数を入力しましたが、計算が何故かおかしい答えになりました。
    次のファイルに添付致します。
    どこが間違っているか見て頂けないでしょうか?

    「勤怠管理表を作成しています、集計のやり方」の補足画像2
      補足日時:2017/03/01 14:42
  • 補足の付け足しです。
    この様に答えは2.1時間になってしまいます。
    どうすればよろしいでしょうか?

    「勤怠管理表を作成しています、集計のやり方」の補足画像3
      補足日時:2017/03/01 14:48

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

A 回答 (2件)

ANo1です。



回答時には、表の作成のされ方がまったく不明でしたので、計算しやすい方法を提示しましたが、補足の表を見る限り(細部はぼやけてたりでよくわかりませんが)、違う作り方(見掛けではなく内部的に)をなさっているようですので、ANo1で提示した関数では意味の違うものになってしまう可能性が高いです。
(ANo1で仮定している内容は、回答に示してあります)

どのような作り方でもかまいませんが、その作り方に合った計算方法をとらないと、求める答えが得られる保証はありません。
とは言え、通常の数値計算では見た目と計算内容はほぼ一致していますが、時間や日付計算の場合はエクセルがどのような値を保持しているかで計算内容がまったく異なった結果になる可能性があります。(見掛け上で表示されている値ではありません)

例えば、ANo1では(説明にもあるように)A列、B列とも日付型の同じ値が保持されているものと仮定しています。(同じ値なのでB列の式は「=A4」などの単純なものになっています)
例として、日付型の値「2017/3/1」がセルに入っているとして…
 ・書式を「yyyy/m/d」とすると、「2017/3/1」と表示
 ・書式を「標準」とすると、「42795」と表示(←シリアル値)
 ・書式を「d」とすると、「1」と表示(←回答のA列=日付)
 ・書式を「aaa」とすると、「水」と表示(←回答のB列=曜日)
となることを利用しています。
(セルの値として、計算に使用されるのは「2017/3/1」に対応するシリアル値です)

それぞれの時刻の項目に関しても同様で、60進法を気にせずに加減算ができることを利用しています。
(結果が負数にならないように注意することは必要ですが…)

ご提示の表では、時刻の部分が文字列(?)のようにも見受けられますので、そのまま計算してくれるのか不明です。
手元で簡単に試してみたところ、時刻形式の文字列に対しては、エクセルは解釈できる範囲で時刻計算をしてくれているみたいではありますが…
(どのような条件の時に変換されるのかは、私にはわかりません)

それなので、もしかすると、補足でご提示の式でも、書式を変えるだけで時刻の計算結果が得られるのかも知れません。
しかし、対象が文字列の場合には、一旦、TIMEVALUE()などを取って変換するか、あるいは時・分に分解して60進法で自分で計算するなどの方が確実と言えそうです。

ANo1で提示した表の作成方法と計算式は、比較的簡単に計算ができる方法として思いついたものですので、他の方法を採用なさるのはもちろんご自由ですが、その際には、その内容に合わせた計算式にしておくことが必要と思います。
    • good
    • 0
この回答へのお礼

分かりました!ちょっとやってみます!

お礼日時:2017/03/01 19:10

こんにちは


回答が無いようですので…


表の内容をどのように作成なさっているのかわかりませんが、時間計算を行うならシリアル値を利用するとそのまま加減算ができるので便利です。

サンプルでひと月分作ると読めなくなってしまうので、小規模に縮小したサンプルで作成してみました。
左上(A1セル)に年月日(日付は1日)を入力すると、A列(日)とB列(曜日)は自動で表示されます。
時間表記部分の書式は全て [h]:mm として時分で表記できるようにしてあります。
(各時間入力(?)欄は 時:分 形式のみの入力と仮定)

・・・という仮定のもとに、

例えばD列の集計は
 土曜以外 =SUMPRODUCT((TEXT($B3:$B14,"aaa")<>"土")*(D3:D14))
 土曜日  =SUMPRODUCT((TEXT($B3:$B14,"aaa")="土")*(D3:D14))
 全体合計 =SUM(D3:D14)
で求められると思います。
(SUMPRODUCTで求めましたが、SUMIFでもできるのかも)

※ 日数は縮小サイズなので、計算範囲の指定は調整が必要です。
 (上記の例では3行目から14行目までの集計になっています)
※ 20日以前、以後を分割する場合は、A列の値を条件に加えれば可能です。
 (上の例示式の曜日判定の応用でできます)
「勤怠管理表を作成しています、集計のやり方」の回答画像1
    • good
    • 0
この回答へのお礼

遅くなりました、すみません。

頂いた関数でできました!

書式の中の定義を変更し忘れていたのでご指摘の定義を使用したところちゃんと計算されました。

ありがとうございます。

お礼日時:2017/03/08 16:25

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

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

Qvbsでは漢字の変数は使えないのでしょうか。

下記はエラーになります。
Option Explicit
Dim 氏名

氏名=InputBox("氏名を入力して下さい")
MsgBox(氏名)

ここで、氏名をnameに変更すると正しく実行します。
Option Explicit
Dim name

name=InputBox("氏名を入力して下さい")
MsgBox(name)

漢字の変数を使う方法は無いのでしょうか。

Aベストアンサー

もうお答えは出ているようですが、私からも回答します。

2byte 文字を変数にすると、

\kanjitest.vbs(2, 5)
「Microsoft VBScript コンパイル エラー: 文字が正しくありません。」

のエラーが出ます。
Unicode VBSにしても、やはりエラーが出ます。

もともと、String 型で認められる所以外では、2byte 文字は、ハングしますから、仕方がありません。VBAとは違いますから。
これを、HTA にして、Charset を、UTF-8 にしても、エラーは出ます。諦めることでしょうね。

QC言語で数行の「プログラム」を書いてみていただけませんでしょうか

C言語で数行の「プログラム」を書いてみていただけませんでしょうか?御手数をおかけしますが、なにとぞ宜しく御願いします。

買い物、支払い、おつりに関する例です。

×××円の商品を買った。
○○○円をレジで店員に渡した。
(これは、1、5、10、50、100、500、1、000、2,000、5,000、10,000に限らない。客が、「1013円」を払うなどということもあるので。)
コンピューターが減法を行い、おつりの額、□□□円が出力される。
変数の表記は、もちろん何でも構いません。

御多忙中、大変恐縮ですが、プログラムがどう書かれるのか関心がありますので、どうぞ宜しく御願い申し上げます。

自分にもできるのかどうか、という点にも強い関心があります。

たいへんお世話様ですが、どうぞお教え下さい。御願い申し上げます。

Aベストアンサー

たとえば、

#include<stdio.h>
int main(){
 int kakaku,shiharai;
 scanf("%d %d",&kakaku,&shiharai);
 printf("%d\n",shiharai-kakaku);
 return 0;
}

とか。

Q【VBA】IF文 複数(ネスト)の時の処理について

こんにちは。
if文についておしえてください。
以下のようなマクロがあるとします。

変数 tensuuに-1をいれて実行すると①→②のように動作し「入力エラー」と表示されます。
tensuuに120を入れて実行すると①´→②´の順に動作し「入力エラー1」と表示されます。

どして、-1のときは入力エラー1にはいかず入力エラーにいくのでしょうか?
120のときは入力エラーにはいかず入力エラー1にいくのでしょうか?

動きがよくわかりません。
IF文とELSEはどういう紐づけがされているのでしょうか?

よろしくおねがいいたします。
   
Sub t()
tensuu = -1
If tensuu >= 0 Then '①
If tensuu <= 100 Then '①´
If tensuu >= 80 Then
MsgBox "合格"
Else
MsgBox "不合格"
End If
Else
MsgBox "入力エラー1" '②´
End If
Else
MsgBox "入力エラー" '②
End If
End Sub

こんにちは。
if文についておしえてください。
以下のようなマクロがあるとします。

変数 tensuuに-1をいれて実行すると①→②のように動作し「入力エラー」と表示されます。
tensuuに120を入れて実行すると①´→②´の順に動作し「入力エラー1」と表示されます。

どして、-1のときは入力エラー1にはいかず入力エラーにいくのでしょうか?
120のときは入力エラーにはいかず入力エラー1にいくのでしょうか?

動きがよくわかりません。
IF文とELSEはどういう紐づけがされているのでしょうか?

よろし...続きを読む

Aベストアンサー

If 〜 Then 〜 Else 〜 End If
で1セットです。

ネスト(入れ子)になったIF文というのは、 Then 〜 とか Else 〜 の〜の部分にIf文がくるものです。
ですから、外のIfを越えてしまうことはありません。
よって、一番内側から見ていけば、構造がはっきりします。


一番内側から見ます。

If tensuu >= 80 Then
MsgBox "合格"
Else
MsgBox "不合格"
End If

が1セットです。
これを 「文1」とすると元のプログラムは

If tensuu >= 0 Then '①
If tensuu <= 100 Then '①´
「文1」
Else
MsgBox "入力エラー1" '②´
End If
Else
MsgBox "入力エラー" '②
End If

となります。この状態で「一番内側」を見ると

If tensuu <= 100 Then '①´
「文1」
Else
MsgBox "入力エラー1" '②´
End If
です。これを「文2」とすると

If tensuu >= 0 Then '①
「文2」
Else
MsgBox "入力エラー" '②
End If


余談ですが
この例の場合、外側2つは、判定内容と処理とが離れてしまい、見辛いのは確かです。
if 条件 Then A Else B は if not条件 Then B Else A と同じ、ということから、Thenでの処理とElseでの処理を入れかえれば、
条件の直ぐ下の処理が来るので、見易さが格段によくなります。

If tensuu < 0 Then '① ' tensuu<0 は not (tensuu>=0)と同じ
MsgBox "入力エラー" '②
ElseIf tensuu > 100 Then '①´
MsgBox "入力エラー1" '②´
ElseIf tensuu >= 80 Then
MsgBox "合格"
Else
MsgBox "不合格"
End If ' ElseIfで継いでいるので、ネストにはなっていない

If 〜 Then 〜 Else 〜 End If
で1セットです。

ネスト(入れ子)になったIF文というのは、 Then 〜 とか Else 〜 の〜の部分にIf文がくるものです。
ですから、外のIfを越えてしまうことはありません。
よって、一番内側から見ていけば、構造がはっきりします。


一番内側から見ます。

If tensuu >= 80 Then
MsgBox "合格"
Else
MsgBox "不合格"
End If

が1セットです。
これを 「文1」とすると元のプログラムは

If tensuu >= 0 Then '①
If tensuu <= 100 Then '①´
「文1」
Else
MsgBox "入力エラー1" '②´
...続きを読む

QVBAで3の倍数の乱数を取得する

excelのVBAのことなのですが
3の倍数で整数で乱数を取得する方法がわかりません。

これがどうしてもわからなくて困ってます。
教えてください。

Aベストアンサー

60~198のの範囲の3の倍数の乱数を発生させ、A1からA1000のセルにその値を書き込んでいます。
200は3の倍数にならないので198を上限にしています。
MyRandを呼び出すと60から198の範囲の3の倍数の乱数を返します。
(あなたが実際に使うのは、MyRandだけです)
上限を201にしたいなら、66を67に変えてください。
MyRandを呼び出す前にRandomizeを1回実行してください。そうしないと毎回同じ結果が返ります。
---------------------------------
Option Explicit
Public Sub 乱数作成()
Dim i As Long
Dim r As Long
'乱数を作成しA列へ格納する(1000回分)
Randomize
For i = 1 To 1000
r = MyRand()
Cells(i, 1).Value = r
Next
End Sub

'60から198の範囲内の3の倍数の乱数を生成する。
Public Function MyRand() As Long
MyRand = Int((66 - 20 + 1) * Rnd + 20) * 3
End Function

60~198のの範囲の3の倍数の乱数を発生させ、A1からA1000のセルにその値を書き込んでいます。
200は3の倍数にならないので198を上限にしています。
MyRandを呼び出すと60から198の範囲の3の倍数の乱数を返します。
(あなたが実際に使うのは、MyRandだけです)
上限を201にしたいなら、66を67に変えてください。
MyRandを呼び出す前にRandomizeを1回実行してください。そうしないと毎回同じ結果が返ります。
---------------------------------
Option Explicit
Public Sub 乱数作成()
Dim i As Long
...続きを読む

Q正規表現で、行頭の文字列が、!で始まる一行を

で囲みたい

正規表現で、行頭の文字列が、!で始まる文字列を<h1></h1>で囲みたいです
囲むのは!で始まる行の最初から最後までです
次の行は含めません。

検索:^\!
置き換え:

という形式で教えてください

Aベストアンサー

言語がわかりませんが
/^!(.*?)$/m

<h1>$1</h1>
に変えてみては?

Qオブジェクト指向の壁

Java言語などは「オブジェクト指向」が売り?だと思うのですが
素人や初心者が、ぶち当たる「オブジェクト指向の壁」って何だと思いますか?

暇な時にでも回答ください。

Aベストアンサー

多分無い
思考停止状態でもプログラミングできるのがオブジェクト指向みたいなものです
まあこれは言いすぎかもですけどw

ただし、しっかりと理解をしようとすると
カプセル化、継承、ポリモーフィズムなど
オブジェクト指向の基本機能が奥が深すぎて難しい気がする

私自身、オブジェクト指向は普段使わないので、説明できないです。
なんとなくこんなものとふんわりと理解はしていますが
正確な説明や、使い道などが全然分かりません

このふんわりとした理解でも使えてしまうのが
オブジェクト指向の欠点
内部の動作を理解できていなくてもプログラムが組めてしまうので
予想外なバグに対応できない初心者が多いみたいです

オブジェクト指向から入ったプログラマーが嫌われがちなのはこういった背景があります

Qセルの移動

教えてください?
セルの指定移動がgooの回答に出ていました、それを少し変えて利用したいのですがどのように書き込みをすれば、起動するのでしょうか、最初からの作業説明と解説が頂ければ幸いです。
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address(False, False)
Case "A1" 'このセルが変更されたら---(1)
Range("B1").Select 'このセルに移動する---(2)

Case "B1" 'このセルが変更されたら---(1)
Range("E1").Select 'このセルに移動する---(2)

Case "E1" 'このセルが変更されたら---(1)
Range("G1").Select 'このセルに移動する---(2

Case "G1" 'このセルが変更されたら---(1)
Range("A2").Select 'このセルに移動する---(2

Case "A2" 'このセルが変更されたら---(1)
Range("B2").Select 'このセルに移動する---(2)
Case Else
End Select
End Sub

やろうとしていることはA1、B1、E1 、G1と入力 次行A2移動の繰り返しです
セルへジャンプするとありがたいのです。

教えてください?
セルの指定移動がgooの回答に出ていました、それを少し変えて利用したいのですがどのように書き込みをすれば、起動するのでしょうか、最初からの作業説明と解説が頂ければ幸いです。
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address(False, False)
Case "A1" 'このセルが変更されたら---(1)
Range("B1").Select 'このセルに移動する---(2)

Case "B1" 'このセルが変更されたら---(1)
Range("E...続きを読む

Aベストアンサー

こんにちは!

一例です。

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A:A,B:B,E:E,G:G")) Is Nothing Or Target.Count > 1 Then Exit Sub
With Target
Select Case .Column
Case 1
.Offset(, 1).Select
Case 2
.Offset(, 3).Select
Case 5
.Offset(, 2).Select
Case Else
.Offset(1, -6).Select
End Select
End With
End Sub

こんな感じではどうでしょうか?m(_ _)m

こんにちは!

一例です。

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A:A,B:B,E:E,G:G")) Is Nothing Or Target.Count > 1 Then Exit Sub
With Target
Select Case .Column
Case 1
.Offset(, 1).Select
Case 2
.Offset(, 3).Select
Case 5
.Offset(, 2).Select
Case Else
.Offset(1, -6).S...続きを読む

QVBA教えてください

以下のようにテキストファイルに記入されている文字列をエクセルに抽出したいのですが
なかなか思うようにいきません。

<テキストデータ>
項 A B C D
1 40
2 30
3 20

<エクセルに抽出したいデータ>
1 40
2 30
3 20


どなたかお詳しい方いらっしゃいましたら教えて頂けると幸いです。

Aベストアンサー

大変遅くなりました。以下のような感じはいかがでしょうか?
---------------------------------------------------------------------------------
Sub Sample()
Dim 対象ファイル As String
Dim 行データ As String
Dim 位置 As Long
Dim 対象位置 As Long
Dim 文字数 As Long
Dim 対象 As Boolean
Dim 行 As Long
Dim 比較文字 As String
Dim 数字 As String
対象ファイル = Application.GetOpenFilename("テキスト ファイル,*.txt")
If 対象ファイル = "False" Then Exit Sub
Open 対象ファイル For Input As #1
Do Until EOF(1)
Line Input #1, 行データ
If 対象 Then
If 対象位置 > Len(行データ) Then 対象 = False
If Mid(行データ, 1, 1) < "0" Then 対象 = False
If Mid(行データ, 1, 1) > "9" Then 対象 = False
If Mid(行データ, 対象位置, 1) < "0" Then 対象 = False
If Mid(行データ, 対象位置, 1) > "9" Then 対象 = False
Else
比較文字 = ""
For 位置 = 1 To Len(行データ)
If Mid(行データ, 位置, 1) <> " " Then
比較文字 = 比較文字 & Mid(行データ, 位置, 1)
If Mid(行データ, 位置, 1) = "D" Then 対象位置 = 位置
End If
Next
End If
If 対象 Then
行 = 行 + 1
数字 = ""
For 位置 = 1 To 対象位置
If Mid(行データ, 位置, 1) < "0" Then Exit For
If Mid(行データ, 位置, 1) > "9" Then Exit For
数字 = 数字 & Mid(行データ, 位置, 1)
Next
Cells(行, 1).Value = 数字
数字 = ""
For 位置 = 対象位置 To Len(行データ)
If Mid(行データ, 位置, 1) < "0" Then Exit For
If Mid(行データ, 位置, 1) > "9" Then Exit For
数字 = 数字 & Mid(行データ, 位置, 1)
Next
Cells(行, 2).Value = 数字
Else
If 比較文字 = "ABCD" Then 対象 = True
For 位置 = 1 To Len(行データ)
If Mid(行データ, 位置, 1) = "D" Then 対象位置 = 位置
Next
End If
Loop
Close #1
End Sub
---------------------------------------------------------------------------------

大変遅くなりました。以下のような感じはいかがでしょうか?
---------------------------------------------------------------------------------
Sub Sample()
Dim 対象ファイル As String
Dim 行データ As String
Dim 位置 As Long
Dim 対象位置 As Long
Dim 文字数 As Long
Dim 対象 As Boolean
Dim 行 As Long
Dim 比較文字 As String
Dim 数字 As String
対象ファイル = Application.GetOpenFilename("テキスト ファイル,*.txt")
If 対象ファイル = "False" Then Exit Sub
Open 対象ファイル For Inp...続きを読む

Qエディタ って?

テキストエディタ という言葉が使われましたが、何を表しているのでしょうか?

Aベストアンサー

ワープロの簡易版みたいな感じで、ほぼWindows のメモ帳のようなものです。文字サイズ、罫線とか図名を操作するような機能はありません。テキストのみを編集(エデット)するソフトです。

Q下記のようなタグの場合、VBAでボタンをクリックするためにはどのような処理になるのでしょうか? TY

下記のようなタグの場合、VBAでボタンをクリックするためにはどのような処理になるのでしょうか?
TYPE=”button” や TYPE=”submit”の場合は、処理例があるのでわかるのですが・・・
--------------
<div id="btn_login">

<!--
<a href="./login/login_new.htm?height=200&width=370" rel="sexylightbox" ><img src="images/btn_login_off.png" class="iepngfix"></a>
-->

<!--
<a href="./login/login_new.htm?height=200&width=370" rel="sexylightbox" ><img src="images/btn_login_off.png" class="iepngfix" onClick="JavaScript:document.frmDefault.hdnKushituSearchFlg.value=;"></a>
-->

<!--
<a href="./login/login_new.htm?TB_iframe=true&#038;height=190&#038;width=370" class="lightbox" rel="sexylightbox"><img src="images/btn_login_off.png" class="iepngfix" onClick="JavaScript:document.frmDefault.hdnKushituSearchFlg.value=;"></a>
-->
<a href="./login/login_new.htm?height=200&width=370" rel="sexylightbox" ><img src="images/btn_login_off.png" class="iepngfix" onClick="JavaScript:document.frmDefault.hdnKushituSearchFlg.value=0;"></a>

</div><!--btn_login-->

下記のようなタグの場合、VBAでボタンをクリックするためにはどのような処理になるのでしょうか?
TYPE=”button” や TYPE=”submit”の場合は、処理例があるのでわかるのですが・・・
--------------
<div id="btn_login">

<!--
<a href="./login/login_new.htm?height=200&width=370" rel="sexylightbox" ><img src="images/btn_login_off.png" class="iepngfix"></a>
-->

<!--
<a href="./login/login_new.htm?height=200&width=370" rel="sexylightbox" ><img src="images/btn_login_off.png" class="iep...続きを読む

Aベストアンサー

ANo1です。

>getElelentsByTagName("img")
エラーメッセージ通りで、存在しないメソッドだから。

VBAのインデックスの開始がよくわかっておりませんが、もしかすると、インデックスは「1」かもしれませんので、両方テストしてみてください。


人気Q&Aランキング