• ベストアンサー

エクセルで1カ月の利用者一覧表を作成したい

A列  B列  C列  にそれぞれ 氏名 入居日 退去日 を入れたとします。 あい 11/2  11/4 別シートに表を作り       1日 2日 3日 4日 5日 あい        ○  ○  ○    というように、利用する日に○をつけたいのですが、 エクセルを駆使して出来るものなのでしょうか? 今エクセル関数やマクロを覚えたいと、つい最近勉強し始めたのですが、 仕事をしていて、こういうのができればいいのになと思ったので質問してみました。 欲をいえば、「あい」さんが何度も利用する場合も同じ列に○がつくとうれしいです。 よろしくお願いします。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 一例です。 ↓の画像で説明させていただきます。 上側がSheet1でSheet2に表示させるようにしています。 Sheet1のD列を名前用の作業列とさせてもらっています。 (名前が重複する場合は一つにまとめるためです) D2セルに =IF(COUNTIF($A$2:A2,A2)=1,ROW(A1),"") としてオートフィルで下へコピーします。 Sheet1・2とも数値の欄はシリアル値としています。 Sheet2の日付セルB4のセルの書式設定から 表示形式をユーザー定義で d とし、 =IF(COUNTBLANK($A$1:$A$2)>0,"",IF(MONTH(DATE($A$1,$A$2,COLUMN(A1)))=$A$2,DATE($A$1,$A$2,COLUMN(A1)),"")) という数式を入れ、31日まで列方向にオートフィルでコピーします。 そして、氏名のA5セルに =IF(COUNT(Sheet1!$D$2:$D$100)<ROW(A1),"",INDEX(Sheet1!$A$2:$A$100,SMALL(Sheet1!$D$2:$D$100,ROW(A1)))) としてオートフィルで下へコピー 最後にB5セルに =IF($A5="","",IF(SUMPRODUCT((Sheet1!$A$2:$A$100=Sheet2!$A5)*(Sheet1!$B$2:$B$100<=Sheet2!B$4)*(Sheet1!$C$2:$C$100>=Sheet2!B$4)),"○","")) という数式を入れ、列方向と行方向にオートフィルでコピーすると 画像のような感じになります。 これで、何とか希望に近い形にならないでしょうか? 以上、長々と書きましたが 参考になれば幸いです。m(__)m

kai-kai-ka
質問者

お礼

画像付きでの回答 とてもわかりやすかったです。 ありがとうございました。 Book2.2の「年」と「月分」のところも作ってくださり、 見やすい表になってより作業がしやすくなりました。

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

その他の回答 (4)

回答No.5

レイアウトなどは添付図参照 作業列1 D2セル =$A2&B2 作業列2 E2セル =$A2&C2+1 D2:E2セル フィルハンドルダブルクリック B9セル =IF(ISNA(MATCH($A9&B$8,$D$2:$D$6,0)),"","○") 下へオートフィル C9セル =IF(B9="○",IF(ISNA(MATCH($A9&C$8,$E$2:$E$6,0)),"○",""),   IF(ISNA(MATCH($A9&C$8,$D$2:$D$6,0)),"","○")) 右へ下へオートフィル 8行目は必要に応じて表示形式 ユーザー設定 d日 別表は切り取り&貼り付けで別シートへ 6行目にあるような 同一人物で退去日の翌日入居はないものとする。 もちろん、重なりも。参考まで

kai-kai-ka
質問者

お礼

わざわざ画像付きでの回答 ありがとうございました。 とてもわかりやすかったです。

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

VBAでやると簡単になる課題だと思う。 ーーー 関数では、配列数式だが 例データ A2:A7 今井 11月2日 11月5日 山田 11月6日 11月8日 今井 11月10日 11月11日 近藤 今井 11月15日 11月19日 山田 11月9日 11月16日 日日は11/2のように入れて、日付シリアル値で入っているとする。 ーー A11とA13より右列に 氏名 11月2日 11月3日 11月4日 11月5日 11月6日 11月7日 11月8日・・・・月末日まで 今井 山田 を用意する。 ーー 改めて、人間が入力しないなら、 データーフィルターフィルタオプションの設定ー重複するレコードは無視するで、ダブりのない、人名リストが作れる。 ーー B12に =SUM(IF(($A$1:$A$10=$A12)*($B$1:$B$10<=B$11)*($C$1:$C$10>=B$11),1,0)) と入れて、SHIFT,CTRL,ENTERの3つのキーを同時押し。(配列数式) 月末まで右方向に式を複写。そして 1-月末日の行まで範囲指定し+ハンドルを出して、式を下方向に人数分式を複写。 ーー 結果 - 11月2日 11月3日 11月4日 11月5日 11月6日 11月7日 11月8日 11月9日 11月10日 11月11日 11月12日 11月13日 11月14日 11月15日 11月16日 11月17日 以右略 今井 1 1 1 1 0 0 0 0 1 1 0 0 0 1 1 1 山田 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1を○にするのはIF関数を冠して簡単に変更できる。

kai-kai-ka
質問者

お礼

わかりやすい解説ありがとうございました。 関数が一つでできるところが素敵です。

全文を見る
すると、全ての回答が全文表示されます。
  • hige_082
  • ベストアンサー率50% (379/747)
回答No.3

詳細が不明なので適当です なぜ、別シートの表には列表記がないのでしょうか? なぜ、シートが複数あるのにシート名がないのでしょうか? 関数やマクロを作成するのに必要だと思いませんか? 入力シートがsheet1、別シートがsheet2 日付はすべてシリアル値が入力されているものとしています Sub test() Dim a As Variant Dim x As Integer, y As Integer, z As Integer With Worksheets("sheet1") a = .Range("a2", .Cells(Rows.Count, 3).End(xlUp)) End With With Worksheets("sheet2") For x = 1 To UBound(a) For y = 2 To .Cells(Rows.Count, 1).End(xlUp).Row + 1 If .Cells(y, 1).Value = a(x, 1) Or .Cells(y, 1).Value = "" Then If .Cells(y, 1).Value = "" Then .Cells(y, 1).Value = a(x, 1) For z = 2 To 32 If .Cells(1, z).Value >= a(x, 2) And .Cells(1, z).Value <= a(x, 3) Then .Cells(y, z).Value = "○" End If Next z Exit For End If Next y Next x End With End Sub そんな訳で動作確認も適当です 勉強しているとのことなので、解説もしません

kai-kai-ka
質問者

お礼

言葉足らずですみませんでした。 上の作業で動きましたが、 なぜそうなるのかがまだまだ勉強不足でわかりません。 解説していただいてもわからなかったと思います。 自分で調べて自分でわかるように勉強していきます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

勉強のネタとしてですが、   A    B    C   D  1      1日 2日 3日 4日 5日 2 あい        ○  ○  ○ の日付は、きちんと日付(2009/10/1)で入力しておいて、表示形式で 1日と表示するようにしておきます。 B2セルには、B1セルの日付が入居日より大きく、退去日より小さく、 かつ、A2セルが氏名と同じときは○、それ以外は 空白 =IF(And(B$1>=データ!$B2,B$1<=データ!$C2,$A2=データ!$A2),"○","") あとは右へコピィします。

kai-kai-ka
質問者

お礼

とてもわかりやすい回答 ありがとうございました。

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

関連するQ&A

  • Excelの複数表の計算方法について

    Excelの関数を利用した計算について、教えてください。 シート1と2に、並び順が違う、以下のような表があります。 社員番号と氏名、売上の列があり、30人程ずつ、横に4つの表が並んでいるような形です。(合計約120人の表) シート3に、シート1と2の各人の売上を合計したものを出したいと考えています。 並び順が違うため、串刺し演算などはできません。 また、並び順を揃えたり、表を縦に繋げることも考えていません。 (他のシートに影響するため) SUMIFをやってみましたが、表が横に並んでいるためか、うまくいきませんでした。 思いついたのは、VLOOKUPでしたが、やはりうまくいきません。 手作業で計算式(例:=あ+い)を入れることはできますが、間違って足しても分からないため、関数を利用したいと思います。 何か方法があれば、と質問いたします。 何卒よろしくお願いします。

  • エクセル 表のなかから条件に合うものを詰めて一覧にする

    ある表のなかから条件に合うものリストを 詰めて一覧にするにはどういった関数などを つかってどういう風に組めばよいでしょうか? ・VB等プログラム使用不可 ・手動でのソートや抽出はしない ・「詰めて」が最も大きなポイント 例 シート1   |  A   B   C   D  --------------------------------- 01 |  あ  ○      58 02 |  あ  ×   u   4 03 |  あ  ☆   o   2 04 |     ×      87 05 |  う      j   7 06 |  あ  ○   k 07 |  い      n   9 08 |  い  ×   d  223 09 |  あ  ○  yua   0 10 |            66 11 |  い  ☆   j  12 |  う  ×   o   2 13 |  う      t   2 14 |  あ  ○  ykd  651 15 |  い  ☆   h   6 16 | 17 | 18 | 19 | 20 | 上記の中から  A列が「あ」かつ B列が「○」かつ D列が空白でないものを 詰めて別シートで下記のような リストに自動的にしたい。 自動的・・・ ・シート1の16以降の行に追加しても  自動的にシート2に詰めて反映される。 ・シート1いずれかの行を削除しても  条件にあったリストがシート2に  反映される。   シート2  (完成)   |  A   B   C   D  --------------------------------- 01 |  あ  ○      58 02 |  あ  ○  yua   0 03 |  あ  ○  ykd  651 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | もちろん、計算のための隠し列や隠しシートを儲けるなどは可。 エクセルの関数の駆使だけではムリなのでしょうか? どうかご教授くださいませ。

  • エクセルで作成した一覧表をカード形式にしたい。

    エクセルで作成した一覧表をカード形式にしたいのですが 例えばsheet1の 列1のセルA、B、C、D、E、Fに 山田さんの住所、氏名、年齢、職業、電話、備考 列2にセルA、B、C、D、E、Fに 佐藤さんの住所、氏名、年齢、職業、電話、備考、 列3にセルA、B、C、D、E、Fに 大山さんの… (以降は同様の繰り返し)を入力したとき、 sheet2の 列1のセルA、Bに山田さんの住所、氏名、 列2のセルA、Bに山田さんの年齢、職業、 列3にセルA、Bに山田さんの電話番号、備考、 列4にセルA、Bに佐藤さんの住所、氏名、 列5にセルA、Bに佐藤さんの年齢、職業、 列6にセルA、Bに佐藤さんの電話番号、備考、 列7にセルA、Bに大山さんの住所、氏名、 列8にセルA、Bに大山さんの年齢、職業、 列9にセルA、Bに大山さん電話番号、備考、 列10… と表示されるようにしたいのですが sheet2のA1、B1、A2、B2、A3、B3セルに数式を入力し 列4以降にコピーしても飛び飛びになってうまくいきません。 入力規則かと6列目まで増やしてコピーしても 7列目以降に正しくコピーできません。 何か関数が必要なのでしょうか?過去の質問も検索しましたが よく分かりません。よろしくお願いします。

  • Excelで派遣用の勤務表を作成する際の関数

    現在Excelにて添付画像のSheet1の勤務表を使っております。 Sheet1をもとにしてSheet2に画像のような個人別の表を作成したいのですがどの関数をどのように使えばいいのかわかりません。どなたかいい方法がありましたら教えていただけないでしょうか? Sheet1の仕様はA列が派遣先名称、B列が派遣社員氏名、C列以降が出勤か欠勤かの区別になっていて、緑の数字は派遣先にその日何名派遣されたかの数字となっています。 氏名欄は派遣先に派遣された日にちが早い順番で記載されていきます。派遣社員がさらに増える場合は行の挿入で行を増やしていきます。 現在このSheet1を使い他の書類を作成したりもしているのでなるべくSheet1の仕様の変更は避けたいと思っております。 よろしくお願いします。

  • エクセルのシート間の串刺し?一覧表の作成で

    同じフォーマットのシートが複数枚あります(行事名、場所、日時・・などすべてシートのコピーにより作成)。それを新しいシートに一覧表として、A列には行事名、B列には場所、C列には日時・・という風に1シートに表示させたいのです。シートが増えていっても一覧表の行は下へ増えていく・・といったような表作成の方法を知りたいのです。 当サイトで調べてみたところ、似たような質問があり解決できる!と思いきや、その回答の中でもまた質問をしたくてモヤモヤしています・・・ その方の回答では 【【もし、私がやるとすると、シート名をSheet1,Sheet2,.と最後に数字をつけていく名前にします。 こうやると、串刺しを入力するシートで、どこかのセルにSheet1と入れて、そのセルをマウスでドラッグすれば以下sheet2,.という一列ができあがります。 これさえすれば、後はIndirect関数で該当のセルを参照すればOKです。 たとえば、A1~A10にシート名が入っていて、各シートの C1セルを参照する場合は、 INDIRECT("'" & A1 & "'" & "!$C$1") をB1に入れて、後はB2~B10にコピーすればいいわけです】】 だそうなのです(勝手に拝借してスミマセン)。すっごくわかりやすいのですが私にはこのINDIRECT関数の入れ方がわからないのです。 関数は探せましたがあとは1文字ずつ手入力(スペースも入れる?)すればよいのでしょうか? ("'" & A1 ??? またこの方の回答以外でも方法がありましたら教えてください(失礼ですが・・)。ほぼ初心者なのでVBAとかいう難しそうな方法は避けたいですし、アクセスではなくエクセルで作りたいのです。

  • エクセルでの表作成について

    エクセルを使って勤怠一覧を管理しています。 シート1のA1には所属部門名・B1には氏名、そしてC3には残業時間が入力されています。 この一覧をシート2のA2からC2には総務部・残業時間・氏名を表示。 そして、1行空けてE1からG1には営業部・残業時間・氏名を表示するように表を作成したいのですが、エクセルの機能を使って簡単にシート2にこれらの表を作成する事は可能でしょうか。 ご存じの方、いらっしゃればご教授願います。

  • エクセルでの表の作成

    今、エクセルの表で、A1からA100まで、1~100の連続した数字が入っています。C列のC1~C8には、任意の数字を入れます。 その際、C列に在る数字と同じ数字が在るA列のセルの右のセル(B列)に、自動的に○を、無ければ×と表示されるようにしたい、と思います。 次のような形です。  A列      B列       C列    1       ×       3 2          ×        6 3          ○        7 4         × 5         × 6        ○ 7         ○ 8         × 9         × 10         × ・    ・   ・   これを可能にする関数をご教示ください。

  • 掃除当番表

    対象人数は、15人です。 カレンダーに、翌月の掃除当番日を記入してもらっています。 今までは、ワープロ打ちでしたので、今後は時間短縮で、excelで表を作成したいです。(横長用紙) シート2に、1~15の番号を振り、その下に、氏名を記入します。 シート1に、1日~31日の枠があり、その下シート2の氏名を記入したいです。 このような場合、1日~31日の枠の上下に枠を作って、1~15の数字を打ち込んで、氏名を表示したいです。 欲を言えば、あとから、入力した数字のセルの削除するのではなく、シート2に同じ表を作って、氏名は、シート2とシート1に表示して、印刷は、シート1のみにしたいです。 関数に関しては、VLOOKUPまたは、INDEXで出来るようですが、よくおwかりません。 ご存知の方、よろしくお願いします。

  • Excelで勤務管理と座席表作成をしたい。

    仕事で勤務管理と座席表作成を行っています。 勤務はシフト勤務で勤務に応じた座席表も作っています。 現在座席表はほぼ手入力でやっており非常に手間がかかっています。 1か月分まとめて作っていますが非常に面倒なので勤務表を貼り付けると座席表ができるようにしたいのですがなかなか制限があり苦慮しています。 よい方法があればご教示願います。 シフト表 1列目に日付(1日~末日) A列に名前があり、A~Gの勤務シフトがある。(全部で20人) 座席表 全部で10席。固定の席はなく出勤者に応じて決めています。 シフト表に応じて座席表に人を埋めたい。 使用ソフト:Excel2003(ただしセキュリティー制限でマクロ、VBAが使えません。もちろん制限解除はできません。) なので関数を駆使しないといけないです。 シートは別になってもOKです。 仮にSheet2のA1~A10に名前が埋まるようにしたいです。

  • Excel 2007 マクロ 表の集計について

    Excel 2007 マクロ 表の集計について 2つのシート(Sheet1とSheet2)の情報を集計して Sheet3に反映するマクロを考えています。 (1)Sheet1のC列、D列、E列とSheet2のC列が空欄の場合は  Sheet3に反映しません。 (2)Sheet1のC列、D列、E列とSheet2のC列のいずれかに数値が  入っている場合にはSheet3に行を反映します。  ※Sheet3に反映する際に、Sheet1とSheet2のキー(A列)は  反映しません。  各Sheetの表は画像を添付します。  どのようなマクロを作成すればよろしいでしょうか。  マクロの超初心者です。  マクロのサンプルをご紹介頂けますでしょうか。

専門家に質問してみよう