※使用上説明書 カポ'ズ ダイアリーETへ キーワード結合、グーグル検索 ◆◆Excel2000以上が必要です 「カポ’ズ エクセルウォッチDR」は、Excel2000以上をインストール しておりませんと、使用できません。 Excel2000は、microsoftから発売されている表計算ソフトです。 後、PCの時計と連動します。 ◆◆カポ’ズ エクセルウォッチのダウンロード カポ'ズ エクセルウォッチ24 http://www.vector.co.jp/soft/win95/personal/se472893.html カポ'ズ エクセルウォッチ12 http://www.vector.co.jp/soft/win95/personal/se473035.html カポ'ズ エクセルウォッチDR http://www.vector.co.jp/soft/win95/personal/se473219.html ◆◆カポ’ズ エクセルウォッチDRの使い方 カポ’ズ エクセルウォッチ24と12の発展版です。 エクセルで作ったアナログな時計の針を9×9マスの 図形にしました。 「時」「分」、それぞれの針の図形を、 プルダウンメニューで変更することによって、 変更できます。 その図形が一定時刻ごとに変化します。 (時は12時間で一周します) マクロを使用せず、エクセルの関数と条件付書式を使っています。 シートの保護をしていて、誤作動を防ぐようにしていますが、 パスワードを設定いませんので、加工可能です。 シート保護を解除すると、針の通るルート変更も可能です。 ◆使い方 1) ファンクションキーの「F9」を押してください。 現在の時計を表示します。 2) 「時」の針の図形を変更する時は、A34からI42の セルに設定されているプルダウンメニューを変更して下さい。 「0」にすると空白で、「1」にすると赤に染めることが できます。 3) 「分」の針の図形を変更する時は、M34からU42の セルに設定されているプルダウンメニューを変更して下さい。 「0」にすると空白で、「1」にすると紫に染めることが できます。 4) 「時」の針、「分」の針のどちらかが手前に表示され、 奥行き部分は見えなくなります。 セルY34の部分にどちらが、手前になるか、変更できる、 プルダウンメニューが設置されています。 ◆図形の変更例 1) まず、「カポ’ズ エクセルウォッチDR」が どういうものかを見てください。 2) 上図は60%表示で、通常は、黄色の枠内のみを 表示します。 黄色の枠内の赤色の図形の「時」が12分ごとに移動します。 同じく紫色の図形の「分」が1分ごとに移動します。 3) 下の0と1が入った赤と、紫の格子内のセルの、 プルダウンメニューで0にすると、空白、1にすると、 「時」から赤、「分」なら紫に塗り分けることができます。 そうすると、関数により自動的に、上の黄色の枠内の 「時」または「分」の図形を変更することが出来ます。 4) 初期設定は、「時」が太陽、「分」が雲のつもりで 設定しています。 5) 以下、変更例。 ・ハートとはさみ ↑ハート(「時」) ↑はさみ(「分」) ・蝶と蜘蛛 ↑蝶(「時」) ↑蜘蛛(「分」) ・魚とタガメ ↑魚(「時」) ↑タガメ(「分」) 他にも色々、変更してみよう! 上へ移動する 百枡計算ホームへ戻る ここ以下は独り言の雑談形式です。 はじめ作ろうとしたのとはだいぶ違ってきています。 後、この作品は実用的ではないです。 ただ、空間と違って時間って、今のところ、 進んでいくだけだし、それと共に、座標や、図形が 移動するって、ところが少し面白いんじゃないかと 思って公開作品にさせていただきました。 そもそもはnow関数からtoday関数を引いた値が、 時間と共に、0から1に変化するのを、 360を掛けて、角度に変化させ、 sin関数とcos関数がどう変化するのかを見ていました。 sin(radians((now()-today())*360))と cos(radians((now()-today())*360))です。 sinは縦方向だし、cosは横方向なんで、 これで自動的に条件付書式で現在位置を彩色できると 思って0.1きざみで0から1に変化させて見ていたのですが、 頭が痛くなってやめてしまいました。 その後、now関数からtoday関数を引いた値が 一日24時間を表すことに気がつき、 それはすなわち、now関数の1に満たない部分であり、 mod(now(),1)に相当すると気がつきました。 それを24倍にしたものmod(now(),1)*24の1に満たない 部分floor(mod(now(),1)*24,1)が1時間=60分に相当する部分。 そんな感じで「時」「分」の新たな表し方を発見しました。 (「分」は「 floor(mod(mod(now(),1)*24,1)*60,1))」です) ここで出てくる、mod関数はmod(X,割る数)で、Xを割った数の 余りであり、 floor関数はfloor(X,割る数)で、Xを割った数の商のみで、 余りを切り捨てる関数である。 切り上げる場合は、ceiling関数を用いる。 今まで、数式で「時」又は「分」を取り出すときは、 「時」は「value((text(now(),"h")))」 「分」は「value(right(text(now(),"h:mm"),2))」 という風にtext関数を使って取り出していた。 text関数は文字列なので、それを数式として使うために value関数を使っている。 "m"だけだと「月」になってしまうので、right関数で右から 2文字だけを取り出して「分」としている。 上との違いは「時」とか「分」を任意に分割した数値を 得ることができるかどうかである。 「時」は24の倍数のみ(12時間表記では12の倍数)、 「分」は60の倍数の時しか下の方法だと数値を得ることができない。 「カポ’ズ エクセルウォッチDR」のみを作成過程について。 24及び12では条件付書式の一番右の入力蘭にいちいち数式を打ち込む、 必要があった。 また、条件付書式のダイアログを開かないと、中の数式を 確認できないためにチェックが困難だった。(そのかわり容量が小さい) drの場合はルートをエクセルのシート上に入力して、その入力された セル番地と条件付書式で色が変わるセルのセル番地が一致するかを 確かめればいいので、基準となるセルの上下左右のセル番地も 検索対象にすることができた。 奇数×奇数の図形の場合、 基準となるセルの左右方向または上下方向において 何升右かあるいは何升下という相対的な値で全てを表すことが出来る。 例えば、9×9の図形の場合 右方向が+とする場合、 という表になり、 下方向が+とする場合、 という表になる。 上の表では、ど真ん中のセル「row(e5)-5」という数式を入力し、 表全体にコピーすると、上のような数値が自動的に表示される。 下の表ではど真ん中のセル「column(e5)-5」という数式を入力し、 表全体にコピーすると、上のような数値が自動的に表示される。 次に基準となるセル番地一度、左右方向と上下方向に分解し 再びセル番地にする数式。 なんでこれが必要かというと基準となるセルの左右、上下、 から相対して何升上か、下かをプラスマイナスすることによって ある通過地点での図形のセル番地を全て特定することが可能だから である。 セル番地にする数式は 「address(row(indirect($B47)),column(indirect($B47)),3)」 となる。 セルB47が基準となるセル番地の入力されたセルである。 何故、B列かというと、A列に「時」や「分」を任意の数で分割した 数値を0から順番の整数で「分割した数-1」まで入力し、 vlookup関数でその時刻の「時」や「分」に該当したセル番地を 拾ってこれるようにするためである。 別にB列でなくても良いが、最低、1列は左にそういう列が必要である。 47は偶然である。 列のみ固定しているのは、右方向にオートフィルでコピーするためである。 indirect関数は該当するに入力された文字列をセル番地としてキャッチして そのセル内の数値を取得するための関数である。 row関数とcolumn関数と組み合わせて、右方向と下方向に何番目かを 数値として取得する。 address関数はaddress(右方向,下方向,表し方)で、 再びセル番地にする関数である。 表し方は、「1」が絶対参照、「2」が行が絶対参照で列が相対参照、 「3」が行が相対参照で列が絶対参照、「4」が相対参照 となる。(この部分はエクセルのヘルプをコピペ) この部分を省略すると絶対参照である。 省略するか、「4」にするのが普通なのだが、「3」になっているのは、 元々出てきた文字列をconcatenate関数でつなげ合わせて、 そのつないだ文字列に該当しているセル番地が含まれているかを 調べようとしていたので、$を列の横につけることによって セルAA1とセルA1とを区別しようとしていた。 最終的にはconcatenate関数を使うとエラーが発生することが分かり、 別の関数、match関数とtype関数を組み合わせることにより、 つなぎあわさなくても良い方法を見つけたのだが、 名残として、表し方は「3」となっている。 上の図は9×9升の図形の場合、 基準となる中央のセルからみて座標がどうなっているかを 示している図である。 実際は上の右方向の図と下方向の図とを見て、どういう風になるかを 推測したわけではあるが、より分かりやすいと思って、作ってみた。 (右方向,下方向)になっている。 これを1行ずつ、横方向に9升ずつ並べていくと一つの図形全ての セル番地を得ることが出来る。 CTスキャンみたいなようなものである。 先程、基準となるセルの数式を示したが、 基準となるセルのセル番地を入力したセルの次に右の列に 入力した数式は、 「=ADDRESS(ROW(INDIRECT($B47))-4,COLUMN(INDIRECT($B47))-4,3)」 である。 「,3」の部分は先程、説明したように成り行きでそうなっただけで、 はじめから作る場合は省略するか、表示されたセル番地を少ない文字列に するために「4」にするのが無難である。 ここ以降、エクセルから直接貼り付けた数式を使うので、大文字になる。 この数式をこの数式を入力したセルを含めて右方向に連続で 9つ分コピーする。 次に、数式バーを見て、右2番目のセルから順番に、 「COLUMN(INDIRECT($B47))-4」の部分を順番に「+1」ずつ 増やして加工していき、最終的に、 「COLUMN(INDIRECT($B47))+4」になるようにする。 次にこの九つのセルを右隣に間を空けないでコピーする。 そのコピーされたセル九つ全体を選択して、 その内、一番右側のセルがアクティブになるようにする。 その状態で、 エクセルファイルメニュー→編集→置換で 「検索する文字列」の所に「-4,C」と打ち込み、 「置換後の文字列」の所に「-3,c」と打ち込み 「すべて置換」ボタンを押して、変換する。 この処理をする時、上または下の行の右9升ごとに色を 塗ることによって、置換する範囲を間違えないようにする。 後は、一番初めに作った9つのセルをさらに右側にコピーして 「置換後の文字列」を「-2,c」…「+4」まで変化させて、 合計81升のセル番地を求める。 これで、中央のセルのセル番地が分かれば、他のセル番地を 求めることが可能になった。 「時」「分」、それぞれ何回、移動させるかを決める。 「カポ'ズ エクセルウォッチDR」の場合、 (DRはdrawingの略でお絵かきの意味) それぞれ60回移動させることにした。 なので、60個の基準となる中央のセル番地を決め、 B列の60個のセルにそのセル番地を入力した。 1行に収まった81個のセルを選択して、+59行分 オートフィルでコピーすると「時」又は「分」の 全ての時間でのセル番地を求めることが出来る。 次に特定の時でのセル番地を求める方向。 上で述べたようにA列には、「時」または「分」の 分割された数までの0から1きざみの整数が入力されている。 今回は60行分、入力されているが、その一つ上のセルで A列の所(今回はA46)に「時」または「分」の任意分割時の 数式を入力する。 「=FLOOR(MOD(MOD(NOW(),1)*24,12)*5,1)」という数式が 入力されているが、これは、24時間で一周する時計を、 12時間で一周させて、その1時間で5回、升目が変化するように した数式である。 1時間が60分で60回変化するのに合わせて、12時間で60回、 変化するようにしたものである。 この数値が「時」の分割された数のその時点を表す数値である。 この数値で検索してvlookup関数により、その時点での図形の 座標を求める。 一番右側の数式は、 「=VLOOKUP($A$46,$A$47:$CJ$106,COLUMN(G$1))」 と表される。 何故、C列からF列が空白なのか、 それは、C列には、B列に入力されたセル番地をindirect関数と row関数で右方向の数値を取得し、 D列には、B列に入力されたセル番地をindirect関数と column関数で下方向の数値を取得していた。 次にE列には、0時点と比較しての右方向の相対値を、 F列には、0時点と比較しての下方向の相対値を取得 するために、0時点との引き算をしていた。 後に、この数式が無駄な数式だと分かったので削除した。 かつ、列をつめると、数式が壊れてしまうことに気がついた (はじめから作り直すのがめんどくさいので) というわけである。 vlookup関数の説明は、 vlookup(コード番号,検索範囲,列番号)となっている。 vlookup関数はコード番号が降順または昇順で並んでいる 必要がある。 列番号は相対的な列番号である。(コード番号が入力されている 所が1で、右に行くごとに1ずつ加算して計算する) 今回はたまたまA列にコード番号が入力されているので、 G列相当分の数値となる。 今回、「COLUMN(G$1)」としたのはオートフィルを使った時に、 数値が右に1つずれるごとに1つずつ増えるようにしたためである。 これをCI列までコピーすれば、ある時点での図形の座標を求める ことになる。 (今、気がついたが、検索範囲は「$A$47:$CI$106」である。 「分」はちゃんとCI列までとなっていたが…) ここまでで、ある時点での9×9升のブロックの座標を得た。 次に9×9升を任意で塗り分けることが可能にする。 例えば、 という風に入力規則で0と1だけをプルダウンメニューで選択できる ようにして条件付書式で1になった時に色が変わるようにする。 その色は、時計としての図形の「時」または「分」で塗る色と 同じものにする。 今回はA34からI42にその部分が設置されている。 上でvlookup関数でその時点でのブロックの座標を求めたと思うが、 その1行上のG列に「=A$34」と入力して、このセルを含めて9つ分、 右までオートフィルまたは普通にコピーする。 次にP列に「=A$35」と入力して、このセルを含めて9つ分、 右までオートフィルまたは普通にコピーする。 これを「=A$42」まで繰り返す。 これで色がある時は「1」、ない時は「0」が1行ずつ切り取られた 形で入力される。 次に、その時点で色がない時には、座標を拾ってこないようにする。 先程、vlookup関数の所で、 「=VLOOKUP($A$46,$A$47:$CJ$106,COLUMN(G$1))」がG列に入力する 数式だとしたが、これを加工して、 「=IF(G45=1,VLOOKUP($A$46,$A$47:$CJ$106,COLUMN(G$1)),"1a")」 という数式にする。 一つ上の行のG45の数値が1の時だけ、セル番地を拾ってくる数式である。 拾ってこない時は「"1a"」となっているのは、この拾ってこない時を なんらかの形で利用する場合があるかもしれないと思って、こうした。 結局、利用しなかったので、「0」でも「""」でもOKである。 (「分」も同じようにして作成するので省略) 次に条件付書式の数式を入力するだけのはずだったが、 入力するとうまく機能しないので、その時点の「時」の図形が 描写されている場合は「"l"」と入力され、 その時点の「分」の図形が 描写されている場合は「"m"」と入力され、 何も図形のない場合は「"k"」と入力されるようにした。 (klmじゃなくても123とかの数値でもいけるが混乱しないため) (ちなみにkはkapoの略) また、図形が重なる場合は「分」を優先するようにして、 後に、プルダウンメニューで「時」と「分」のどちらを 優先するかを自分で変化させることが出来るようにした。 その数式をセルAH1からBL31に入力した。 「分」を優先する時の数式は、 「=IF(TYPE(MATCH(ADDRESS(ROW(A1),COLUMN(A1),3),$G$110:$CI$110,0))<>16,"m", IF(TYPE(MATCH(ADDRESS(ROW(A1),COLUMN(A1),3),$G$46:$CI$46,0))<>16,"l","k"))」 となる。 今まで「時」だけで説明してきたので、 「=IF(TYPE(MATCH(ADDRESS(ROW(A1),COLUMN(A1),3),$G$46:$CI$46,0))<>16,"l","k")」 (↑ここでは範囲がちゃんとCI列になっていた…)。 まず、match関数の説明をすると、MATCH(検査値, 検査範囲, 照合の型)で 検索範囲内で左から又は上から何番目のセルに検索値があるかを示す関数で、 照合の型が0の時は同じ値がある時のみ、何番目の数値を示し、無い時は、 「#N/A」というエラーメッセージが表示される関数です。 (今回、多分、初めて使った、一部、エクセルのヘルプ参照) type関数は判定する数式の値が数値や文字列、エラーメッセージか、どうかを 判定する関数で、「type(数式)=16」でその数式がエラーメッセージで あることを表す。 「type(数式)<>16」でエラーメッセージを表示しない時という意味。 (今回は「type(数式)=1」で(1は数式)でも同じ結果になるはずですが、 思わぬ結果を招く怖れを除くためこうしました) match関数の検索値が、「ADDRESS(ROW(A1),COLUMN(A1),3)」 となっているのは、このセルAH1にセルA1のセル番地を宛てたかったからである。 3になっているのは、作成過程でそうなっただけで、省略したり、「4」に しても問題ないが、エクセルの下の方にあるセル番地で用いた数式と 統一する必要性がある。 また、A1をrowとcolumnで分解して、再び、セル番地にしたのは、オートフィルや コピーした数式が使えるようにするためである。 ここでは「"$A1"」でいいのだが、入力時間や誤入力のことを考えてこうした。 match関数で実験してみたのだが、検索範囲は同一行、又は同一列の、 (多分、連続している)セルの時のみ、検索対象としているみたいだった。 ここでしたかったことは、あるセルのセル番地が、その時点において 染色対象になっているか?である。 最後にセルA1からセルAE31に条件付書式を設定して完了である。 セルA1に 条件1 「セルの値が」「次の値に等しい」をぞれぞれ選択し、 「=IF(AH1="l",A1,"k")」と入力する。 そして、書式、パターンのタブ、「時」の図形で設定した色 でAH1が「"l"」の時に色が変化する。 (「分」も条件2で同じようにして設定) これでファイルを開くか、キーボードの「F9」キーを押すと、 その時点での図形が描写される。 DRについては、ファイル容量が500KBを超えてしまったこともあったり、 可能となった機能の割には、失敗作ではないかと思うのだが、 工夫すれば、もっと面白いことが出来ると思う。 IF関数と入力規則でのプルダウンメニューの組み合わせで、 図形を上下や左右に反転させたりして、 あるいは、上下左右で4面に切って、90度図形を回転させたりして、 星座が動くような感じするにすることも可能である。 (多分…) 上へ移動する 百枡計算ホームへ戻る |