プロが教える店舗&オフィスのセキュリティ対策術

 以下のような生産予定表があるとします。
   A    B    C    D   E    F    G   F
1 日程 生産日 3/1 3/2 3/3 3/4 3/5 3/6
2〔兵器〕月合計  
3 戦車  10   10
4 空母   5        5
5 爆弾 100             30  70
6機関銃  50                 50
7潜水艦   4                  2   
8 軍艦   3                       3
9 零戦  30                       20  10

この生産表から兵器名の横に列を挿入して、横表記の生産日を縦に追加表記したく、IF関数にLOOKUP+MAXまたはMIN関数、OFFSET+MATCH関数で取得できたのですが、生産が2日にまたがっている爆弾と零戦は数量の大小関係なく、先に予定の入っている日を取得したいのですが、この条件の付け方、関数表記が分からず、2日間に渡る生産兵器の場合は若い日を表記させるにはどういう条件区別が必要でしょうか?

 MAXやMIN、LARGE等の関数では先に取得したい日が、台数変動に伴い、後の日が取得されてしまいます。
    A    B    C    D   E    F    G   F
             3/1 3/2 3/3 3/4 3/5 3/6
      月合計
3 3/1戦車  10  
4 3/2空母   5     
5 3/3爆弾 100            
63/4機関銃  50              
73/4潜水艦   4                 
8 3/5軍艦   3 
9 3/5零戦  30 
 ※2日間の数量大小に影響されず、2日またがり生産兵器の初日を必ず取得する方法を教えていただけませんか?                 

A 回答 (2件)

こんな感じでいかがでしょう。



 =INDEX($C$1:$N$1,MATCH(TRUE,INDEX(C3:N3<>"",),0))

Excel2003で動作確認済。

C3:N3の各セルについて「空白でない」か否かの判定を行い、
TRUEが返る最初の要素の位置を取得して、C1:N1から対応するセルを返す。

内側のINDEXは、配列として処理させるためのダミー関数です。
 =INDEX($C$1:$N$1,MATCH(TRUE,C3:N3<>"",0))
をCtrl+Shift+Enterで確定してもOK。

あるいは、判定でTRUEが返るセルについて、列番号の逆数をとり、
MAXで最初のセルを選んでから逆数を取り直せば、列番号が得られます。
 =OFFSET($A$1,0,1/MAX(INDEX((C2:N2<>"")/COLUMN(C2:N2),))-1)

以上ご参考まで。

■日経PC21 / エクセル「配列数式」講座
http://pc.nikkeibp.co.jp/pc21/special/hr/index.s …

この回答への補足

補足の欄をお借りして、お礼申し上げます。回答者様のお答えで空白でないC3:F9までの配列の、各行の先頭の数値を取得できたのですが、どうも配列数式を普段、殆ど使わないもので、今一、理解に苦しんでいます。(INDEX関数の列番号、行番号のどちらから取得するのか?日付行のC1:F1にOFFSET関数と複合しましたが、エラーばかり出ます。)

 配列数式を使わないのは、後からの数式変更、編集がやりにくいのでは?と私個人が思っているだけなんですが。

 任意のセル領域、配列の中で、各行にある、1個または2個、複数の数値の内、空白以外の先頭の数値をMATCH関数で取得することです。
 配列数式を使わない、セル参照方式で式を組めば、どうなるか今考えております。
 有難うございました。

 

 
 

補足日時:2008/03/01 13:23
    • good
    • 0
この回答へのお礼

 回答有難うございます。早々、ご教導いただいた方法を試してみます。
 

お礼日時:2008/03/01 10:45

生産予定表の列数がこれ以上増えないという前提なら、


日付を取得したい列に

=IF(ISBLANK(E4),IF(ISBLANK(F4),IF(ISBLANK(G4),IF(ISBLANK(H4),IF(ISBLANK(I4),IF(ISBLANK(J4),"-",$J$2),$I$2),$H$2),$G$2),$F$2),$E$2)

という式を作成すれば取得できます。
ただ、列数がさらに増える場合はネストできるレベルに限界がある為、この方法では無理ですが・・・
    • good
    • 0
この回答へのお礼

回答有難うございました。参考にさせていただきます。
日が一ヶ月分あるので、この方法も考えましたが、無理みたいです。どちらか2日間の先の日を取得する(数量無関係に)方法を今も検討中です。
 LOOKUP(MAX(C3:F3,C3:F3,$C$1:$F$1)
またはOFFSET($B$1,0,MATCH(MIN(C3:F3),C3:F3,0)でも出せたのですが初日取得するための条件区別を考えています。

お礼日時:2008/02/29 22:59

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