Excel (一般機能)

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

 
(指定なし : 指定なし)
「エクセル 表カレンダー IF関数」 の さえこさんへ
投稿日時: 19/05/13 16:51:02
投稿者: VBA-stepup

すみません修正です。
 
別に入力用のセルを設けるならば
本物のカレンダーです。
 
先頭に1行挿入して
A1に年(西暦)
B1に月
曜日は2行目
A3
 =IF(WEEKDAY($A$1&"/"&$B$1&"/1")=1,DATE($A$1,$B$1,1),"")
B3
 =IF(WEEKDAY($A$1&"/"&$B$1&"/1")=2,DATE($A$1,$B$1,1),IF(A3="","",A3+1))
C3
 =IF(WEEKDAY($A$1&"/"&$B$1&"/1")=3,DATE($A$1,$B$1,1),IF(B3="","",B3+1))
D3
 =IF(WEEKDAY($A$1&"/"&$B$1&"/1")=4,DATE($A$1,$B$1,1),IF(C3="","",C3+1))
E3
 =IF(WEEKDAY($A$1&"/"&$B$1&"/1")=5,DATE($A$1,$B$1,1),IF(D3="","",D3+1))
F3
 =IF(WEEKDAY($A$1&"/"&$B$1&"/1")=6,DATE($A$1,$B$1,1),IF(E3="","",E3+1))
G3
 =IF(WEEKDAY($A$1&"/"&$B$1&"/1")=7,DATE($A$1,$B$1,1),IF(F3="","",F3+1))
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/14 19:33:23
投稿者: VBA-stepup

IF関数の勉強という事なので
 
自分の組み込み関数の作り方を簡単に説明します。
下記の様な簡易カレンダーを作成する手順で説明します。
 
    A    B    C    D    E    F    G
1    2019    5                    
2    日    月    火    水    木    金    土
3                    1     2     3     4
4     5     6     7     8     9    10    11
5    12    13    14    15    16    17    18
6    19    20    21    22    23    24    25
7    26    27    28    29    30    31    
8                            
 
入力セル
A1    年(西暦)
B1    月
 
固定項目
A2〜G2     曜日(日〜土)
 
関数による可変表示
A3〜G8  日(表示形式で日だけ表示)
 
考え方
 2019年5月1日は何曜日かその曜日の列の3行目に2019年5月1日が入るようにする。
 1日の入るセルが決まれば以降は1日づつ加算、翌月の表示はしない。
 
A3以降の関数の作り方
別の作業列を用意し1つづつ関数の挿入サポートツールを使い関数を作成する
 
J1に曜日と入力
J2 曜日を返す関数 (関数が解らない時はヘルプ・書籍・ネット等で調べる)
  =WEEKDAY()
  シリアル値 2019/5/1 固定値入力の場合(通常は対象のセルを指定)
  セルの値を使用して入力(マウスで該当セルをクリック)
      年 $A$1 年の入っているセルを絶対参照で指定
   連結      &
      "/" 直接入力 "/"
      連結      &
   月 $B$1 月の入っているセルを絶対参照で指定
      連結      &
   日  1  直接入力 "/1"
  =WEEKDAY($A$1&"/"&B$1&"/1")
  以上で曜日を返す関数の設定完了 J2に 4 と表示されていればOK
 
K1に日付と入力
K2 日付を返す関数
  =DETA()
    年 $A$1 年の入っているセルを絶対参照で指定
  月 $B$1 月の入っているセルを絶対参照で指定
  日  1  直接入力 1
    =DETA($A$1,$B$1,1)
  以上で日付を返す関数の設定完了 K2に 2019/5/1 と表示されていればOK (表示形式 標準の場合)
 
ここから本題(組み込み関数の作り方)
考え方
 A3                         
 =IF(2019年5月1日は何曜日か=1(1は日曜日を返す値),YESなら日付,NOなら空白)
  論理式  2019年5月1日は何曜日か=1 ここでは J2=1 と入力(J2に曜日を返す関数作成してある)
 真    YESなら日付        ここでは K2  と入力(J2に日付を返す関数作成してある)                        
 偽 NOなら空白 ""
  =IF(J2=1,K2,"") 空白ならOK
 次に
  セルJ2を選択し数式バーに表示されている数式を=を除いてコピー
  セルA3を選択し数式バーのJ2の部分に貼り付け
  =IF(WEEKDAY($A$1&"/"&B$1&"/1")=1,K2,"")
  セルK2を選択し数式バーに表示されている数式を=を除いてコピー
  セルA3を選択し数式バーのK2の部分に貼り付け
  =IF(WEEKDAY($A$1&"/"&B$1&"/1")=1,DETA($A$1,$B$1,1),"")
 B3〜G3
 B3
  =IF(2019年5月1日は何曜日か=2〜7, YESなら日付, NOなら =IF(左セルの値が空白=空白,YESなら空白,NOなら左セルの値+1))
 =IF(J2=2,K2,IF(A3="","",A3+1))
  =IF(WEEKDAY($A$1&"/"&B$1&"/1")=2,DETA($A$1,$B$1,1),IF(A3="","",A3+1))
  C3〜G3 
 A3と同様に関数を作成(曜日の値は日曜〜土曜 1〜7で曜日ごと変更)
 
 A4以降A列の場合前日がG列になるので
 =IF(前日=空白,空白,IF(前日は何月=前日+1は何月,前日+1,空白))
 =IF(G3="","",IF(MONTH(G3)=MONTH(G3+1),G3+1,""))
  MONTH()は月を返す関数 前日と前日+1の月を比較し翌月は表示しない
 A8までコピー
 B4〜G8
 考え方は同じで前日のセル位置が違うだけです
 =IF(A4="","",IF(MONTH(A4)=MONTH(A4+1),A4+1,""))
 B4:G4迄コピー
 以上で関数の設定は終わり
 
次に表の装飾
セルの書式設定でA3:G8迄を日のみの表示に設定する
表示形式
ユーザー定義
種類  d
 
カラー等はお好きなように
以上で簡易カレンダーの完成です。
 
自分なりの組み込み関数の作り方です
通りすがりの方も含めて意見・指摘等有りましたら書込みお願いします。
 
もうしばらく開けておきます。

投稿日時: 19/05/16 18:52:43
投稿者: VBA-stepup

閉じます。