質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

解決済

2回答

1866閲覧

Google spreadsheetのIF関数を活用したい

TTT_gmail

総合スコア5

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

0クリップ

投稿2020/04/16 09:15

Google spreadsheetのIF関数を活用したい

IF系の関数を使った表示変更を行なってガントチャート作成を考えています。

開始日をA2のセルに入力(4月5日)#
終了したら、その日をB2のセルに入力するルールとします。
C列以降にカレンダーを設定します。

例えば、C以降の日付が、A1の開始日より前の時は「1」
開始日以降は、B2のセルに日付を入れない限りは「2」、
B2の日付を入れたらB2の日付以降は「3」
当日以降は空欄にしたいです。

添付の画像は4月10日時点の表示イメージです。
イメージ説明
IF系の関数を使えば組み込めそうなのですが、条件がうまく設定できません・・・
アドバイスいただけませんでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

この手の AだったらB、AじゃなくてCだったらDみたいな処理を繰り返すなら IFS関数がお勧めです。

で、優先されるべきものから先に処理してくわけです。
質問には、「当日以降は空欄」と書かれてますが、想定の4月10日が 3が入ってるので、希望を「翌日以降は空欄」と理解します。でも、この当日判定の前に、そもそもA列の開始日が空欄だったら空欄がよいと思われるので、以下の順で処理していきます。

$A2="","",     → 開始日(A列)が空欄だった空を返す
C$1>TODAY(),"",  → 1行目の日付が今日より大きい(明日以降)なら空を返す
C$1<$A2,1,     → 1行目の日付が開始日(A列)より小さければ 1
$B2="",2,     → 終了日(B列)が空欄だったら 2
C$1<$B2,2,     → 1行目の日付が終了日(B列)より小さければ 2
C$1>=$B2,3     → 1行目の日付が終了日(B列)以上なら 3

と、これをIFS内に並べればよいだけです。(ORとかAND使ってもいいですが、わかりやすくした形)

=IFS($A2="","",C$1>TODAY(),"",C$1<$A2,1,$B2="",2,C$1<$B2,2,C$1>=$B2,3)

これをC2入れて、あとはセルをコピペ。

ARRAYFORMULAでバッと一気にやりたいなら IFと組み合わせたほうがいいんで、以下のような感じ。
(もっと綺麗にできそうだけど)

=ARRAYFORMULA(IF($A2:$A="","",IF(C$1:$1>TODAY(),"",1+IF($A2:$A<=C$1:$1,1+IF($B2:$B="",0,IF($B2:$B<=C$1:$1,1,0)),0))))

やりたいことを数式化(フローチャート化)するって大事。

投稿2020/04/16 11:33

sawa

総合スコア3002

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TTT_gmail

2020/04/16 11:46

ありがとうございます! IFSをちゃんと理解してなかったので助かりました!
guest

0

一応できましたので貼っておきます。

参考

C2には=IF(C$1=A2,2,1)
D2以降には=IF(D$1>TODAY(),"",IF(OR(D$1=$A2,D$1=$B2),C2+1,C2))

考え方は下記になります。
1.上の日付が今日より大きければ空白にします。
2.上の日付が開始日か終了日と同じになったら左の数字を1つ足します。
3.何もなければ左の数字をとります。

問題点
・開始日と終了日が同じ日の場合、2が表示されます。
・開始日を入力せず、終了日を入力した場合、2が表示されます。

融通を効かせるにはもっとIF文を考えないとですが、とりあえず手っ取り早い方法はこの考えでどうでしょう。

投稿2020/04/16 10:53

編集2020/04/16 10:54
takaD

総合スコア315

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TTT_gmail

2020/04/16 11:45

ありがとうございます。 なんとなくイメージしていた通りでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問