[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『INDEX関数の日付の空白(スケジュールチャートの作成)』(AKKO)
関数レベルがまだまだで苦戦しています。
どなたかご教授よろしくお願いいたします。
スケジュールチャート表を作りたいです。
シートは「入力シート」と「1か月」の2枚です
「入力シート」は左から
作業列1,集計月,作業列2,項番,内容,担当,予定in,予定out,実績in,実績outです
「1か月」は左から
集計月,項番,内容,担当,予定in,予定out,実績in,実績out,1日,2日,3日,4日...
全体のつくりは入力シートに入力し、
1か月のシートのA1に2021、B1に7を入力するとINDEX関数で
日付のどれか一つでも7月日付が入っているものを取り出すようにしています。
あとは条件付き書式で右側の日付の欄に色がつくようチャート表示にしています。
問題点は
「1か月」シートのG4に
=IF(,"",IF(COUNT(入力シート!$B:$B)<ROW($B1),"",INDEX(入力シート!I:I,SMALL(入力シート!$B:$B,ROW($B1)))))
とすると日付が入っている場合は正しく表示されますが、
空欄の場合「1/0」となってしまします。
これを空白にしたくて&""をつけると今度は空欄の場合空欄になるのですが
日付が入っていると「44383」といったシリアル値でしか表示されません。
日付がある場合は日付を、空欄の場合は空欄にしたいです。
補足
「入力シート」
作業列1:すべての日付が空白の行を対象外とする作業
予定in,予定out,実績in,実績outどれか一つにでも日付が入っている場合「1」となります。
集計月:
予定in,予定out,実績in,実績outのAverageで対象月を割り出しています
作業列2:INDEX抽出用
集計月が「1か月」シートの集計月と合致する場合行Noを返しています。
=IF(OR('1行 (1か月)'!$B$1="",MONTH(B12)<>'1行 (1か月)'!$B$1),"",ROW())
作業列3つも入れてスマートではないですが
とりあえず正しい日付と空白が返せればと思っています。
Officeは365なのでFILTER 関数の方がきれいにできるならもちろんそれでもかまいません。
どうぞよろしくお願いいたします。
< 使用 Excel:Office365、使用 OS:Windows10 >
=IFERROR((式&"")*1,"") ではどうだろうか? 文字列の数字は1をかけると数値に戻り、""は1をかけるとエラーになるのでIFERROR関数で""が返る。 (ねむねむ) 2021/06/21(月) 10:29
ちょっと確認だけ
>=IF(,"",IF(COUNT(入力シート!$B:$B)<ROW($B1),"",INDEX(入力シート!I:I,SMALL(入力シート!$B:$B,ROW($B1)))))
頭の部分、IF(,"", の意味がわかりませんので無視します。 空白が返ってくること自体がそもそもおかしいのでは?
入力シートのB列、I列にはそれぞれ何が入力されてるんですか?
>作業列2:INDEX抽出用 >=IF(OR('1行 (1か月)'!$B$1="",MONTH(B12)<>'1行 (1か月)'!$B$1),"",ROW())
この式には問題がありますが、それもちょっと置いといて これを入力シートのどの列に入れてるんですか?
>Averageで対象月を割り出しています これも意味がわかりません。
今のやり方にこだわらないのなら たぶん FILTER 関数でできるとは思いますけど・・・
以上 (笑) 2021/06/21(月) 11:49
ありがとうございます。
(ねむねむ)さんの =IFERROR((式&"")*1,"")はやってみましたが、
日付が入っているところも空欄になってしまいました。
すみません、 =IFERRORの関数もしっかり理解しきれていないので
もう一度自分で調べてから確認します。
(笑)さん
>>=IF(,"",IF(COUNT(入力シート!$B:$B)<ROW($B1),"",INDEX(入力シート!I:I,SMALL(入力シート!$B:$B,ROW($B1))))) >頭の部分、IF(,"", の意味がわかりませんので無視します。 >空白が返ってくること自体がそもそもおかしいのでは? >入力シートのB列、I列にはそれぞれ何が入力されてるんですか?
IF(,"", は無視してください。
入力シートのB列は「集計月」、I列は「実績in」です。
>>作業列2:INDEX抽出用 >>=IF(OR('1行 (1か月)'!$B$1="",MONTH(B12)<>'1行 (1か月)'!$B$1),"",ROW()) > この式には問題がありますが、それもちょっと置いといて >これを入力シートのどの列に入れてるんですか?
C列です。(C12)
>>Averageで対象月を割り出しています >これも意味がわかりません。
説明が足りずすみません。
空白を空白で返す話とは少しそれます。
そもそもなぜこんなややこしいことになったのか。
予定in,予定out,実績in,実績outの日付は入っていたり空欄だったりまちまちです。
「内容」と「担当」だけ入っていて日付は全部空欄の行もあります。
どれか一つだけでも7月の日付がある場合その行を7月で抽出したかった。
(A)予定in7/1,予定out7/10→7月で抽出
(B)予定in7/1,予定out7/10,実績in7/7,実績out7/16→7月で抽出
(C)予定in7/1,予定out7/10,実績in7/25,実績out8/10→7月でも8月でも抽出
けどそれが調べてもわからなかったので妥協案としてB列で日付をAverageにした。
(A)7/5 (B)7/8 (C))7/19
この時点で(C)を8月で抽出することは一旦断念しました。
これがAverageにした理由です。
しかし、自分で書いてみて今気づきました。
予定in7/20,予定out9/10→8月になってしまいますね・・・(>_<)
これも失敗です。
この日付の部分で苦戦しているのでINDEX関数,FILTER関数どちらにしろ
複雑になってしまいあちこちでエラーが出てしまいます。
何かいい手立てはないでしょうか。
(AKKO) 2021/06/21(月) 18:05
「作業列2」の式はC列とのことですけど INDEXの式でC列を参照していないのはなぜ?
具体的な値を入れた表形式で説明してくれませんか?
シート名がよくわからないので、「1か月」シートは Sheet2 だとして
■入力シート G H I J 11 予in 予out 実in 実out 12 6/14 6/17 13 6/30 7/10 7/7 7/16 14 7/17 7/23 15 7/24 7/27 7/31 8/10 16 9/4 9/10 17
■Sheet2 A1が「2021」、B1が「7」だったら ↓ のようにしたいってこと?
A B C D E F G H 1 2021 7 2 3 予in 予out 実in 実out 4 6/30 7/10 7/7 7/16 5 7/17 7/23 ←空白にしたい!! 6 7/24 7/27 7/31 8/10 7 8
入力シートのB列を作業列 B13 =IF(SUMPRODUCT(N(TEXT(G13:J13,"yyyy-m;;")=Sheet2!$A$1&-Sheet2!$B$1)),ROW(),"") 下コピー ※365なら SUMPRODUCT → SUM でいいかも
ねむねむさん回答の =IFERROR((式&"")*1,"") というのは ↓ なこと Sheet2 E4 =IFERROR((INDEX(入力シート!G:G,SMALL(入力シート!$B:$B,ROW(A1)))&"")*1,"") 表示形式「日付」で右・下コピー
以上、参考まで (笑) 2021/06/21(月) 23:17
補足
たぶん FILTER 関数でもできると思います。
ついでに・・・ >空欄の場合「1/0」となってしまします。
E4セルから、表示形式〜ユーザー定義 m/d;; ←セミコロン「;」を2つつける このようにしても「1/0」は表示されません。 もちろん日付が入力されていたらその日付が表示されます。
ただしその場合、「1/0」が表示されなくても、そのセルの値はあくまで「0」です(空白文字列「""」ではない)
以上 (笑) 2021/06/21(月) 23:47
訂正
>入力シートのB列を作業列 >B13 =IF(SUMPRODUCT(N(TEXT(G13:J13,"yyyy-m;;")=Sheet2!$A$1&-Sheet2!$B$1)),ROW(),"")
12行目からでした。
B12 =IF(SUMPRODUCT(N(TEXT(G12:J12,"yyyy-m")=Sheet2!$A$1&-Sheet2!$B$1)),ROW(),"")
365なら B12 =IF(SUM(N(TEXT(G12:J12,"yyyy-m")=Sheet2!$A$1&-Sheet2!$B$1)),ROW(),"")
※訂正前の式に付けていた、TEXT 関数の中のセミコロンはなくても同じ
以上 (笑) 2021/06/22(火) 07:54
ありがとうございます。
【入力シート】
>365なら
>B12 =IF(SUM(N(TEXT(G12:J12,"yyyy-m")=Sheet2!$A$1&-Sheet2!$B$1)),ROW(),"")
この式で入力シートは作業列1列だけのスマートなシートになりました。
【1か月シート】
> E4セルから、表示形式〜ユーザー定義 m/d;; ←セミコロン「;」を2つつける
表示は空白にできましたが、おっしゃる通りあくまで値は「0」なので
右側に色づく条件付き書式の方がうまくいきませんでした。
>E4 =IFERROR((INDEX(入力シート!G:G,SMALL(入力シート!$B:$B,ROW(A1)))&"")*1,"")
>表示形式「日付」で右・下コピー
この方法で空白にすることができました。
本当にありがとうございました。
たくさん勉強になりました。もっと頑張ります。
(AKKO) 2021/06/23(水) 09:47
1か月のチャートができましたが、
加えて3か月連続のシートも欲しいとのこと。
入力シートのA列に3か月作業用の1列を追加しました。
3か月シートの1行目は下記どちらでもよいです
(1)
A B C D E F 1 2021 7 2021 8 2021 9
(2)
A B C D 1 2021 7 8 9
or関数を入れるだけだと思ったのですがうまくいきません。
何が間違っているのでしょうか
(1)
=IF(SUM(N(TEXT(F2:I2,"yyyy-m")=(OR('3か月'!$A$1&-'3か月'!$B$1,'3か月'!$C$1&-'3か月'!$D$1,'3か月'!$E$1&-'3か月'!$F$1)))),ROW(),"")
(2)
=IF(SUM(N(TEXT(F2:I2,"m")='3か月'!B1:D1)),ROW(),"")
=IF(SUM(N(TEXT(F2:I2,"m")=(OR('3か月'!$B$1,'3か月'!$C$1,'3か月'!$D$1)),ROW(),"")
(AKKO) 2021/06/24(木) 11:48
ちょっと確認ですけど
入力シートの日付はすべて同じ年? 2021年ならすべて2021年の日付で、別の年(2020年とか2022年)の日付が混在することはない?
つまり、年は無視して条件の「月」だけを見ればいいんですか?
だとしたら・・・ 3か月シートは ↓
A B C D 1 2021 7 8 9
入力シート A2 =IF(SUM(COUNTIF('3か月'!$B$1:$D$1,TEXT(F2:I2,"m;;")*1)),ROW(),"") 下コピー
365以外なら SUM → SUMPRODUCT
以上 (笑) 2021/06/24(木) 13:34
>入力シート >A2 =IF(SUM(COUNTIF('3か月'!$B$1:$D$1,TEXT(F2:I2,"m;;")*1)),ROW(),"") ~~~~ 波線部の「*1」は不要かも
A2 =IF(SUM(COUNTIF('3か月'!$B$1:$D$1,TEXT(F2:I2,"m;;"))),ROW(),"")
以上 (笑) 2021/06/24(木) 13:40
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.