• 締切済み

エクセルでご質問させていただきます。

エクセルでご質問させていただきます。 下図のように、カレンダーのような表の各日付のマスをクリックすると出てくるリスト(あらかじめ設定した単語="訪"、"電"、"見"、"来"、"受")から一つを選んで表示し、同時に最終訪問日のセルにその日の日付が自動的に入力されるようにしたいのですが、IF関数を使うと条件式が7個までしか登録できなかったと思いますので、一ヶ月(30日分)を満たせるような関数の記述は出来ませんでした。 シートを1年分用意しているため、VBAで処理を行えればと考えておりますが、このような場合はどのような記述をすれば宜しいでしょうか?

みんなの回答

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

No.4です。 >ちなみに、リスト中の特定の語句(複数)のときだけ日付を出したいと思っておりますがその場合はどのような記述になりますでしょうか? とありましたので再びお邪魔します。 複数の語句が入るということは前回のリスト表示はまったく無視させていただき、手入力だとします。 (もちろん前回同様、その語句をリスト候補に加えても構いません) 仮にその語句が「訪見」 ← これはこちらで適当に二文字を選択しています。 二文字が完全一致でない(文字間にカンマや中点等がある)とちゃんと表示されませんので、適宜アレンジしてみてください。 前回の表をそのまま使わせてもらうとして、 (1)日付セルが単に数値のみでの入力だった場合は、B5セルに =IF(COUNTIF(B5:AF5,"訪見"),INDEX($B$4:$AF$4,,MAX(IF(B5:AF5="訪見",COLUMN($A$1:$AE$1))))&"日","") (2)日付セルがシリアル値で表示形式だけを「d」としている場合は =IF(COUNTIF(B5:AF5,"訪見"),TEXT(INDEX($B$3:$AF$3,,MAX(IF(B5:AF5="訪見",COLUMN($A$1:$AE$1)))),"d日"),"") どちらも配列数式になりますので、前回同様Shift+Ctrlキーを押しながらEnterキーで確定です。 数式内の「訪見」の部分は前述のようにアレンジしてみてくださいね。 こんな感じがご希望なのですかね? 以上、参考になればよいのですが・・・m(__)m

missingheart
質問者

お礼

配列関数は億が深く、もっと勉強してみようと思いました。 アドバイス有難うございマス!

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.5

No1です。 Orでも出来ますが =INDEX($1:$1,1,MAX(((B2:H2="訪")+(B2:H2="電"))*(COLUMN(B2:H2)))) Ctrl+Shift+Enter では如何でしょうか。 配列関数ですが B2が訪 なら 1 違ったら 0  B2が 電 なら 1 違ったら 0 その結果を列番号を掛ける つまり 訪 か 電 の列番号 が答え 次に C2が訪 なら 1 違ったら 0  C2が 電 なら 1 違ったら 0 その結果を列番号を掛ける つまり 訪 か 電 の列番号 が答え ・・・ と繰り返し計算して その結果の最大値の列番号を得ると 云った風です。 詳しくは配列関数で 検索してみてください。

missingheart
質問者

お礼

有難うございます。(実は職場のデスクでやってますんで)自宅に帰ったら早速試してみますネ!結果はまたご報告致します。

missingheart
質問者

補足

ばっちりでした!有難うございます!

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

こんにちは! もしかして介護か障害者関係の調査票のような感じですが・・・ それはさておいて、1年分ということはSheetが12枚ある訳ですよね? 一応そういうことだとして・・・ 一つの案ですが、一つ一つ手入力するのではなく、入力する項目が決まっているのであれば、入力規則の「リスト」を利用してみてはどうでしょうか? まずSheet1を開いたままShiftキーを押しながら最後のSheetのSheet見出しをクリックします。 これですべてのSheetがグループ化されましたので、今開いているSheetで ↓の画像のような表を作成します。 1行目のB1~G1(空白セルも一つ選択しておきます)がリスト表示させる項目になります。 当方使用のExcel2003ではSheetのグループ化をしていると入力規則は設定できませんので、最後に各Sheetごとに設定します。 表のB5セルに =IF(COUNTA(B5:AF5)=0,"",INDEX($B$3:$AF$3,,MAX(IF(B5:AF5<>"",COLUMN($A$1:$AE$1))))) これは配列数式になりますので、この画面からコピー&ペーストしただけではエラーになると思います。 B5セルに貼り付け後、F2キーを押す、またはB5セルをダブルクリック、または数式バー内で一度クリックします。 編集可能になりますので、Shift+Ctrlキーを押しながらEnterキーで確定します。 数式の前後に{ }マークが入り配列数式になります。 このB5セルをオートフィルで下へずぃ~~~!っとコピーしておきます。 Sheet見出し上で右クリック → グループ化の解除 を選択 そして、各SheetのB5セルから31日の最後の行を範囲指定 → データ → 入力規則 → 「リスト」を選択 → 「元の値」の欄の右側の四角をクリックし、B1~G1セルを範囲指定し、OK これで範囲指定したセルすべてにリスト表示可能になります。 尚、ここで空白セルを一つ入れておくと間違った場合に空白を選択すれば大丈夫です。 以上、長々と書きましたが 参考になれば幸いです。m(__)m

missingheart
質問者

お礼

"グループ化"とは、知りませんでした。今やってみましたが便利ですね。 判りやすくご説明いただき有難うございます。 ちなみに、リスト中の特定の語句(複数)のときだけ日付を出したいと思っておりますがその場合はどのような記述になりますでしょうか?

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.3

1日がB1から右へ続いてるとして =IF(COUNTIF(B2:AF2,"*"),MATCH("",B2:AF2,-1),"") で日にちの数値が入ります。 日付にしたいのでしたら =IF(COUNTIF(B2:AF2,"*"),DATE(2010,9,MATCH("",B2:AF2,-1)),"") のようにしてください。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

質問の内容ですが 訪 の文字が出てくる最後の日付 と云ったことでしょうか? 配列関数ですが =INDEX($1:$1,1,MAX((B2:AE2="訪")*(COLUMN(B2:AE2)))) といれて Ctrl+Shift+Enter で決定させてみてください。 >シートを1年分用意しているため、VBAで処理を行えればと考えておりますが、このような場合はど >のような記述をすれば宜しいでしょうか? こうなるとシートの構成を考えたほうが良いです。 1枚のシートで縦方向に1年分でも2年分でも日付をたっぷり入れていくやり方に変えましょう。 そして 別シートに 年 と 月 をいれると その月の一覧表が出るようなシートを準備します。 つまりデータのシートと表示のシートの2枚ですみます。

missingheart
質問者

お礼

出来ました!有難うございます。 ちなみに、日付を表示させる単語を、"訪"の他にもいくつか設定したい場合は、 "訪"or"電"という風にすればいいのでしょうか? 何度もすみません...

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

1日がB1から右へ続いてるとして =MATCH("*",B2:AF2,0) で日にちの数値が入ります。 日付にしたいのでしたら =DATE(2010,9,MATCH("*",B2:AF2,0)) のようにしてください。

missingheart
質問者

お礼

とても参考になりました。有難うございます。

関連するQ&A