プロが教えるわが家の防犯対策術!

毎々皆様の御教授感謝しております。
さて、題記の件、月間予定表なるを作成中しているのですが・・・


 予定リスト      カレンダー
| |   |    | 1日  | 2日  |
| |   |    |---- |---- |
| |   |    | |   | |   |
|予| 予 |   作|予| 予 |予| 予 |
|定| 定 |   業|定| 定 |定| 定 |
|番| 内 |   者|番| 内 |番| 内 |
|号| 容 |   A|号| 容 |号| 容 |
| |   |    | |   | |   |
| |   |    |-----|-----|
| |   |    | |   | |   |
| |   |   作|予| 予 |予| 予 |
| |   |   業|定| 定 |定| 定 |
| |   |   者|番| 内 |番| 内 |
| |   |   B|号| 容 |号| 容 |
| |   |    | |   | |   |
| |   |    |-----|-----|

上記のような形で、カレンダー部の予定番号を入力し、「VLOOKUP」で予定リストを参照し予定内容をカレンダーに反映させています。
ここでカレンダー部へ予定番号の入力漏れの無いように予定リストの横にチェックを入れる為に
=IF(A3=I3,"入力済み",IF(A3=I4,"入力済み",IF(A3=I4,"入力済み",IF(A3=I5,"入力済み",IF(A3=I6,"入力済み",IF(A3=I7,"入力済み",IF(A3=I8,"入力済み",IF(A3=L3,"入力済み"・・・,"未入力")・・・)))
と考えましたが「IF」は7つまでなんですね。何か良い関数は無いものでしょうか?
可能であれば「入力」「未入力」を表示させるのでなく、カレンダー部へ入力した日付を表示させたく考えております。
長くなってしまいましたが宜しくお願い致します。

A 回答 (5件)

私の場合、力技ですが、別シートを使いました。


つまり、
IF(Sheet1!A3=Sheet1!I3,1,0)
IF(Sheet1!A3=Sheet1!I4,1,0)
IF(Sheet1!A3=Sheet1!I5,1,0)
としておいて、これらの数字を合計する。そして
IF(Sheet2!A10>0,'入力済み','未入力')
(A10に合計が入っているとして)

セルがずれているので、どれが日付か判りませんが、
IF(Sheet1!A3=Sheet1!I3,Sheet1!C0,"")
(c0が日付として)
としておいて、文字列をconcatenateで結合。
そして、
IF(Sheet2!A10="",'',Sheet2!A10)

…力技ですね。

この回答への補足

見難くて申し訳ございません。
早速の回答ありがとうございます。
しかしながらせっかく回答いただきましたがシートを月ごとに作成しているもので、これ以上シートは増やすのは・・・。

補足日時:2004/07/18 01:00
    • good
    • 0

ORを使って、


=IF(OR(A3=I3,A3=I4,A3=I5,A3=I6,A3=I7,A3=I8,A3=L3,...),"入力済み","未入力")
では、いかがですか。

この回答への補足

早速の回答ありがとうございます。
しかしながら
作業者が4人、1人の作業者に対して10行の予定欄、これが30日分となると数式の長さが・・・
申し訳ございませんが何か方法は無いものでしょうか?

補足日時:2004/07/18 00:56
    • good
    • 0

    A    B    C     I    J  K     L


1 予定リスト             1日       2日
2 予定番号 予定内容       予定番号 予定内容 予定番号 予定内容
3  1010  あああ102  <式>   5010 えええ999
4  1020  あああ103 入力済み   3990 えええ777
5  9990  あああ201        1020 あああ103
6  9980  あああ205 入力済み   9980 あああ205
7  5010  えええ999 入力済み
8  4010  えええ888
9  3990  えええ777 入力済み

上のような表を想定します。
カレンダー部は31日まであって、I列からBR列とします。

J3セルには =VLOOKUP(I3,$A:$B,2,0) が入ります(既にこうなっている?)

C3セルには =IF(COUNTIF($I:$BR,A3)<>0,"入力済み","")

として、必要な行数、下方向にコピーします。

質問には書いてありませんが、予約番号には重複はないだろうとの予測で、
入力範囲内の該当予約番号をカウントしています。1つでもあれば入力済みにしています。
    • good
    • 0
この回答へのお礼

ありがとうございます!
バッチリでした。
後は、入力した列に該当する日付が問題です。
私もがんばって考えてみます。

お礼日時:2004/07/18 02:49

発想を変えて1行1レコードではだめでしょうか。


1行にカレンダーも作業者もごっちゃにはいると一見やりにくそうですが、後から並び替えはできますし、オートフィルタをつけておけば、抽出も可能です。
一般的にデータベースは、1行1レコードが原則ですし、その他の処理もやりやすくなります。
その前提で、以下のような表を想定します。

 A     B     C   D     I    J   K     L   
作業番号  予定内容  作業者  予定日  | 作業者  予定日  予定番号 予定内容
A AAAAA   田中   04/07/18 | 田中   04/07/18  A    AAAAA
B BBBBB   佐藤   04/07/20 | 松本   04/07/19  C    CCCCC
C CCCCC   松本   04/07/19 | 佐藤   04/07/20  B    BBBBB
(上記表はずれてますが、ノートパッドに貼り付けると整列します)

L列は、VLOOKUPで作業内容を参照していますが、
それぞれCおよびD列には、以下の関数が入ります。

C3=IF(COUNTIF($K$2:$K$1000,$A2)=0,"予定なし",INDEX($I$2:$K$1000,MATCH($A2,$K$2:$K$1000,0),1))

D3=IF(COUNTIF($K$2:$K$1000,$A2)=0,"予定なし",INDEX($I$2:$K$1000,MATCH($A2,$K$2:$K$1000,0),2))

とすれば、右の表から該当する作業者名と作業日を引っ張ってきます。
また、該当がない場合は、予定なしと表示します。
    • good
    • 0
この回答へのお礼

度々の御教授ありがとうございます。
しかしながら見たままを印刷してカレンダーにしてしまいたいのでこの方法では難しいかと存じます。(しかも私以外の人が)
せっかくの御教授いただいたのに申し訳ありません。

お礼日時:2004/07/18 12:45

問題の細部まで理解できたかどうか分かりませんが、一部は想像で


(1)この程度(と言うかちょっとビジネス向け)のことを処理しようとすると、VBAを使わないとどうしようもないと日頃思っているので、VBAで考えて見ました。
こちらもセル探し(Cell(X,Y)のX、Yの割り出し方のこと)にパズル的なところがありますが。
(Sheet2)A1:C9の当初データ。
予定内容を入力するフェーズ。
予定番号予定内容人数
1会場下見0
2主催者へ挨拶0
3出演者案内0
4会場片付け0
5機器移動0
6出演者リハ立会い0
7出演交渉0
8精算0
(Sheet3)
担当者と予定番号を日別に入力。
予定内容は=IF(B2="","",VLOOKUP(B2,Sheet2!$A$2:$B$30,2))を入れて、縦方向に複写。
C,E,G,I、・・列でも複写して、下方向へ複写は同じ。
作業者1日2日3日4日
山田1会場下見2主催者へ挨拶5機器移動
秋山3出演者案内
久保4会場片付け
久保5機器移動
本田6出演者リハ立会い
山田7出演交渉
山田8精算
(VBAコード)
VBEの標準モジュール画面に
Sub test02()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = Worksheets("sheet2")
Set sh2 = Worksheets("sheet3")
d1 = sh1.Range("a2").CurrentRegion.Rows.Count
d2 = sh2.Range("a2").CurrentRegion.Rows.Count
For i = 2 To d1
sh1.Cells(i, "c") = 0
Next i
'------------
For i = 2 To d2
For j = 2 To 62 Step 2
If sh2.Cells(i, j) <> "" Then
MsgBox sh2.Cells(i, j)
If sh2.Cells(i, j) > d1 Then GoTo err
x = sh2.Cells(i, j) 'Sheet2の行事番号
z = sh1.Cells(x + 1, 3) '従事人数
sh1.Cells(x + 1, z * 2 + 4) = sh2.Cells(1, j) '第1行は日付
sh1.Cells(x + 1, z * 2 + 5) = sh2.Cells(i, "A") 'A列は担当者
sh1.Cells(x + 1, 3) = sh1.Cells(x + 1, 3) + 1
End If
Next j
Next i
'-------------
Exit Sub
err:
MsgBox "予定番号エラー"
End Sub
Set sh1 = Worksheets("sheet2")
Set sh2 = Worksheets("sheet3")
の””の中は、本番のシート名でそれぞれ置き変えること。
これをショートカットかボタンかメニュに登録して
予定を増やしたり、担当者を増やしたりした時に実行する。
(結果)Sheet2のC1:G9
人数日担当者日担当者
11日山田
12日山田
12日秋山
13日久保
24日山田4日久保
14日本田
14日山田
14日山田
となりました。
関数で出来ないことはないかも知れませんが、人数の可変に対処など難しそう。

この回答への補足

回答ありがとうございます。
やはりVBAが必要になってくるのでしょうか・・・。
カレンダー部へ予定番号の入力の重複は無いとしても無理なものでしょうか。
お手数をおかけしますがご指導願います。

補足日時:2004/07/18 12:21
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!