アプリ版:「スタンプのみでお礼する」機能のリリースについて

よろしくお願いいたします。
集計表1708.xlsxファイル、シートが「1、2、3…31」となっており、それぞれのシートの中に
A1…日付
A2…weekday関数でA1を参照(月曜日を1とする)
A4…a時間
A5…b時間
A6…c時間

B4…a時間の値(数値)
B5…b時間の値(数値)
B6…c時間の値(数値)
となっております。
1日から31日までに取得した時間が入っておりますが、
①平日のみ
②土曜日のみ
③土日祝のみ(祝日はweedkayのところでifを追加し、祝日の場合は値1を表示)
の数値を「まとめシート」で取得したいのです。
なお、入っている数値等の位置は変わることはありません。(串刺しをしてみたのですがうまくいきませんでした)

無理というのであればあきらめるのですが、詳しい方がいらっしゃいましたらご教授頂けますと助かります。なお、weekday関数を使っていますが、使用しなくても大丈夫です。
どうぞよろしくお願いいたします。

「EXCELで日別に分かれているシートの平」の質問画像

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

  • おはようございます。
    返信が遅くなり申し訳ございません。

    もともとのファイルが1~31シートという仕様なので、なかなかうまくできずご相談した次第です。

    また、weekday関数が入っているのは仰る通りB1セルでした。大変失礼いたしました。

    まとめシートのどこでもよいのです。
    要は計算ができれば。
    ただ、串刺し仕様になるかと思いましたので、全シート同じ仕様として頂ければと思います。

    また、VBAでは可能なのはわかっているのですが、メンテナンスができる者が少なく、なるべく数式でやりたいとの希望でした。

    やはり難しそうですね…。

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/08/21 07:48

A 回答 (4件)

どういう式を入れているのかも書いておくべきだと思うんですが、おそらくSUMIFとかでしょうか。


SUMIFでは串刺しはできません。

シートを分けたままで私がやるなら、各シートの空いたセル(同じ位置)に月~日、平日、休日の集計表を作成。
例えばその日が月曜なら月の欄に数値が入る、さらに平日にも数値が入る、という形にしておいて集計シートで串刺しします。
    • good
    • 0
この回答へのお礼

SUMIFではなく、SUMPRODUCTで試みておりました。
おっしゃる通りシートで分かれているのでなかなかうまくできずに悩んでおりました。

どういう式を入れたらよいのかというご相談でしたが、やはり難しそうですね。。。ありがとうございました。

お礼日時:2017/08/26 23:34

こんにちは



No1様もおっしゃっているように、シートがバラバラになっているのが面倒ですね。
無理やりやるとしても、シート名の指定で式が長くなるばかりなので、少し違う方法を考えてみました。

>まとめシートのどこでもよいのです。
>要は計算ができれば。
とのことですので、まとめシートの使い方は多少自由にできるものとして考えています。
まず、「まとめシート」に計算に必要となる各シートのB列を並べて表示してしまいましょう。

例えば、A10から横に1、2、3・・・シートのB列のデータを並べることにして、A10セルに
 =INDIRECT(COLUMN()&"!B"&ROW()-9)
の式を入れて、必要な範囲まで(横31列、縦6行分?)フィルコピーすると各シートのB列の値が順に並びます。

一つのシートに表示できてしまえば、後は、COUNTIFSやSUMPRODUCT関数などを利用することで比較的簡単に集計はできますよね?
(空けてある1~10行を利用して、求めたい値を集計する関数式を設定しておけばよいでしょう)


ご質問の①、②は上記で求められると思いますが、③については、No1様のご指摘にもあるように、どのようにして土日祝を識別できるのかわかりませんので、ご質問文の条件だけでは難しいように思います。(実際には、①でも月曜と祝日の区別ができませんが…)
どこかの空きセル(例えばB2セルとか)に祝日である表示があるなどのようにしても良いのなら、①~③とも同じ要領で集計可能になると思います。
    • good
    • 1
この回答へのお礼

仰る通りまとめシートは計算ができれば特に制限などはございませんでした。
実際に使用したいと思っていたファイルが参照部分がとても多く、仰る方法だとものすごい範囲になってしまったので断念致しました。。。

ご提示いただきありがとうございました。

お礼日時:2017/08/26 23:39

No.1です。



いずれにしても関数や串刺し計算では難しいと思いますので、
↓の画像のような配置でのVBAにしてみました。
左側が各日のシートで右側が「まとめシート」とします。

尚、各日のB2セルは単純にWEEKDAY関数で
=WEEKDAY(A1)
とし、日曜日始まりとしています。
(祝日に関しては処理していませんが、数式などで「1」になるようにしてください)
標準モジュールです。

Sub Sample1() '//この行から//
Dim i As Long, k As Long, wS As Worksheet
With Worksheets("まとめシート")
.Range("B2:D4").ClearContents
For k = 1 To Worksheets.Count
Set wS = Worksheets(k)
If wS.Name <> .Name Then
For i = 2 To 4
Select Case wS.Range("B1")
Case 7
With .Cells(i, "C")
.Value = .Value + wS.Cells(i + 2, "B")
End With
Case 1
With .Cells(i, "D")
.Value = .Value + wS.Cells(i + 2, "B")
End With
Case Else
With .Cells(i, "B")
.Value = .Value + wS.Cells(i + 2, "B")
End With
End Select
Next i
End If
Next k
End With
End Sub '//この行まで//

※ どうしても関数で!となると
コツコツIF関数のネストで各シートのB2セルの値を分岐 → 該当セルにプラス!
といった作業になるのではないでしょうか?
そこまでやる気力も体力もありませんが・・・m(_ _)m
「EXCELで日別に分かれているシートの平」の回答画像2
    • good
    • 0
この回答へのお礼

まとめてのお礼で申し訳ございません。
VBAまでお考えいただきありがとうございました。
最終的にマクロかなとは思っていたのですが、それも範囲が広く細かくとても難しそうでした。

機能的に難しいということのようですが、色々とお考えいただきましたため、ベストアンサーとさせていただきました。
貴重なお時間をいただきありがとうございました。

お礼日時:2017/08/26 23:42

こんばんは!



回答ではありません。

>シートが「1、2、3…31」となっており・・・
これが作業を余計に難しくさせていますね。
一つのSheetにまとめれば関数で簡単にできそうですが、まぁ~それはさておいて。

VBAであれば可能です。ただし、
>A2…weekday関数でA1を参照(月曜日を1とする)

ん?画像ではB1セルでは?
それと「月曜日=1」としてしまうと
>祝日はweedkayのところでifを追加し、祝日の場合は値1を表示

とありますので、月曜と祝日が共に「1」になってしまい、平日か祝日かの判断ができません。
普通に日曜日始まりで月曜日は「2」とした方が間違いがないかも・・・

そして、「まとめシート」のどこのセルに
①~③の値を表示すれば良いかも記載がありませんね。

その辺が判らないといくらVBAで!といってもコードの記載ができません。

この程度でごめんなさい。m(_ _)m
この回答への補足あり
    • good
    • 0

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