Excel (一般機能)

Excelの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : Excel 2010)
エクセル 表カレンダー IF関数
投稿日時: 19/05/10 13:37:58
投稿者: さえこ

                            
                            
    
      A    B   C    D   E   F   G                        
 (1)    日    月    火    水    木    金    土
 (2)          1     2     3     4     5 6
 (3)     7     8     9     10     11     12     13
 (4)    14    15    16    17    18    19    20
 (5)    21    22    23    24    25    26    27
 (6)    28    29    30    31    32    33    34
 (7)    35    36    37    38    39    40    41
                            
上記の表のA(2)セルに日付1を入力すると日付が横にずれ1日〜31日までが表示できるようにIF関数のみで設定したいのですが。 
また年、月を設定なしです。
上司から問題を出題され3日間悩んでいるのですがわかりません。
よろしくお願いします。                            

回答
投稿日時: 19/05/10 14:42:55
投稿者: WinArrow
投稿者のウェブサイトに移動

>また年、月を設定なしです。
 
日付というのは、年、月、日が存在していて初めて「日付」と認識できます。
従って、年月なし、では、作成できません。
 
データとしては、年月日でも
日のみ「表示」することは、可能なので、
考え直すことはできますか?
 
七曜表以外のセルに「当月の1日」を入力すると
当月分のカレンダーが作成することは可能です。
勿論関数を使いますが・・・

回答
投稿日時: 19/05/10 14:55:39
投稿者: 半平太

最近、どこかで見かけたような質問だなぁ・・
 
微妙に違うんだが、いずれも出題者の知能指数を疑いたくなる代物。
もしくは、チャンと課題を理解していないか、どっちか。
 
あっちの板では、こうだった。同じ人ですよね?

セルB2〜H2(日〜土)が入力しているとします。 
B3に1を入力するとすべての日付(2〜31)が自動で表示されるように設定がしたいです。 
またC3(月)、C4(火)とづれて1を入力しても表内に自動で表示できるようにしたいです。

 
日〜土が入っている範囲や ズラす数値を入れるセルが違っているが、
どっちも、文面通りだとすると、無理。
 
日〜土が入っている範囲がB1〜H1で、ズラす数値をA2セルに入れるなら可能。
ただし、「IF関数のみで設定したい」と言う条件はなし。

投稿日時: 19/05/10 14:56:42
投稿者: さえこ

コメントありがとうございます。
日付ではなく数字の認識でかまいません。
よろしくお願いします。

回答
投稿日時: 19/05/10 15:13:24
投稿者: hatena
投稿者のウェブサイトに移動

セルに式を設定するという方法では不可能。
 
式が設定してあるセルに1と入力したら、式は上書きされてしまうので、
最初の1回はいいが、次に入力しなおしても、1回目の入力が残る。
 
VBAを使うなら可能ではある。

回答
投稿日時: 19/05/10 15:59:44
投稿者: WinArrow
投稿者のウェブサイトに移動

さえこ さんの引用:
コメントありがとうございます。
日付ではなく数字の認識でかまいません。
よろしくお願いします。

あのね・・・・
カレンダーには、曜日があることは理解しているようだけど、
そのほかに「大の月」「小の月」「閏年」絡み・・・あることはわかっていますか?
 
数字だけでよいのから、全部、手入力したほうが早い。

回答
投稿日時: 19/05/10 16:43:15
投稿者: 半平太

WinArrow さん
 
「1日〜31日まで」の単なる数字でいいので、
 いつも「大の月」だと思えばいいケースだと思うのですが?
 
 上司からの課題なので、
「全部、手入力したほうが早い」とは言えないですよ。部下としては・・

回答
投稿日時: 19/05/10 16:52:54
投稿者: Suzu

[1]は、1 を入力 の意
 
A2 に 1を入力。

	A	B	C	D	E	F	G
1)	日	月	火	水	木	金	土
2)	[1]	2	3	4	5	6	7
3)	8	9	10	11	12	13	14
4)	15	16	17	18	19	20	21
5)	22	23	24	25	26	27	28
6)	29	30	31

で?
 
次の時に、B2に1を入力を行い
	A	B	C	D	E	F	G
1)	日	月	火	水	木	金	土
2)		[1]	2	3	4	5	6
3)	7	8	9	10	11	12	13
4)	14	15	16	17	18	19	20
5)	21	22	23	24	25	26	27
6)	28	29	30	31

こういう風にしたいって事?
 
このフォーマットを使うとして、
次、A2に[1]を入れる機会があったときどうするの?
 
 
 
と言うか、、こんなカレンダー使わない。。 30日までの月に使えないですから。
また、そんなのは宿題を出している方も判っている話。
 
と言う事は、IFの使いかたを覚えさせる為の宿題。
それを、ここでまるっと教える訳にもいかないでしょう。
 
 
 
やるなら
	A	B	C	D	E	F	G
1)	日	月	火	水	木	金	土
2)	[-2]	-1	0	1	2	3	4
3)	5	6	7	8	9	10	11
4)	12	13	14	15	16	17	18
5)	19	20	21	22	23	24	25
6)	26	27	28	29	30	31

 
B2:=IF(A2+1<1,"",A2+1)    G2までオートフィル
 
A3:=A2+7
B3:=A3+1    G3までオートフィル
A4:=A2+14
B4:=A4+1    G4までオートフィル
 :
 
31日以降を表示しないのは、上記を参考に考えてみましょう。

回答
投稿日時: 19/05/10 19:41:24
投稿者: WinArrow
投稿者のウェブサイトに移動

先頭位置を指定して
1〜31の数字が並ぶだけでよいと
 いうことならば、
  
表の上に1行挿入して、
先頭位置を指定する行とします。
A1〜G1のどこかに「1」を入力して、先頭位置を指定します。
A2〜G2は、日〜土の曜日を入力します。
   
A3の数式
=COLUMN(A1)-MATCH(1,$A$1:$G$1,0)+1
A3をG3までコピーします。
   
A4の数式
=IF(A3="","",IF(A3+7>31,"",A3+7)))
A4をG4までフィルドラッグ
A4〜G4を選択して、A8までフィルドラッグします。
   
※A1〜G1が空白の場合は、N/Aエラーになります。
A1〜G1のどこかに「1」を入力すれば、エラーは消えます。
A1〜G1の複数のセルに「1」が入っていると先頭セルが有効になります。

回答
投稿日時: 19/05/10 19:55:21
投稿者: WinArrow
投稿者のウェブサイトに移動

追加レス
 
0以下、32以上の文字色を白にするならば、
A4の数式が最もシンプルになります。
=A3+7
 
条件付き書式を設定します。
A3〜G8wo選択して
「条件付き書式」をクリック
新しいルール
数式で
=OR(A3<=0,A3>31)
 
文字色を白
に設定します。

回答
投稿日時: 19/05/10 20:33:46
投稿者: Mike

A(2)セルに日付1を入力すると日付が横にずれ1日〜31日までが表示できるようにIF関数のみで設定したい
セル B2 に次式を入力して、此れを右方にズズーッとオートフィル
=IF($A2="","",IF(COLUMN()>31,"",A2+1))

回答
投稿日時: 19/05/10 20:36:23
投稿者: もこな2

たぶん、半平太さんと同じサイトでみたのだとおもいますが、そちらではどうやら、エクセルでカレンダーを作るのが流行っているようです。
http://www.excel.studio-kazu.jp/kw/20190508122243.html
 
さらに、「1」だけ入れて何とかしたいという質問も見かけます。
http://www.excel.studio-kazu.jp/kw/20190508182926.html
http://www.excel.studio-kazu.jp/kw/20190509175111.htm
 
そして、半平太さんが言ってるように「IF関数のみで設定したい」というのは無理じゃないかなぁ・・・
本当に、上司の方からその様な条件を付けて課題をだされているのでしょうか?
 
あmた、皆さんが指摘されているように、「カレンダー」なのですから、【1】という数値ではなく、【年月日】というシリアル値を入力すべきだとおもいます。
 
ただ、If関数のみという条件が外れれば、Today関数と組み合わせて無理やり当月分のカレンダーはできるとおもいます。

*---------------------------------*
A1セルに「=A3」と入力してG列までフィルコピー

B2セルに「=IF(A2="","",IF(IF(A2=1,DATE(YEAR(TODAY()),MONTH(TODAY()),2),A2+1)<EDATE(DATE(YEAR(TODAY()),MONTH(TODAY()),1),1),IF(A2=1,DATE(YEAR(TODAY()),MONTH(TODAY()),2),A2+1),""))」と入力して、G列までフィルコピー

B2:G2を7行目までフィルコピー

A3セルに「=IF(G2="","",IF(IF(G2=1,DATE(YEAR(TODAY()),MONTH(TODAY()),2),G2+1)<EDATE(DATE(YEAR(TODAY()),MONTH(TODAY()),1),1),IF(G2=1,DATE(YEAR(TODAY()),MONTH(TODAY()),2),G2+1),""))」と入力して、7行目までフィルコピー

A1:G1の表示形式を「aaa」に変更

A2:G7の表示形式を「d」に変更
*---------------------------------*
ただ、hatenaさんが仰っているように、数字を直接入力すると、数式が消えるからその考え方だと1回限りになるのですよね・・
幸いにして、他の(1行下の)セルの数式をコピーすれば復元できるので、大したことではないですが、それって使いやすいのかなぁ?とおもいます。
 
また、、当たり前ですがToday関数使ってるから、再計算するとその時の月になりますので、そのようなものがカレンダーなの?って言われると個人的にはウーンなので、課題を出された方の意向も確認されたほうがよいでしょうね。
(Suzuさんが推測されたように、IF関数の練習をしてほしかっただけかもしれませんし・・)
 
なお、質問とは関係ないですが、この掲示板ではマルチポストについて何も言ってませんが、掲示板によってはマルチポストを禁止していたり、マルチポストで解決した場合、情報共有の協力を求めている掲示板もありますから、仮にマルチポストされているのであれば、掲示板規約等に沿って対応されたほうがよいでしょう。
(ほかの掲示板で似たようなハンドルネームで似たような質問をお見かけしたので念のため)

回答
投稿日時: 19/05/11 11:29:23
投稿者: WinArrow
投稿者のウェブサイトに移動

私見ですが
 

引用:

上記の表のA(2)セルに日付1を入力すると日付が横にずれ1日〜31日までが表示できるようにIF関数のみで設定したいのですが。 
また年、月を設定なしです。
上司から問題を出題され

 
>上記の表のA(2)セルに日付1を入力する
入力する「1」は、年も月もないから、日付と呼ぶのは間違いでは?
 
今回は、A2に「1」だけなら、
B2〜G2を選択した状態で、「=A2+1」と入力し、[Ctrl]+[Enter]を押します。
そして、A3には、「=G2+1」と入力します。
B3〜G3は、B2〜G2をコピペすればよいです。
このような数式で31までは作成できますよね?
問題は、2つあります。
@行2のセルのどこに「1」を入力しても、数式が機能する必要があります。
 しかし、次回は、C2に「1」を入れるかもしれません。
 C2には「=B2+1」という数式が入力されていますから、数式を壊してしまいます。
 このような考え方しかないのでしたら、すくなくとも2行目は、
 全て再入力する覚悟が必要。
 
A32以上になるセルの対応
 いくつかの対応方法があります。
 <1>数式を活かす・・・文字色を白にして、見えなくする・・・条件付き書式を使用すれば簡単です。
 <2>IF関数で対応する・・・
  <2-1>関係するセルだけ数式を変える
  <2-2>3行目以降すべて同じ数式で対応する
  ここは、質問者さんの考え方ですね?
 
>上司から問題を出題
試験問題なの?
それとも業務で使うカレンダーを作成を指示されたの?
 
若し、業務で使うカレンダーだとしたら、
年も月もないような、中途半端なカレンダーは使えません。
 
 
 
 

投稿日時: 19/05/12 02:38:41
投稿者: さえこ

たくさんのコメントありがとうござます。
日付ではなく数字です。
そしてただいまIF関数の勉強中です。
上司からのオリジナルの問題なので実際のカレンダーとして使うものではありません。
よろしくお願いします。

回答
投稿日時: 19/05/12 07:31:15
投稿者: WinArrow
投稿者のウェブサイトに移動

さえこ さんの引用:
たくさんのコメントありがとうござます。
日付ではなく数字です。
そしてただいまIF関数の勉強中です。
上司からのオリジナルの問題なので実際のカレンダーとして使うものではありません。
よろしくお願いします。

 
だいぶ話が見えてきました。
 
42個の箱(セル)に1〜31の数字を埋め込む
という処理を「IF関数のみで」できないか
ということですね?
 
その前に原則をきちんと理解していただきたいです。
@セルには、「値」と「数式」のどちらかしか入力できない。(絶対条件)
Aセルに数式を入力する場合、自セルは参照できない・・・と考えてください。
 
次のセルを7個に限定して考えてみましょう。
 
セルA2に「1」を入力した場合、
B2〜G2は、「左隣セル+1」という数式を入力します。
この段階では、「IF関数」の出番はありませんね?
 
「質問1」
貴方が考えている「IF関数のみ」とは、どのようなことを考えているのですか?
 
次に、右隣のB2に「1」を入れた場合、
B2には、数式が入っていたが、「1」を入力した時点で、B2の数式は消滅します。
しかし、C2〜G2には、数式が入ったままですから計算されますが、
「IF関数」の出番は薄いと思います。
 
質問2
この時点で、A2セルはどのようにしたいと考えているんですか?
要するに「1」を入力したセルの左側セルの対応です。
もう一つは、数式が入っているセルに「値」を入力したら数式がきえてしまうが、
再度、A2に「1」を入力した時点では、B2は「1」のままです。
 
3行目以降を考える前に、ここまできちんと理解しておく必要があります。
 
 

回答
投稿日時: 19/05/12 09:55:03
投稿者: WinArrow
投稿者のウェブサイトに移動

>IF関数のみ
について、いろいろ推測してみましたが
 
もしかすると、↓こんなこと?
 
セルA2に「11を入力するとして
セルB2:「=IF(A2=1,2,"")」
セルC2:「=IF(B2=1,2,IF(B2=2,3,"")」
というようなこと
 

投稿日時: 19/05/12 10:21:24
投稿者: さえこ

コメントありがとうござます。
おそらくA 2〜G2には1を入力するのでこの行にはIF関数の式は入れなくて違うセルにIF関数の数式を設定しておくとA2に1を入力するとB2が1、C6が31となり32〜41を非表示にする、Suzuさんの答えが1番近いように思います。あとは32〜41の非表示設定ができれば完成です。
ややこしいことばかり言ってすみません。
本当に悩んでるいるのです。
よろしくお願いします。

回答
投稿日時: 19/05/12 10:48:40
投稿者: んなっと

A2だけが入力セル、B2:H6に数式を入れるというように変更しました。
 
  A  B  C  D  E  F  G  H
1   日 月 火 水 木 金 土
2 1  1  2  3  4  5  6  7
3   8  9 10 11 12 13 14
4   15 16 17 18 19 20 21
5   22 23 24 25 26 27 28
6   29 30 31        
 
B2
=IF($A2>0,IF(B$1="日",A2,A2+1),IF(B1<25,B1+7,""))
右方向・→下方向・↓
 
  A  B  C  D  E  F  G  H
1   日 月 火 水 木 金 土
2 5  5  6  7  8  9 10 11
3   12 13 14 15 16 17 18
4   19 20 21 22 23 24 25
5   26 27 28 29 30 31  

回答
投稿日時: 19/05/12 10:55:42
投稿者: もこな2

WinArrow さんの引用:
42個の箱(セル)に1〜31の数字を埋め込む
という処理を「IF関数のみで」できないか
ということですね?
の通りだとしたら、話は簡単ですね。
 
42個の箱がA1〜G6だとして
 B2セルに =IF(A1=0,0,IF(A1+1>31,0,A1+1)) と入力して、G列までフィルコピー
 B2:G2を6行目までフィルコピー
 A1セルに =IF(G1=0,0,IF(G1+1>31,0,G1+1)) と入力して、6行目までフィルコピー
 
そうすると、31より大きい場合は0になりますから、あとは、エクセルのオプションなり、表示形式なりで0を表示しないようにすればいいでしょう。
 
これが正解なら、上司の方は、IF関数の入れ子を覚えてほしかったんでしょうね。
カレンダーっていうからややこしくなっただけで・・・ 
  
 
 

回答
投稿日時: 19/05/12 12:52:49
投稿者: hatena
投稿者のウェブサイトに移動

さえこ さんの引用:
おそらくA 2〜G2には1を入力するのでこの行にはIF関数の式は入れなくて違うセルにIF関数の数式を設定しておくとA2に1を入力するとB2が1、C6が31となり32〜41を非表示にする、

B2が1の部分は、B2が2 の間違いですよね。
 
『A 2〜G2には1を入力するのでこの行にはIF関数の式は入れなくて』という条件で(入力するので、当然、どのような式も設定できない)、
かつ,A2〜G2 に数字を表示させるということは、式だけでは不可能です。
VBA必須です。VBAを使ってもいいのですか。
VBA使用不可なら不可能です。
 
まずは、実現可能な仕様を提示するということが、質問者さんには求められます。
 
 
 

回答
投稿日時: 19/05/12 14:51:11
投稿者: WinArrow
投稿者のウェブサイトに移動

さえこ さんの引用:

コメントありがとうござます。
おそらくA 2〜G2には1を入力するのでこの行にはIF関数の式は入れなくて違うセルにIF関数の数式を設定しておくとA2に1を入力するとB2が1、C6が31となり32〜41を非表示にする、Suzuさんの答えが1番近いように思います。あとは32〜41の非表示設定ができれば完成です。
ややこしいことばかり言ってすみません。
本当に悩んでるいるのです。
よろしくお願いします。

 
この説明、日本語になっている?
 
ます
>おそらく
って、他人事のような発言なの?
貴方はどうしたいの?
 
>A 2〜G2には1を入力するのでこの行にはIF関数の式は入れなくて
それで
>A2に1を入力するとB2が1
B2が2
どうやって、B2が2になるのかな?
 
自動的に、B2が2になるためには、数式が必要です。
一般的には
=A2+1
と入力しておきます。
 
しかし、A2〜G2には「1」が入るので・・・・
といわれると、あらかじめ数式を入力しておいても無駄になるのです。
 
前レスで、数式が入っているセルに「1」(値)を入力すると
数式は消えてしまいます。
と説明していますが、理解していますか?
 

回答
投稿日時: 19/05/12 21:29:27
投稿者: VBA-stepup

お邪魔します。
 
力技で
*前提条件
 A2〜G2は空白か1を入力(最初は全て1を入力の方が解りやすい)
 
条件付き書式で
数式を使用して、書式設定するセルを決定
 書式設定
 セルの書式設定
 表示形式
 分類(C)
 ユーザー定義
 種類  "2"
  (種類を"2" "3" "4" "5" "6" "7" を6種類作成) 
B2
         書式   適用先
 数式: =A$2=1  2    =$B$2
 
C2
         書式   適用先
 数式: =A$2=1  3    =$C$2
 数式: =B$2=1  2    =$C$2 
 
D2
         書式   適用先
 数式: =A$2=1  4    =$D$2
 数式: =B$2=1  3    =$D$2
 数式: =C$2=1  2    =$D$2
 
E2
         書式   適用先
 数式: =A$2=1  5    =$E$2
 数式: =B$2=1  4    =$E$2
 数式: =C$2=1  3    =$E$2
 数式: =D$2=1  2    =$E$2
 
F2
         書式   適用先
 数式: =A$2=1  6    =$F$2
 数式: =B$2=1  5    =$F$2
 数式: =C$2=1  4    =$F$2
 数式: =D$2=1  3    =$F$2
 数式: =E$2=1  2    =$F$2
 
G2
         書式   適用先
 数式: =A$2=1  7    =$G$2
 数式: =B$2=1  6    =$G$2
 数式: =C$2=1  5    =$G$2
 数式: =D$2=1  4    =$G$2
 数式: =E$2=1  3    =$G$2
 数式: =F$2=1  2    =$G$2
 
上記の様に各セルに条件付き書式を設定する。
(並び順は重要です)
 
数式
A3 
 =IF(SUM($A$2:$G$2)=7,8,IF(SUM($A$2:$G$2)=6,7,IF(SUM($A$2:$G$2)=5,6,IF(SUM($A$2:$G$2)=4,5,IF(SUM($A$2:$G$2)=3,4,IF(SUM($A$2:$G$2)=2,3,IF(SUM($A$2:$G$2)=2,1,"")))))))
B3
 =IF(A3<31,A3+1,"")
 → G3迄 コピー ↓ B3:G7迄 コピー
A4
 =IF(G3<31,G3+1,"")
 ↓ A7迄 コピー
 
普通はこんな事しないけど面白そうだったのでトライしたら出来たので・・・

投稿日時: 19/05/13 12:14:24
投稿者: さえこ

たくさんのコメントありがとうござます。
A3=IF(G2="","",IF(G2+1>31,"",G2+1))
B3=IF(B2="","",IF(B2+7>31,"",B2+7))
の入力でできるようになりました。
 
ただA2からG2へと順番に1を入力すると前セルの1が残ったままとなります。またIF関数で不要な1を消す方法はありますか?
よろしくお願いします。

回答
投稿日時: 19/05/13 13:24:00
投稿者: WinArrow
投稿者のウェブサイトに移動

さえこ さんの引用:

ただA2からG2へと順番に1を入力すると前セルの1が残ったままとなります。またIF関数で不要な1を消す方法はありますか?
よろしくお願いします。

A2〜G2
に数式をを入れても、「1」を入れたとたんに、数式が消えてしまう
 と説明したが、この辺りは理解しているのでしょうか?
  
仮に
A2に「1」を入れた場合、
B2は「=A2+1」
C2は「=B2+1」
となっていると仮定します。
  
この状態でB2に「1」を入れると「B2」の数式は消えてしまいます。
A2には「1」が入ったままです。
これを不要と考えたとしても
このセルにIF関数を入れることはできません。
自セルを参照できない
という説明も下るはず・・・
 単純に、「Delete」で削除したほうが早いのでは??
 更に言えば、
 再度、A2に「1」を入れると
B2セルは「1」のままの状態。(すでに数詞委は消えてしまっている)
  
要するにA2〜G2は数式で判断することを止めて
全て、手入力で対応したら?
 

回答
投稿日時: 19/05/13 15:32:46
投稿者: VBA-stepup

WinArrowさんが何度も仰っているように
 
Excelでは、一つのセルで入力と関数の共存は出来ません。
また、関数で自セルの値は文字でも数値でも関数結果の値で好きなように設定できますが他のセルの値を変更はできません。
これは、Excelの仕様です。絶対条件です。
ちなみにVBAならば可能です。
 
上記を踏まえて前提条件を決める必要が有ります。
前提条件
 1・A2:G2は手入力としA3:G7を関数とする。
 2・別のセルに入力のセルを設ける。(A2:G2のどこに反映するか解る方法を検討する)
 3・前の自分の投稿の様に条件付き書式にて見た目を変える。
 4・リンクされた図の貼付けで他のセルに設けた領域に関数を設定しA2:G2のところに貼り付けて見た目を変える
 
何れにしてもIF関数の前に関数全般の勉強をお勧めします。
 
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
 
別に入力用のセルを設けるならば
本物のカレンダーです。
 
先頭に1行挿入して
A1に年(西暦)
B1に月
曜日は2行目
A3
 =IF(WEEKDAY($A$1&"/"&$B$1&"/1")=1,DATE($A$1,$B$1,1),"")
 → G3迄コピー
A4
 =IF(G3="","",IF(MONTH(G3)=MONTH(G3+1),G3+1,""))
 ↓ A8迄コピー
B4
 =IF(A4="","",IF(MONTH(A4)=MONTH(A4+1),A4+1,""))
 → G4迄コピー ↓ B4:G8迄コピー
 
A1(西暦)とB1(月)を変更入力すればその年月のカレンダーが表示されます。
 
関数の勉強に使ってください。

投稿日時: 19/05/13 15:49:17
投稿者: さえこ

ありがとうございました。
なんとかできました。