こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

エクセル データベース カルテ記載すると、出席表へ印がつくようにしたい

日々のカルテ記載を効率化できないか考え、マクロや関数を使って色々と試しているところです。
検索してもなかなか分からなかったので、質問させていただきます。
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を加えて出来ないか試しましたが、エラー表示でした。
出来れば現在使用中のエクセルデータをそのまま使用したいと考えていますが、いかがなものでしょうか??

独学ですので、分からない事も多いのですが、よろしくお願い致します。

投稿日時 - 2011-05-11 18:18:45

QNo.6730356

困ってます

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

こんばんは!
ある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

投稿日時 - 2011-05-11 19:40:47

お礼

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

本当にありがとうございました。

投稿日時 - 2011-05-11 23:12:58

ANo.1

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.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

投稿日時 - 2011-05-11 22:41:58

お礼

ありがとうございました。
出席表を別に作り直したらできました。
出席表が既存のエクセルシートだったため、それを利用したいと思い、関数にこだわってました。

この辺まで、簡単に入力できればすばらしいですね。
私はまだまだ、言葉の意味もわからずにコピペしています。

ありがとうございました。

投稿日時 - 2011-05-11 23:20:35

ANo.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/82011/5/92011/5/102011/5/112011/5/12
田中1ーー11
鈴木ーー11ー
木村ーー1ーー
大村ーーー11
東ーーーー1
B2の式は
=IF(NOT(ISERROR(MATCH(B$1&$A2,Sheet1!$C$1:$C$100,0))),"1","")
B2の式をF2まで横方向に式複写。
B2:F2の式を下方向に式複写。
結果上記Sheet2
セルの1は”1”の部分を”○”や”出”と返られる。
ーー
カルテはお医者のカルテを連想するので、要らぬ予断を生むので、受付表とかにしたらどうだろう。社内で使う慣用用語は
使用はよく考えて(カルテとはごげんはカードのことらしいということで、医者の診療カルテに限らないことも知っているが)。

投稿日時 - 2011-05-11 20:32:49

お礼

ありがとうございます。
独学なので、説明不足があってようで申し訳ありません。

日付と名前の合成キーを作るというヒントで無事に解決できました。
本当にありがとうございます。

ちなみに、カルテと記載しましたがリハビリテーションカルテの記載です。もちろん素人の独学ですが、配置の転換や転職はないし、専門の業者に頼むような余裕もありません。
日々の仕事を少しでも効率よくしていこうとの試みでした。

投稿日時 - 2011-05-11 23:29:16

あなたにオススメの質問