ktCalShape関数の描画モジュールです。
VBAから利用する場合は、こちらのサブルーチンを使います。
Call ktCalShape2 ( 位置, [種類], [色], [透過], [可視] )
位置 ‥‥‥ Range 型 種類 ‥‥‥ Variant( Integer ) 型 (省略可、省略時:1 ) 色 ‥‥‥ Variant( Integer / String ) 型 (省略可、省略時:"H0000FF" ) 透過 ‥‥‥ Variant( Boolean / Double ) 型 (省略可、省略時:TRUE ) 可視 ‥‥‥ Variant( Boolean ) 型 (省略可、省略時:TRUE )
※ [種類・色・透過・可視]の各引数はエラー値(#N/A 等)を受け取る事が可能です。これらの引数の
位 置 ‥‥‥ Shape図形を描画するセルの Rangeオブジェクトを指定します。
単独セルのみです(結合セルは可)。
種 類 ‥‥‥ そのセルに描画するシェープ図形の種類を指定します。
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(枠線のみ)」と見故します。
可 視 ‥‥‥ TRUE :描画したシェープ図形を表示状態とします。
FALSE : 〃 を非表示状態とします。
省略した場合は「TRUE(表示)」と見故します。
シェープ図形の種類が固定で、条件によって表示有無が変化するといった場合、「種類」には、その図形種類を固定で設定しておき、表示有無は「可視」条件で対応してください。
「種類」を『0 または 図形種類』で切り換えても同じ効果が得られますが、こちらの方法の場合には、シェープ図形の【追加/削除】という処理になりますので、ktCalShape関数 を多用している場合に負荷が大きくなります。
「可視」で対応すれば、一度描画した図形がそのまま使われ、プロパティ変更だけで済みますので、その分だけ負荷が小さくなります。
何れかがエラー値の場合は、他の引数の内容に係わらず『図形は非表示』となります。
ktCalShape関数の描画処理本体です。
マクロを記述しなくても「kt関数メニュー:カレンダーマーク描画」で描画させる事ができます。
尚、そのセルが『保護(オブジェクト)』されている場合は、図形描画されません。
[種類]を(1〜9)にすると、[位置]に指定したセルにシェープ図形を描画します。図形のサイズは、
指定のセルに丁度収まる(セルの高さ/幅の内、小さい方のサイズでの正方形領域でセルの中央)
ように描画されます。[種類]を(0)にすると、指定セル内にあるシェープ図形を削除します。
[色]に16進でRGBを指定する場合は『"H"+6文字』固定サイズです。例えば、赤色の場合は以下の
ようにして指定します。
・直接、"H0000FF" と16進文字列を記述する。
・RGB関数や vbRed といったシステム定数を16進文字列に変換する。
Dim strColor As String
strColor = "H" & Right("000000" & Hex(vbRed), 6)
strColor = "H" & Right("000000" & Hex(RGB(255, 0, 0)), 6)
(注) カラーインデックスに対応するカラーパレットは『ブック』ごとで定義されています(標準では
3番は赤ですが、あるブックでは3番を[赤]以外の色に変更する事が可能です)。引数[色]に
カラーインデックス番号を指定した場合は、この[ktCalShape2 サブルーチン]が記述されている
ブックのカラーパレットではなく、引数[位置]に指定したセルが在るブックのカラーパレットが
適用されます。
なお、透過処理はエクセルのバージョンによって見栄えが異なります。
論理値[True]を数値として扱う場合、ワークシート上では[1]として解釈される為、引数[透過]は
枠線のみ:TRUE または 数値の [1]
という仕様になっています。ところが、VBA上で論理値[True]を数値に変換すると[−1]という値に
なります。しかし、ktCalShape2 サブルーチンでは、[透過]に【True 】を指定した場合は[−1]という
数値ではなく、ちゃんと『論理値のTrue 』として認識しますので、正しく「枠線のみ」という描画が行
なわれます。