プログラミング学ぶ前から、エクセル関数面白い♪と思ってたcacaponです〜

 

 

こんばんは〜 cacaponです〜

 

今日はGoogle Spreadsheets

標準的な関数を組み合わせて、

シフト表を作ってみました〜

 

元々、エクセルが好きで

仕訳を入力すると、

月の現金出納が分かるシートを作ったりしてたので、

 

ある程度の表だったら

作れるつもりなのです〜

 

で、今回作ったものですが…

 

f:id:cacapon:20190607144219p:plain

 

メインの予定を入力すると、担当者の予定が自動で決まる。

という感じで作ってみました〜

 

使った関数の一例を書いておきますね~

<C2>

=if(mod($I2,3)=1,concatenate($G2,",",$H2),"")

通しNoを割って、指定の数字だったら、

使う素材のNoをくっつけて表示、無かったら空白という感じですね~

指定の数字人ごとに変えてますが手打ちにしちゃっているので
いつか自動化したいですね~

 

<G2>

=if(INDIRECT("F"&row(A2)) = "",$M$2+((row(G2)-2)-counta(OFFSET($F$2,0,0,row(A2)-1,1)))*2,"")

結構複雑になってしまいました~

 

INDIRECT() はF2、つまりmainの所をさしてます~
普通にF2ってやると切り取り作業でぐちゃぐちゃになるので
INDIRECT()を使ってます~

でmainが空白だったら、素材Noを表示しないといけないので
それを出す式を入れています~

それが↓の部分ですね~
$M$2+((row(G2)-2)-counta(OFFSET($F$2,0,0,row(A2)-1,1)))*2

 

$M$2は写真無いけど、素材Noの初期値が入ってます~


row(G2)-2は現在の行の位置ですね~
-2は開始位置を0にしたかったので-2してます~

counta(offset($F$2,0,0,row(A2)-1,1))はやってることは
counta($F$2:F2)と同じです~
その日までにmainの列に何か入ってないか数えてます~

循環参照でエラーになるのとmainを切り取りするとズレるので、
それの対策で複雑になってます~

最後の*2は素材を二つずつ使うので2,4,6 ...のような連番にしたかったので
2倍しています~

やりたい事は初期値 +2 にした数列(ただしmainがあるところは飛ばす)
って感じですね~

 

<H2>

=if(G2="","",G2+1)

隣が空白じゃなかったら隣を+1した数字にしています。

 

<I2>

=if(INDIRECT("F"&row(A2)) = "",$L$2-counta(OFFSET($F$2,0,0,row(A2)-1,1))+row(I2)-2,"")

これも考え方はG2と同じです~
×2がないくらいですかね?

 

…と、そんな感じの関数を組み合わせ
上の内容をコピーしたりして1か月分のテンプレートを作りました~

 

元々、予定変更した時に、

手動で直すのめんどくさいという話が出てて、

なら自動にしてしまえないか?

というのが作ろうと思ったきっかけです〜

 

こう言った自分の作ったもので

少しでも役に立ってくれると嬉しいなぁ

と思うcacaponなのでした〜