エクセル カルテ記載で出席表への自動チェック

このQ&Aのポイント
  • エクセルで日々のカルテを効率化するためにマクロや関数を試しています。
  • 日々のカルテを表に入力したら出席表にも自動でチェックをつけたいです。
  • 現在は手動で出席表に登録しているので、エクセルデータをそのまま使用したいです。
回答を見る
  • ベストアンサー

エクセル カルテ記載すると、出席表へ印

エクセル データベース カルテ記載すると、出席表へ印がつくようにしたい 日々のカルテ記載を効率化できないか考え、マクロや関数を使って色々と試しているところです。 検索してもなかなか分からなかったので、質問させていただきます。 excel2003を使用。 ---A--- B---C---D 1 日付 名前 時間 内容 2 5/10 山田 9:00 XXXX 3 5/10 田中 9:20 XXXX 4 5/11 鈴木 9:00 XXXX 5 5/11 山田 9:20 XXXX このように日々のカルテを記載しています。(入力場面は別に作りマクロで空白セルへ登録するようになっています) この表に入力されたら出席表にも自動でチェックがつかないものかと思っています。 出席表は別にエクセルで作っており、現在は手入力しています。 出席表 ----A--B----C---D----E 1 名前--1---2---3----4 2------月---火--水---木 3 田中--1--------1 4 鈴木-------1--------1 5 山田--1----1----1---1 このような表に関数を加えて使用しています。 IF関数にANDを加えて出来ないか試しましたが、エラー表示でした。 出来れば現在使用中のエクセルデータをそのまま使用したいと考えていますが、いかがなものでしょうか?? 独学ですので、分からない事も多いのですが、よろしくお願い致します。

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

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

こんばんは! あるSheet(Sheet1とします)に名前があると「出席表」に「1」が入れば良い訳ですかね? そういうことだと解釈しての一例です。 「出席表」Sheetの名前は入力済みだとしています。 Sheet1に作業用の列を設けます。 作業列E2セルに =A2&B2 という数式を入れオートフィルでずぃ~~~!っと下へコピーしておきます。 日付に関してはシリアル値の方が扱いやすいと思いますので、↓の画像のように「出席表」Sheetに 年・月 の数値を入れるセルを設けています。 「出席表」SheetのB4セルに表示形式はユーザー定義から d としておいて、数式を =IF(MONTH(DATE($A$1,$A$2,COLUMN(A1)))=$A$2,DATE($A$1,$A$2,COLUMN(A1)),"") B5セルの表示形式はユーザー定義から aaa としておき =IF(B4="","",B4) として、B4・B5セルを範囲指定し31日のAFまでオートフィルでコピー! 最後にB6セルに =IF(COUNTIF(Sheet1!$E:$E,B$4&$A6),1,"") という数式を入れ、列方向と行方向にオートフィルでコピーすると画像のような感じになります。 参考になれば良いのですが、的外れならごめんなさいね。m(__)m

jhjfoiajo
質問者

お礼

丁寧な説明ありがとうございました。 日付のシリアルと名前をひとつにしておくことで、解決できるのですね。 出席表の日付をシリアル管理にするところまではいっていたので、本当に助かりました。 本当にありがとうございました。

その他の回答 (2)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

>入力場面は別に作りマクロで空白セルへ登録するようになっています そこまで作り込んだなら一緒に出席表にも付けてしまえば,それで終わりですが。 作成例: textbox1に年/月/日 textbox2に名前が記入してある private sub commandbutton1_click()  dim h as range  if not isdate(textbox1) then exit sub  ’カルテに転記する  set h = worksheets("カルテ").range("A65536").end(xlup).offset(1)  h = textbox1  h.offset(0, 1) = textbox2  ’出席表に転記する  set h = worksheets("出席表").range("A:A").find(what:=textbox2, lookin:=xlformulas,  lookat:=xlwhole)    ’初出なら追記する  if h is nothing then  set h = worksheets("出席表").range("A65536").end(xlup).offset(1)  h = textbox2  end if  ’日付のセルに記入する  h.offset(0, day(textbox1)) = 1 end sub

jhjfoiajo
質問者

お礼

ありがとうございました。 出席表を別に作り直したらできました。 出席表が既存のエクセルシートだったため、それを利用したいと思い、関数にこだわってました。 この辺まで、簡単に入力できればすばらしいですね。 私はまだまだ、言葉の意味もわからずにコピペしています。 ありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

こういう業務がらみの処理はエクセルは適したものではない。関数では出来ないか式がたいへん複雑な式になることが多い。少なくともエクセルVBAが出来ないと、色んな点で行き詰まるのは目に見えている。またデータの2表の連動を図るのはマクロでないと難しい。 質問者はどういう立場か知らないが、システムを作るようなことは深入りしないほうが良いでしょう。複雑な式などいれた表を作ると、退職や配置換えしたあとに後の人が困る事もある。 ーー 質問の表の項目がどういうタイミングで作られる(記入される)のかの視点が説明されて無い。システムの経験者じゃないだろうからやむを得ないが。 (1)1表(カルテ)が一日分でも出来上がったとき、出席表に新規顧客を手入力して。出席表を作るとかならできる 名前で出席表の名前列のどの行かを知るMATCH関数がある。 日もカルテ表のその名前のA列の日付によって、出席表の日付の見出しのあるアルB1より右列(例B2:31列右列まで) のどの列かを割り出せる。 ーー 参考 例データと結果 Sheet1 A1:C10 日付 氏名 合成キー 2011/5/8 田中 40671田中 2011/5/10 木村 40673木村 2011/5/10 鈴木 40673鈴木 2011/5/11 田中 40674田中 2011/5/11 鈴木 40674鈴木 2011/5/11 大村 40674大村 2011/5/12 田中 40675田中 2011/5/12 大村 40675大村 2011/5/12 東 40675東 C列は C2に=A2&B2 下方向に式を複写する。 ーー Sheet2 A1:F6 氏名列と日付行の内容は人手で作成(両表は連動して無いということ) ーー 2011/5/8 2011/5/9 2011/5/10 2011/5/11 2011/5/12 田中 1 ー ー 1 1 鈴木 ー ー 1 1 ー 木村 ー ー 1 ー ー 大村 ー ー ー 1 1 東 ー ー ー ー 1 B2の式は =IF(NOT(ISERROR(MATCH(B$1&$A2,Sheet1!$C$1:$C$100,0))),"1","") B2の式をF2まで横方向に式複写。 B2:F2の式を下方向に式複写。 結果上記Sheet2 セルの1は”1”の部分を”○”や”出”と返られる。 ーー カルテはお医者のカルテを連想するので、要らぬ予断を生むので、受付表とかにしたらどうだろう。社内で使う慣用用語は 使用はよく考えて(カルテとはごげんはカードのことらしいということで、医者の診療カルテに限らないことも知っているが)。

jhjfoiajo
質問者

お礼

ありがとうございます。 独学なので、説明不足があってようで申し訳ありません。 日付と名前の合成キーを作るというヒントで無事に解決できました。 本当にありがとうございます。 ちなみに、カルテと記載しましたがリハビリテーションカルテの記載です。もちろん素人の独学ですが、配置の転換や転職はないし、専門の業者に頼むような余裕もありません。 日々の仕事を少しでも効率よくしていこうとの試みでした。

関連するQ&A

  • Excel(2010)で氏名の頻度の求め方

    Excel(2010)で、A列に縦に 山田 鈴木 田中 山田 鈴木 山田 というように氏名の並べてある表があるとします。この表で氏名の頻度が 山田 3 鈴木 2 田中 1 というように表示できる関数または方法があるでしょうか。 この表のように項目が少なければ 山田 鈴木 田中 というセルを作っておいて、VLOOKUP関数で求められますが、実際には約500行ありその中の氏名をすべて手作業で入力するのは大変ですので、重複なくすべての氏名を抜き出すのは実際的ではありません。 以上よろしくお願いします。

  • Excelで表形式の変更をしたい

    Excelで質問です。 (1)のような表形式を、(2)のように、元の1列ごとに見出しを付けた形式にしたいのですが、マクロなしで可能なのでしょうか? また、マクロの使用・非使用に限らず、以下の操作を実現するマクロや関数を教えていただけると助かります。 よろしくお願いいたします。 関数や式を使ってみましたがうまくいきませんでした。。。 (1) 番号 名前 評価 1  佐藤 A 2  鈴木 B 3  田中 C (2) 番号 1  名前 佐藤 評価 A 番号 2  名前 鈴木 評価 B 番号 3  名前 田中 評価 C

  • Excelで表の置き換えについて

    表(1)を表(2)のように表記させるには、表(2)でどのような関数をセルに入れればいいのでしょうか。 【表(1)】     A    B    C    D    E 田中 100   200   100       300 山田       300       200   100 【表(2)】     1日目    2日目    3日目    4日目 田中 100      200     100      300 山田 300      200     100

  • エクセルで、次のような自動入力をしたい

      A    B    C    D   E  ・・ AA 1 田中 鈴木 佐藤          山田 2 鈴木 山田              海岡 3 田中 佐藤              佐藤 というような表があり、AAの列に名前を入力したとき、 D1に「山田」、C2「海岡」と、その行に関してAA列に新規の名前が入力されたときにD1,C2に自動入力することは、VBAで簡単にできますか? 3列目には「佐藤」さんがすでいるので入力不要です。 よろしくお願いします。(マクロ初心者です)

  • エクセル表からの抽出して別の表を作る

    探し方が悪いのか、エクセルならできそうなのに答えが見つからず苦戦しています。どなたかお知恵をお貸しください。 1/1   1/2 佐藤 車    自転車 田中 バイク   加藤      バイク 吉田 車    車 山田 自転車  車 伊藤 バイク  車 鈴木 車    自転車 このような一覧表があります。これを基にして、次のような表を作りたいのです。    バイク  車   自転車 1/1  田中   佐藤  山田     伊藤   吉田          鈴木 1/2  加藤   吉田  佐藤          山田  鈴木          伊藤 最初の表は非常に細かく、半年分が1枚のシートになっているため見にくく、月単位で見やすい表に変えているのですが作業が面倒なのでなんとかならないかと考えています。 どうぞよろしくお願いいたします。

  • エクセルでこんな集計できますか?

    会社の営業成績の表を作成しているのですが 個人別に担当物件数とその合計金額を出したいと思っています。 例えば以下のような表があります。 A列に名前、B列に金額を入力しています。 A列     B列 山田    3000 山田    5000 田中    3000 鈴木    3000 田中    4000 山田    5000 鈴木    3000 というような表から 山田  3件 13000 田中  2件  7000 鈴木  2件   6000 といった感じで個人別に件数と合計金額を出したいのです。 件数はCOUNTIF関数で簡単に出るのですが金額の出し方が分かりません。 分かる方いらっしゃいましたらご指導お願いいたします。  

  • EXCELで重複したデータの処理について

    氏名 | 点数 ----------- 山田 | ----------- 鈴木 | ----------- 小林 | ----------- 高橋 | ----------- 田中 | という表があるとします。 氏名 | 点数 ------------ 山田 | 80 ------------ 鈴木 | 100 ------------ 小林 | 70 ------------ 高橋 | 80 ------------ 田中 | 80 というように点数を入力すると 順位 | 名前 | 点数 ------------------- 1 | 鈴木 | 100 ------------------- 2 | 山田 | 80 ------------------- 2 | 高橋 | 80 ------------------- 2 | 田中 | 80 ------------------- 5 | 小林 | 70 のような表を自動的に作成できるようにしたいのですが、どうもうまくいきません。 順位と点数の並び替えは比較的簡単にできたのですが、それに対応した名前の並び替えがうまくできないのです。 VLOOKUP関数を使用して得点に対応した名前を表示させようとしたのですが、 順位 | 名前 | 点数 -------------------- 1 | 鈴木 | 100 -------------------- 2 | 山田 | 80 -------------------- 2 | 山田 | 80 -------------------- 2 | 山田 | 80 -------------------- 5 | 小林 | 70 となってしまい、80点の取得者が全て山田になってしまいました。 このような場合、どのようにすれば正常に並び替えを行うことができるのでしょうか。 言葉足らずで申し訳ありませんが、よろしくお願い致します。 OSはWindowsXP、ソフトはEXCEL2002を使用しています。

  • エクセルのマクロでセルに入力されているセル番地に貼り付け?

    エクセルのマクロで質問です。 下記のように入力されています   A    B    C    D 1 あ   田中  2000  N3   2 い   中嶋  1500  Q3 3 う   吉田  1600  U3 4 え   石川  1800  N11 5 お   横山  1500  Q11 6 か   鈴木  1600  U11 7 き   中村  2500  N19 8 く   山田  1200  Q19 9 け   橋本  1400  U19 ・・・・(500行くらいあります) この表のA1:C1をN3に行列を入換えて貼り付け、 A2:C2をQ3に行列を入換えて貼り付け・・・ のように、ABC列の内容を、D列に入力されているセル番地に貼り付けたいのです。 INDIRECT関数など使ってみましたが、どうにも出来そうにありません。 これをなんとかマクロで出来ないものでしょうか。 困ってます。お願いします。

  • (エクセル)INDEX、MATCHで全候補を反映

    初歩的な質問かもしれませんが、エクセル関数で分からないことがありましたので、教えてください。 sheet1のD8で以下の関数を入力しています。 =INDEX(Sheet2!$C$15:$C$500,MATCH(SUM(E8:P8),Sheet2!$AQ$15:$AQ$500,0)) (E8:P8にもデータ入力されています。) sheet1のD9には =INDEX(Sheet2!$C$15:$C$500,MATCH(SUM(E9:P9),Sheet2!$AQ$15:$AQ$500,0)) といった感じで、D8から下に同じ内容の関数を入力しています。 ここで、SUM(E8:P8)、SUM(E9:P9)、SUM(E10:P10)が同じ値だと、候補が複数あるにも関わらず、一つの候補がD8、D9、D10に入力されてしまいます。 例えば、人の名前であれば、D8:山田、D9:田中、D10:鈴木となってほしいところ、D8~D10で山田という結果になります。 山田、田中、鈴木ともに同じデータを持っているので、複数の条件で縛ろうとしても良い案が思いつきませんでした。 ROWで何とかできないかと試行錯誤しましたが、よく分かりませんでした。 出来ることならば、VLOOKUPなど他の関数ではなく、INDEX、MATCH関数で組み立てられたらうれしいです。 また、D8:鈴木、D9:山田、D10:田中といったように同じデータを持っているもの同士では順番はどのようになってもいいのですが、出来ることならsheet2で上の行から順番に入力されているどおりにD8~D10にも反映されていた方がいいです。 分かる方いましたら教えてください。 よろしくお願いします。

  • エクセル 表から指定した値を取り出す関数

    エクセルの関数について教えてください。 エクセルの表があって、そこの列項目と行項目を指定した時に クロスするセルの値を取り出すことをしたいのですが、 どのような関数を用いれば実現できるのでしょうか? 具体的には以下のような表をエクセル上に書いてあるとします。    国語 算数 英語 田中 80 70 60 鈴木 50 90 80 で、任意のセルに田中の国語の点数を示そうとした時、 どのような関数を書けばいいのでしょうか? わかりにくい説明かもしれませんが、宜しくお願いします。

専門家に質問してみよう