• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルで、人ごとの集計を時刻ごとにする方法)

エクセルで人ごとの集計を時刻ごとにする方法

このQ&Aのポイント
  • エクセルを使用して人ごとのデータを時刻ごとに集計する方法について教えてください。
  • 部屋ごとの利用データと時刻の情報がある場合、エクセルを使ってどの部屋が誰に利用されていたかを一覧表示する方法を知りたいです。
  • 部屋番号と時刻を表した行列にID番号や空室を表示するイメージですが、具体的な方法がわかりません。途中の時刻の処理も困っています。エクセルとアクセスを使用して解決する予定です。

質問者が選んだベストアンサー

  • ベストアンサー
  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.4

>オフィス(エクセルとアクセス)は私のPCにインストールされていますので、それでできるのかどうかご教示ください。 Excelでできます。 但し、VLOOKUP関数で抽出することはできないでしょう。 質問に添付画像の模擬データをそのまま使ってExcel 2013で検証しました。 左側をSheet1、右側をSheet2としてSheet2!B2へ次の数式を設定します。 =IF(SUMPRODUCT((Sheet1!$B$2:$B$4<=$A2)*(Sheet1!$C$2:$C$4>=$A2)*(Sheet1!$D$2:$F$4=RIGHT(B$1,1))*(Sheet1!$D$2:$F$4=RIGHT(B$1,1))),INDEX(Sheet1!$A:$A,SUMPRODUCT((Sheet1!$B$2:$B$4<=$A2)*(Sheet1!$C$2:$C$4>=$A2)*(Sheet1!$D$2:$F$4=RIGHT(B$1,1))*(Sheet1!$D$2:$F$4=RIGHT(B$1,1))*ROW(B$2:B$4))),"") Sheet2!B2セルを右と下へ必要数コピーします。 但し、模擬データの範囲で数式を組み立てていますので範囲が広くなる時は行数と列数を適宜修正してください。 基本的にはSUMPRODUCT関数の引数内で論理演算を行い抽出すべき行番号を算出しています。 算出された行番号を使ってINDEX関数でSheet1のA列から目的の値を抽出します。

kmmmmmt24
質問者

お礼

ありがとうございます! 思っていた計算ができました。 ところで、 SUMPRODUCTの中で、 (Sheet1!$D$2:$F$4=RIGHT(B$1,1)) を繰り返す(2乗する?)理由はなぜでしょうか? もし可能でしたらご教示ください。

すると、全ての回答が全文表示されます。

その他の回答 (7)

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.8

済みません、謝罪します 色気を出したばかりに、空室処理が甘かったですね 修正しました https://1drv.ms/x/s!AjviygfJDgV_kR_E2x6mEqYnWSJg

参考URL:
https://1drv.ms/x/s!AjviygfJDgV_kR_E2x6mEqYnWSJg
kmmmmmt24
質問者

お礼

遅くなりました。 ありがとうございます! 使わせていただきます。丁寧に作っていただき心より感謝いたします!!

すると、全ての回答が全文表示されます。
  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.7

お待たせしました 出来ました 此所に置きますね https://1drv.ms/x/s!AjviygfJDgV_kRuF3Z8qbZHJlPy- 消去する可能性が、あるので 早めに、ダウンロード くださいね 但し、ご覧のように まずは、お試し版です どう違うか と、いうと 検索キーが、時間だけの 限定版です 抽出条件で、指定する行と 結果抽出対象行を OFFSET文等で 臨機応変に、変動させれば 複数キー検索に、移行できる と、思います ので そうは、難しくない の、ですが まあ此は、お試し版です

参考URL:
https://1drv.ms/x/s!AjviygfJDgV_kRuF3Z8qbZHJlPy-
すると、全ての回答が全文表示されます。
  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.6

直ぐに欲しい との事、ですが キー値を、指定すると 該当データを表す そんな エクセルシート作成に 明日から、挑んでみます 失敗しても、 其の旨、必ず報告します ので、 暫し閉め切らずに、お待ち頂けますか? もし、完成したら ファイルで、お渡ししますね、

すると、全ての回答が全文表示されます。
  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.5

>SUMPRODUCTの中で、 >(Sheet1!$D$2:$F$4=RIGHT(B$1,1)) >を繰り返す(2乗する?)理由はなぜでしょうか? 単純なチェックミスです。 1つでも同じ結果になりますので省略してください。 SUMPRODUCT((Sheet1!$B$2:$B$4<=$A2)*(Sheet1!$C$2:$C$4>=$A2)*(Sheet1!$D$2:$F$4=RIGHT(B$1,1))*(Sheet1!$D$2:$F$4=RIGHT(B$1,1)))           ↓ SUMPRODUCT((Sheet1!$B$2:$B$4<=$A2)*(Sheet1!$C$2:$C$4>=$A2)*(Sheet1!$D$2:$F$4=RIGHT(B$1,1))) SUMPRODUCT((Sheet1!$B$2:$B$4<=$A2)*(Sheet1!$C$2:$C$4>=$A2)*(Sheet1!$D$2:$F$4=RIGHT(B$1,1))*(Sheet1!$D$2:$F$4=RIGHT(B$1,1))*ROW(B$2:B$4)))           ↓ SUMPRODUCT((Sheet1!$B$2:$B$4<=$A2)*(Sheet1!$C$2:$C$4>=$A2)*(Sheet1!$D$2:$F$4=RIGHT(B$1,1))*ROW(B$2:B$4))) 論理演算の結果は1または0にしかなりませんので何乗しても結果は同じです。 数式が長くなったのでチェックミスが起こったようです。

kmmmmmt24
質問者

お礼

ありがとうございます。

すると、全ての回答が全文表示されます。
  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.3

こんにちは 図の左側のデータの有るシートのシートタブを右クリックして「コードの表示」 を選択して表示されたVBE画面に Private Sub Worksheet_Change(ByVal Target As Range)   Dim tSh As Worksheet   Dim r As Range   Dim v As Variant   Dim s As Variant   Dim t As Variant      '上から順に入力されるとして   If Intersect(Target, Range("A1").CurrentRegion) Is Nothing Then Exit Sub      '部屋の入力の有無   If WorksheetFunction.CountA(Target.EntireRow.Range("D1:F1")) = 0 Then Exit Sub      '時間の入力の有無   If WorksheetFunction.CountA(Target.EntireRow.Range("B1:C1")) = 0 Then Exit Sub      'IDの入力の有無   If Target.EntireRow.Range("A1") = "" Then Exit Sub      Set tSh = Worksheets("Sheet2")      If Target.Column >= 4 Then     v = Application.Match("部屋" & Target, tSh.Rows(1), 0)     If IsError(v) Then MsgBox "該当の部屋が有りません", vbExclamation: Exit Sub     s = Application.Match(Target.EntireRow.Range("B1"), tSh.Columns(1), 0)     If IsError(s) Then MsgBox "該当の開始時間が有りません", vbExclamation: Exit Sub     t = Application.Match(Target.EntireRow.Range("C1"), tSh.Columns(1), 0)     If IsError(t) Then       If Target.EntireRow.Range("C1") = "" Then         t = s       Else         MsgBox "該当の終了時間が有りません", vbExclamation: Exit Sub       End If     End If     With tSh       .Range(.Cells(s, v), .Cells(t, v)).Value = Target.EntireRow.Range("A1")     End With   End If End Sub をコピーし貼り付けて、 Set tSh = Worksheets("Sheet2") のシート名を図の右側のデータが有るシートの名前に変更してから データを入力してみて下さい。 時間の端数の部分の事が良く分からないですが、適当に修正して下さい。 1は10時、2は10時0分10秒??? 時間では無くて整数で入力してあるという事で、途中の時刻とは10秒未満の時間 の事ですか?

kmmmmmt24
質問者

お礼

遅くなりました。上から頑張って解読していました。 丁寧に作っていただき、本当にありがとうございます。 データがない場合の処理をいれていただき、スムーズに変換ができそうです。 ありがとうございました!

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.2

質問し直しをしていただいたようですが、私から言うと、ほとんど前質問と変わっていない。 時刻を時間(刻)帯(範囲)で整数コード化したいというのが主目的ですか? 1単位の時間幅=小数で割って、適当に丸めると、整数化できないかな。 私は質問の意味が十分分からず、的確な回答はできませんが、続く他の回答者のために補足しておいたらどうでしょう。 ーー (現状あるデータのセルの値について) それに時刻は、エクセルでは標準では、日付時刻シリアル値になるのが標準ですが、そうなってますか。セルに入っているのは、文字列ではないでしょうね?<--最大の私の疑問点 この辺をはっきり認識していないエクセルの質問者が非常に多いようだ。 確認方法は、 テストデータとして、 A1セルに0:10:30と(半角で)入れた場合、0時10分30秒の意味になり、 VBAで標準モジュールに Sub test01() MsgBox Cells(1, "A").Value End Sub と入れて実行すると、A1セルの「値」(セル=Rangeの属性のうちの1つである「値」)が取れます。 (またはセルの書式を数値に適用すしてもわかる。) 関数での計算は =10/(24*60)+30/(24*60*60)の式を入れても良い。 これでどうなりますか。数値が表示されますか? ーー 質問のデータは、物理や化学の実験の測定データを(むつかしい分野部分だけを)一部状況説明を変えて作ったのでしょうか?普通ビジネスの会議室の使用時間などでは、秒単位で考えることはないと思うので不思議。質問のデータの由来状況も回答のヒントで重要と思うので、換骨奪胎したなら注記ぐらいしないと読者は混乱するように思う。

kmmmmmt24
質問者

補足

度々のご指摘ありがとうございます。 質問時点での主目的は、任意の時刻における場の状況(各部屋が、誰に使われているのか、空室なのか)を抽出するためのデータ(時刻を縦軸とする表)を作成することです。 また元データは、対象地を10秒置きに撮影した写真を観察したときの記録です。現在時刻に整数値が入力されているのは、全ての写真に1から連番をつけたときの、写真の名前を入力したからです。 データを記録する際、変化(入室、退室、移動)のおきた時点だけ記録してあります。 整数値を実際に時刻に治すことは容易ですが、後の分析(回帰分析等)に使うとき10進数であったほうが簡易であるためそのまま利用しています。 混乱を招く説明で失礼いたしました。

すると、全ての回答が全文表示されます。
  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんにちは 添付図を見ると同じIDの人が同じ時間帯に二つの部屋を使っていますが そのようなケースが有るのですか? また一つの部屋を同じ時間帯に二人以上で使用する事は無いのですか?

kmmmmmt24
質問者

補足

言葉足らずですみません、補足させて頂きます。 質問にそのまま答えると、前者はあり、後者はありません。 一つのIDで使える部屋数は1以上、部屋に入る人数は1(または0)です。

すると、全ての回答が全文表示されます。

関連するQ&A