セルに値を返しつつ、Shape図形を描画できます。
『ワークシート ONLY』 ( サンプルデモアニメ [ 解説 ] )
ktCalShape ( 表示値, [種類], [色], [透過], [可視] )
返却値 ‥‥‥ Variant 型 表示値 ‥‥‥ Variant 型 種類 ‥‥‥ Variant( Integer ) 型 (省略可、省略時:1 ) 色 ‥‥‥ Variant( Integer / String ) 型 (省略可、省略時:"H0000FF" ) 透過 ‥‥‥ Variant( Boolean / Double ) 型 (省略可、省略時:TRUE ) 可視 ‥‥‥ Variant( Boolean ) 型 (省略可、省略時:TRUE )
「表示値」で指定した内容が、そのまま返ります。
空セル(Empty)を参照している場合は空文字[""]を返します。
※ [種類・色・透過・可視]の各引数はエラー値(#N/A 等)を受け取る事が可能です。これらの引数の
表示値 ‥‥‥ そのセルの値としたい内容を指定します。
本来、そのセルに記述するはずの[数値・文字列・セル参照・式]などを、この引数に記述して下さい。
セルに何も表示する必要が無い場合は空文字[""]を指定して下さい。
種 類 ‥‥‥ そのセルに描画するシェープ図形の種類を指定します。
1:円 2:上三角 3:下三角
4:四角 5:菱形 6:星型
7:十字 8:六角形 9:ハート形
10:二重丸
0:描画しない
または、そのセルに描画されているシェープ図形の消去
省略した場合は「1:円」と見故します。
色 ‥‥‥ シェープ図形の色を下記の何れかで指定します。
・カラーインデックス番号(1〜56の数値)
・16進数でRGBを指定( "Hbbggrr" 形式の文字列)
省略した場合は「赤(H0000FF)」と見故します。
1〜56の色番号は、図形で指定するスキームカラー番号ではなく、
セルの文字/背景色で指定するカラーインデックスです。
[kt関数メニュー:カラーパレット]で確認できます。
透 過 ‥‥‥ 枠線のみ/塗潰し/半透明を指定します。
塗潰し :FALSE または 数値の[0]
枠線のみ:TRUE または 数値の [1]
半透明 :数値で[0.1(濃)〜0.9(淡)]
省略した場合は「TRUE(枠線のみ)」と見故します。
※ Excel 2007以降で、「枠線のみ(塗り潰し無し」 の指定が 【塗り潰し】
になる不具合は Ver 4.00 で修正しました。
可 視 ‥‥‥ TRUE :描画したシェープ図形を表示状態とします。
FALSE : 〃 を非表示状態とします。
省略した場合は「TRUE(表示)」と見故します。
シェープ図形の種類が固定で、条件によって表示有無が変化するといった場合、「種類」には、その図形種類を固定で設定しておき、表示有無は「可視」条件で対応してください。
「種類」を『0 または 図形種類』で切り換えても同じ効果が得られますが、こちらの方法の場合には、シェープ図形の【追加/削除】という処理になりますので、ktCalShape関数 を多用している場合に負荷が大きくなります。
「可視」で対応すれば、一度描画した図形がそのまま使われ、プロパティ変更だけで済みますので、その分だけ負荷が小さくなります。
何れかがエラー値の場合は、他の引数の内容に係わらず『図形は非表示』となります。
したがって、日付などをキーにして設定一覧表などから引数データを検索設定するような場合に、
一端、MATCH関数などの結果で、存在有無をチェックするネスト構造の式にする必要はありません。
最初から、VLOOKUP関数などで引数を指定して大丈夫です。データ無しで検索エラー(#N/A)の
場合には、自動的に『図形は非表示』になります。
とは言っても、「表示しない」方が多いような場合では、個々の引数で毎回[検索エラー]とするよりも、
一端、MATCH関数で検索値の有無をチェックして、有る場合だけ個々の引数にVLOOKUP関数で
条件を取り込む方がレスポンス的には有利ですので、そのシートの状況に応じて式の組み方を判断
して下さい。
このktCalShape関数はVBAからは利用できません。VBAから利用する場合は、ktCalShape2サブ
ルーチンを使って下さい。
尚、そのセルが『保護(オブジェクト)』されている場合は、図形描画されません。
カレンダーの祝日マークを「赤い○」にするとか、カレンダー上に早番/遅番などのマークを重ねると
いった要望は結構ありますが、これらシェープ画像を付けるには、マニュアルでひとつひとつ描画する
か、VBAマクロを実行させる必要がありました。
これは、今まで『ワークシート関数』内では、シート/セルなどへの直接の操作が出来ないといった制限
によるものですが、この[ktCalShape 関数]はワークシート関数でありながら、シェープ画像の描画が可能
です。
これによって例えば、祝日の場合に【文字色[赤]&赤丸】が
・セルの内容は、ktCalShape の第1prmの[表示値]にシリアル値を指定する事で、
この値をそのままセルに渡します
・セルの表示形式を[ d]にして「日」のみ表示
・作業セルに[ =kt祝日判定(シリアル値) ]を用意
・条件付書式で祝日条件が[TRUE]なら文字色[赤]に設定
・ktCalShape の第2prm[種類]を『 IF(kt祝日判定(シリアル値),1,0) 』
といった定義で可能になります。
なお、透過処理はエクセルのバージョンによって見栄えが異なります。
(注) カラーインデックスに対応するカラーパレットは『ブック』ごとで定義されています(標準では
3番は赤ですが、あるブックでは3番を[赤]以外の色に変更する事が可能です)。引数[色]に
カラーインデクッス番号を指定した場合は、この[ktCalShape 関数]が記述されているブックの
カラーパレットの色で塗られます。
シェープ図形は、関数を記述したセルに丁度収まる(セルの高さ/幅の内、小さい方のサイズでの
正方形領域でセルの中央)ように描画されます。関数記述後(シェープ図形描画後)にセルの高さ/
幅を変更した際は、シェープ図形のサイズは「大きくした→そのままのサイズ、小さくした→潰れる」と
なりますが、引数の何れかが変化して再計算された際に、セルサイズに合わせて再度図形サイズが
調整されます。
1. 関数処理としては、レスポンス的に重い部類に入る処理です。
1ヶ月カレンダーセル(7曜×6段=42セル)を単位に、そのセル全てを再計算させた場合のレスポンスを、開発マシン[PentiumV 450MHz]でテストしたところでは
・1ヶ月分(42セル)では「再計算 xx %」の表示が出る事も無く、ストレス
無く更新されます。
・2ヶ月分(84セル)では「再計算 xx %」の表示が出てしまいますが、
0%の次は直ぐ100%になる程度で済みます。
・3ヶ月分(126セル)では、%表示が読み取れるようになります。
・4ヶ月分(168セル)では「遅い」と感じ始める程度までレスポンスが落ちます。
という結果になっています。現在市販されている1GHz超のマシンなら「4ヶ月分」位でも大丈夫かと思いますが、あまり沢山のセルに使い過ぎないように注意して下さい。
2. シート設計時には、1セルに式を記述してから、そのセルを
オートフィル または コピー & ペースト
といった操作によって展開していくと思います。その際、一度、式が作られた後(図形描画済)に式を修正して、再度オートフィル等を行なった場合に、図形が引数値の変更に正しく反応しないように見える場合があります。
これは、既にセル上に図形が描画されている状態で、オートフィル等により、コピー元セルの図形が重なるように貼り付けられる為です。
引数値変更に応じて正しく元々の図形は反応していますが、上に載っている図形に隠されてしまっている状態です。
このような場合は、[kt関数メニュー:カレンダーマーク描画]にある『Reset 』ボタンをクリックする事で解消されます。
3. シート設計時に「可視 = FALSE」になっているセルも含めて、本当に図形があるのかどうかを確認したい場合もあります。
そのような場合は、[kt関数メニュー:カレンダーマーク描画]にある『全表示』ボタンをクリックしてください。全ての[ktshp+xx]名の図形が表示されます。
引数の内容に合わせて再び「非表示」に戻す場合は、面倒でも、個々のセルで、一度入力選択状態にして即[ENTER]する等して再計算させて下さい。
4. セルに記述してあるktCalShape関数の式を消去しても、図形自体は削除されません。個々に図形を選択して削除して下さい。
シート全体で図形を削除する場合は[kt関数メニュー:カレンダーマーク描画]にある『全削除』ボタンをクリックして下さい。
「カレンダーの作り方」の解説に従って七曜暦が作られている(各セルはシリアル値で
表示形式が[d])とすると、[D7]セルの値は『 =C7+1 』という式で得られます。
[D7]セルに「祝日の場合には赤丸を付ける」という式は
=ktCalShape(C7+1, IF(kt祝日判定(C7+1), 1, 0))
または、引数を省略せずに
=ktCalShape(C7+1, IF(kt祝日判定(C7+1), 1, 0), "H0000FF", TRUE)
となります。
添付の『体験ktCalShape.xls 』に実際のカレンダーを想定したサンプルを用意して
ありますので参考にして下さい(サンプルデモアニメ [ 解説 ])。