その他インターネット

エクセル嫌いのための「趣味のエクセル」

数字ぎっしりの表計算ソフト、大事だとわかっていても、敬遠してしまう。そんなエクセルへの敵討ち。エクセルをおもちゃに遊んでしまいましょう。メルマガを見ながら、エクセルにひとつずつ入力していると、意外に可愛いやつになってくるかも。

全て表示する >

「趣味のエクセル」 No.73 フエルカレンダー4

2006/12/20

┌───┬───┬───┬───┬───┬───┬───┬───┬──
│   │ A │ B │ C │ D │ E │ F │ G │
├───┼───┴───┴───┴───┴───┴───┴───┴──
│ 1 │    エクセル嫌いのための「趣味のEXCEL」      
├───┤
│ 2 │                  NO.73   2006/12/20
└───┴──────────────────────────────

☆ 表を見るだけで拒否反応を起こしてしまう文系人間にもエクセルが面白く
 なる、エクセルで遊ぶマガジンです。
☆ このメールは、等幅フォントで見てください。
☆ できたら、エクセルを立ち上げながら読んでください。
☆ 最初に次のことをお断りしておきます。
(1)私が使っているエクセルはExcel97 です。2000や2002に比べるとかなり
  機能に見劣りがします。2000以上にある機能を使えばもっと楽にできるこ
  とを苦労してやっている場合があります。
(2)説明に「図」は使いません。全部言葉で説明しますので、少し回りくど
  くなりますが、我慢して下さい。
(3)エクセルになれていない人を想定して、細かい説明をはさんでいます。
  知っている人は読み飛ばしてください。
===================================

>>> こんにちわ。このメールマガジンをご購読頂いてありがとうございま
>>> す。
>>> はじめてご覧頂くみなさん、よくいらっしゃいました。バックナンバ
>>> ーはこちらをご覧下さい。
>>> ───→ http://homepage3.nifty.com/hcho/

===================================
今回の内容
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
   ◎ フエル・カレンダー(4)
   ◎ えっちょ流用語解説 靖国(7)最終回
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

         OOO 今日のお遊び OOO

********** フエル・カレンダー(4) ***********

★ 前回までにやったこと 

((( カレンダーで遊ぶ )))
(((  スタートリック  )))
((( 暑中見舞にひと工夫 )))「スピードくじ」を作る
((( 暑中見舞にひと工夫 )))気配り案内状を作ってみる
((( 暑中見舞にひと工夫 )))はがき裏表を作成する
((( グラフ機能を使って絵を描く )))グラフで作る幾何学模様
((( グラフ機能を使って絵を描く )))「帆船」を描く
((( ブロックくずしを作る )))一時休止です。しばらくお待ち下さい。
((( ナンバープレースを解く )))
((( 3択トレーナー ショートカットキー・マスター )))
((( 万華鏡もどき )))
((( ユーザー定義の書式を拡げる ))) 選挙啓発ポスター
((( セイムセットを解く )))
((( フエル・カレンダー )))

 1 フエル・カレンダーとは?
 2 画面を作る
 3 カレンダーを下の方へ広げる仕掛け
 4 土日に色をつける
 5 スピンボタンに説明をつける
 6 始まりの日付を表示
 7 今日の日付を表示
 8 終了ボタンを配置する

  はじめての方は申し訳ありませんが、バックナンバーを見てたどってみて
 ください。
                        ───→ http://homepage3.nifty.com/hcho/

===================================
         OOO 今回のお遊び OOO

********    フエル・カレンダー(4)    *******

9 カレンダーが広がれば何かが変わる

  カレンダーを過去・未来に広げることによって、なにか情報を変化させる
 ことができたなら、「フエル・カレンダー」も少しは愛想がよくなるのでは
 ないかと思います。

 a 「暦」を表示してみる

   最近では天気予報の時に、今日は「立冬」ですとか、二十四節季の一つ
  「大雪」ですといった言葉がよく聞かれます。なんとなく季節の移り変わ
  りを感じさせてくれる言葉です。

   カレンダーを広げたとき、その週の暦情報を表示させて見たいと思いま
  す。(作品集の新館、「フエルカレンダー2」がその作成例です。)

 (1)表示する情報のデータベースを作る

   ・表示する暦情報を次の4種類とします
    1)国民の祝日 これは元日から天皇誕生日まで15日あります。
    2)主な年中行事 これには節分やひな祭り、お月見などと、行事で
      はありませんが八十八夜や二百十日などの暦上の特定の日を含め
      て15日取り上げました。
    3)二十四節季 旧暦1月の「小寒」から始まり12月の「冬至」ま
      での24日です。
    4)旧暦の毎月の一日(ついたち) 大安や友引といった、日の吉凶
      の目安にする「六輝」は毎月の「ついたち」が数え始めになるの
      でその区切りとして取り上げました。

    全部で66日ですが中には「春分の日(祝日)」と「春分(二十四節
   季)」のように重なるものもありますので、実際は1年分62日としま
   した。

    当然のことですが、国民の祝日は別として、旧暦の暦と1年365日
   の太陽暦とはずれがありますので、毎年の対応日が違います。国民の祝
   日も年によって日付の違うものがありますから、データベースとしては
   一つずつデータにしてやる必要があります。

    「フエルカレンダー2」の「暦データ」は2006年11月から20
   07年12月までのデータをまとめたものです。

 (2)「六輝」を計算する

     *「六輝」というのは、日々の行動の吉凶を判断する目安として暦
      に記されるもののうち現代でももっとも一般的な「暦注」で、大
      安・仏滅・友引などを決めているものです。「六曜」とも言われ
      ます。

    「六輝」は「先勝(せんしょう・せんかち)」、「友引(ともび
    き)」、「先負(せんぶ・せんまけ)」、「仏滅(ぶつめつ)」、
    「大安(たいあん)」、「赤口(しゃっこう)」の六種で、この順番
    で繰り返されますが、ずっとこの順で繰り返されるのではなく、旧暦
    の各月のついたちにはどの日にするかが決まっており、そこで順番が
    飛んでしまいます。

     *「六輝」を構成しているそれぞれの名前をまとめて指示する言葉
     が見つかりません。あったほうが便利なので、「曜日」にならっ
     て、ここでは「輝日」という言葉を使います。

    具体的には、旧暦1月1日と7月1日は「先勝」、旧暦2月1日と8
    月1日は「友引」、旧暦3月1日と9月1日は「先負」、旧暦4月1
    日と10月1日は「仏滅(ぶつめつ)」、旧暦5月1日と11月1日
    が「大安」、旧暦6月1日と12月1日が「赤口」です。 

    ある特定の日がどの「輝日」に当たるかを計算するには、その日が旧
    暦の何月何日かを知る必要があります。そのためには旧暦の毎月1日
    にあたる日を、表にして、Vlookup関数で検索します。

     *旧暦と新暦を対応させて日付を計算するサイトは意外にたくさん
      あります。特別な計算式を使って算出することもできるようです
      が、私達が日常使っている太陽暦と、太陽の運行と月の運行を組
      み合わせて日を数える旧暦とは折り合いが難しく、完璧な対応は
      現在のところ算出不可能のようです。したがって、作られた旧暦
      の「こよみ」から書き写してくる方が実用的だと思われます。

    作品集新館の「フエルカレンダー2」の「六輝データ」シートのデー
    タは各種ビジネス手帳や「暦」から抜き出してきたものです。列G:J
    が算出に使うデータですが、サブのデータとして毎月の1日に割り当
    てている「輝日」を列L:Mに、順番をコード化した表を列O:Pに用意し
    ています。

    列Hは、列Gに表示する旧暦の各月の1日に対応する現在のカレンダー
    の日付です。
    列Iはそれぞれのついたちに割り当ててある「輝日」です。列Jのコー
    ドは先勝をトップとした場合の「輝日」の周り順を数値化したもので
    す。

    「六輝データ」シートのセルA2:E8が、これらのデータを使って算出
    した結果です。

    セルA2にはとりあえず今日の日付を入れています。下のほうには順番
    に1週間の日付を入れるために、「=上のセル+1」の式を入れてい
    ます。

    列Bは、列Aの日付が属する旧暦の月の1日に対応する日付です。セル
    B2に入っている式を見てみます。

    =IF(VLOOKUP(A2,$H:$H,1,1)=0,"範囲外",VLOOKUP(A2,$H:$H,1,1))

    この式のポイントとなるところは

    VLOOKUP(A2,$H:$H,1,1)

    のところです。

    VLOOKUP関数を使って列Hのデータを検索しています。( )の中の一
    番後ろのパラメータが「1」になっているところが、これまでの使い
    方と違う所です。これまでたいていはここのところは「0」を使って
    いました。ここが「0」の場合、( )の一番前にある「値」(今の
    場合ですとセルA2には今日の日付が入っています)と同じ値が指定し
    た範囲の一番左の列になければエラーになります。

    ここを「1」とすると、検索する値の入った列に、同じ値がない場
    合、キーとした値より小さい値でもっとも近いものを返してきます。
    これが合理的に機能するためには、検索する値が大きさの順番に並ん
    でいることが必要です。これは恐らく、検索するときに、一番上のセ
    ルの値とキーになる値を比較してキーになる値が大きければ下のセル
    に移って比較する、そこでなおキーの値が大きければさらに下に行く
    を繰り返し、キーになる値より大きい値のセルが出てきたらそこで終
    わり、キーの値より小さい方のセルの値を持ってくる、という計算方
    法をしているからです。もし順番にならんでいなかったら、値が一番
    近くないのに、一番近い値として返されることが起こります。

    もし、キーになる値が、検索する表の一番小さい値より小さい場合、
    いくらあいまいを許容するこの式でもエラーが出てしまいます。それ
    を避けるために、本来の検索値よりも小さな値を表の一番最初に付け
    加えました。それがセルH2の「1900/1/0」です。この日付のシリアル
    値は「0」ですから、エクセルが取り扱うことのできる日付を全部カ
    バーできることになります。

    先ほどの式の前半の部分

    IF(VLOOKUP(A2,$H:$H,1,1)=0,"範囲外"

    がその処理です。キーとなる日付が、用意した「ついたち」の日付表
    の一番小さい値より小さい場合、「0」を返してきますから、そのと
    きは「範囲外」と、表示するようにしました。

    逆に用意した日付の範囲より大きい場合は、際限もなく大きい値も表
    の一番大きい値を返してきます。それでもかまわない場合もあります
    が、今の場合は次の月の「ついたち」がくると、六輝の回りが変動す
    るので無制限というわけには行きません。次の月のついたちが出てく
    る前に区切りをつけて、それを越えたら「範囲外」ということにした
    方が間違いを避けることができます。

    そこで、その区切りとして、2007年の最後の日をあて、日付が2008年
    になると「範囲外」にするように手を加えて、セルB2の式を次のよう
    にします。

 IF(OR(VLOOKUP(A2,$H:$H,1,1)=0,VLOOKUP(A2,$H:$H,1,1)=$H$17),"範囲外"

    それ以外の場合には、旧暦の次の月の「ついたち」が出てくるとキー
    の日付より大きくなりますから、一つ前の「ついたち」、つまり旧暦
    の今月の「ついたち」が返されてくるということになります。

    「六輝」の計算では、その月の「ついたち」が基準になりますから、
    これを「基準日」とします。調べる日、例えば「今日」の日付から基
    準日を引いたものが基準日からの日数差で、これに1を加えたもの
    が、旧暦のその月の日付となります。

    「六輝」は6日で一回りですから、日数差を6で割った余りが基準日
    からのずれです。余りが「0」であれば、基準日と同じ「輝日」にな
    り、余りが出ればその日数分基準日の「輝日」の後の「輝日」なって
    いきます。

    「輝日」を調べるのは「先勝」を0としたコード表で行いますので、
    基準日そのものの「先勝」からのずれを考慮する必要があります。そ
    のために調べる日と基準日のずれに、基準日と「先勝」とのずれ=基
    準日の「輝日」のコード番号(列Dの数字)を加算します。これで調
    べる日が、「先勝」からのずれで判定できるようになります。

    ここで注意が必要なのは、この2つの要素を加えたとき、5をオーバ
    ーする場合があることです。検索するコードは5までしかありません
    から、ちょっと困ります。

    これの解決方法は2つあります。一つはコード番号を0〜11にし
    て、六輝をふた回り並べたコード表にして、検索する方法です。第2
    は、どうせオーバーするのなら、も一度6で割って、その余りを使お
    うという方法です。今回は第2の方法を使いました。その結果できた
    式が、列Eに入っている式です。例えばセルE2の式は次の通りです。

    =IF(ISTEXT(D2),D2,
    INDEX($O$2:$P$7,MATCH(MOD(MOD(A2-B2,6)+D2,6),$P$2:$P$7),1))

    2段に分かれていますがセルの中では一つながりの式です。上の段の
    ところは、もし列Dのセルに文字列(「範囲外」)が入っていれば、
    その文字列を入れるという意味で左隣のセルが「範囲外」となってい
    ればそのセルも「範囲外」と表示するためのものです。

    下の段の式が、6で割った余りの数から「輝日」を見つけ出す式で
    す。ここでは「INDEX関数」を使っています。数字が左側にある表で
    すと、計算して出てきた数をキーにして「VLOOKOUT関数」を使うこと
    ができるのですが、今回の場合、数字の列が右側にあって、それをキ
    ーに左側の列の値を探すので、それは使えません。

    INDEX関数では、検索する表の位置と範囲が決まっていることが必要
    です。式の中の「$O$2:$P$7」がそれにあたります。

    この関数は「INDEX(範囲,行,列)」という形で使います。
    例えばINDEX($O$2:$S$7,2,3)と指定すると、その範囲の上から2行
    目で左から3列目、つまりセルQ3を指定し、そのセルに格納されてい
    る値を表示します。

    行、列を指定する数字がわかっていると簡単なのですが、今の場合は
    考え方が逆で、0から5までの数字が一つずつある列で、例えば
    「1」がある行、という指定になります。この「1」が始めからわ
    かっていれば、「1」は2行目ですから、「行」にあたるところに
    「2」を入れておけばいいのですが、計算の結果出てきた数という場
    合には、前もってそれを探す式を用意しておく必要があります。

    使う式にはいろいろあります。例えば出てきた数字に1を足せばその
    行数になりますから、「MOD(MOD(A2-B2,6)+D2,6)」に「+1」を付け加
    えてもかまいませんし、IF関数を使って
    「IF(MOD(MOD(A2-B2,6)+D2,6)=0,1,IF(MOD(MOD(A2-B2,6)+D2,6)+D2=
    1,2,IF(・・・」
    とつないでいく方法もあります(長くなりますが・・・)。

    INDEX関数とセットでよく使われているのが「MATCH関数」です。

    MATCH(検査値,検査範囲,〔照合の型〕)という形で使いますが、検査
    範囲内にある検査値に一致する値の位置が返されます。

    「MOD(MOD(A2-B2,6)+D2,6)」という式はセルP2:P7に書かれている
    コード番号(実際には「輝日」の並び順)を算出するものですので、
    その結果は「$P$2:$P$7」のどれかになります。列P一列の中にありま
    すから、上から何行目という結果を返してきます。もし検査する範囲
    がセルP2:U2の範囲で横に並んでいたら、一致する数値は左から何列
    目にあるという数値(「列」にあたる)を返してきます。

    その結果をINDEX関数の検索に使いますから、この検査範囲はINDEX関
    数の検査範囲と矛盾しないように指定しなくてはなりません。

    例えばINDEX関数で指定している範囲を「$O$2:$P$7」とします。
    MATCH関数の検査範囲を「$P$1:$P$7」と指定しますと、「1」のある
    行を、「3」と返してきますが、INDEX関数は$P$2から数えて3行目
    を見に行くため、1行下のデータを持って帰ってくることになりま
    す。そのため、それぞれの範囲が矛盾しているとエラーになってしま
    います。

    MATCH関数の「照合の型」は通常省略して使いますが、1,0,-1の三つ
    の型があります。詳しくはエクセルのヘルプを参照してください。

    INDEX関数の「行」はMATCH関数のお世話になりましたが、列の方は指
    定した範囲の左端列のデータを見に行きますので、「1」を指定しま
    す。

    INDEX関数でずいぶん時間を取りましたが、セルE2の式はこうして出
    来上がりました。セルB2:E2を選択して、8行目=セルB8:E8までコ
    ピーしていきます。

 今回はここまでとします。ファイルを上書き保存してください。

〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
----------------------------------------------------------------------
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
││││││││ え っ ち ょ 流 用 語 解 説 ││││││││
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆

[[[ 靖国(7) ]]]

 「過日、元宮南側の林の中にひっそりと建つ『鎮霊社』の存在に驚いた。一
九六五(昭和四十)年に建てられたもので、ここには官軍に負けた会津の白虎
隊の少年や、西南戦争で自決した西郷隆盛がまつられているばかりか、湾岸戦
争やユーゴのコソボ自治州で紛争の犠牲となった諸外国の犠牲者まで祀ってあ
るというのだ。祀ることに異議があるわけではないが、余りに無秩序すぎない
か。」

 『戦争を知らない人のための靖国問題』(文春新書 2006年3月刊)という
本の中で上坂冬子氏は、靖国神社のこんな側面に目を向けています。

 靖国神社には230万柱もの国家のために命を捧げた人の霊を祭ってある
が、明治国家に反対して命を捨てた、白虎隊の少年達や賊軍の将として生涯を
閉じた維新の英雄西郷隆盛は祭られていない、と言いました。

 それは靖国神社創建と国家による護持の基本原則でした。その原則が変わっ
たわけではありません。西郷隆盛を主神として、本殿の方へ祭るわけではな
く、別に社を建てて、広く戦争犠牲者の魂を鎮める対象として靖国神社の敷地
内で祀っているというだけです。

 鎮霊社は、1965年に筑波藤麿宮司の発案で、嘉永6(1853)年以降の戦争・事
変について、本殿においては合祀対象外となった御霊と、諸外国の戦没者の御
霊の二座を祀るために創建されたもので、「鎮霊社の御祭神は奉慰の対象だ
が、御本殿の御祭神は奉慰顕彰の対象」と明確に区別されています。

 この状態を「無原則的」というかどうかはともかく、戦後の思想潮流の中で
靖国神社が、その原理に何かを付加しようとしているように見えます。もし国
家による護持が継続されていたら、このような妥協はありえなかったと思いま
すから、「宗教法人」としての靖国神社の生き残り作戦としては、やむをえな
かったのかもしれません。

 先にあげた著書の中で上坂冬子氏は、自分自身の心の底に、靖国神社への抜
きがたい一体感に似た感情が存在していること、それが幼少時に国家から施さ
れた、その愚かさにあきれるほどのマインドコントロールの結果であることを
認めつつも、それが「戦争を知っている世代」に共通の心の傾向であり、靖国
神社について議論する際無視することができない国民感情であることを論証し
ています。

 むろん、感情の問題だけでこの議論を展開すれば決着には程遠くなります。
アメリカによって押し付けられたかどうかはともかく、戦後に成長した世代の
感情にはそのような感情とはズレがあり、感情と感情のぶつけ合いからは、建
設的な妥協はありえないし、韓国、中国の人々との感情のズレもわかりあうこ
とが不可能になることは目に見えています。

 建設的な妥協点に到達するためには、感情を抑えた理性的な論議以外にあり
えません。上坂氏の本意もその点にあるように思われます。ただ私達の議論
は、理性的ではあっても、その進め方には、それぞれの立場の根底にある「感
情」に対する配慮が必要で、そのためには長い時間をかけた論議でなければな
らないでしょう。

===================================
┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌─┐┐┐┐┐┐┐┐┐┐┐┐┐┐┐┐┐
┌┌───────────────────────────────┐┐
 │     「趣味のエクセル」REVIVAL(43)      │
└└───────────────────────────────┘┘
└└└└└└└└└└└└└└└└└─┘┘┘┘┘┘┘┘┘┘┘┘┘┘┘┘┘
===================================
         OOO 今回のお遊び OOO

*******  ナンバープレースを解く(2)  *********

3 「ナンプレくん1号」の作成

 (1)さっき突然思いついて、「ナンプレ解決ツール」を「ナンプレくん」
   と呼ぶことにしました。手始めに難易度の低いものに対応したものです
   から、バージョンアップがありうるので、今できているのは「ナンプレ
   くん1号」と呼んでおきます。

 (2)「ナンプレくん1号」の解法は、ナンバープレースの定義そのままを
   式にしただけです。

    たとえば、問題番号57は下のようになっています。

    A B C D E F G H I
   ┏━┯━┯━┳━┯━┯━┳━┯━┯━┓
   ┃ │ │ ┃ │ │9┃ │ │ ┃1
   ┠─┼─┼─╂─┼─┼─╂─┼─┼─┨
   ┃ │ │2┃●│5│ ┃ │▲│6┃2
   ┠─┼─┼─╂─┼─┼─╂─┼─┼─┨
   ┃ │1│7┃6│8│ ┃ │9│2┃3
   ┣━┿━┿━╋━┿━┿━╋━┿━┿━┫
   ┃ │ │9┃1│ │ ┃ │5│8┃4
   ┠─┼─┼─╂─┼─┼─╂─┼─┼─┨
   ┃1│ │ ┃8│ │ ┃2│ │ ┃5
   ┠─┼─┼─╂─┼─┼─╂─┼─┼─┨
   ┃ │ │6┃7│ │ ┃ │1│3┃6
   ┣━┿━┿━╋━┿━┿━╋━┿━┿━┫ 
   ┃ │6│1┃3│2│ ┃ │4│7┃7
   ┠─┼─┼─╂─┼─┼─╂─┼─┼─┨
   ┃ │ │3┃ │1│ ┃ │ │9┃8
   ┠─┼─┼─╂─┼─┼─╂─┼─┼─┨
   ┃ │ │ ┃ │ │4┃ │ │ ┃9
   ┗━┷━┷━┻━┷━┷━┻━┷━┷━┛

   a 「●」の入っているセルD2に入る数字を探します。
     方法は次の通りです。

   (1)セルD2に「1」が入るかどうかを調べます。
 
    A セルD2を含むセルの並びセルA2:I2に「1」があるかどうかを調
      べます。もしあれば「1」は入りません。なければ「1」が入る
      可能性があります。

      調べるために、セルK1に次の式をいれます。

      =IF(COUNTIF($A$2:$I$2,K$5)>0,0,1)

      準備としてセルK5に調べる数字「1」をいれてあります。
      COUNTIFという関数は「COUNTIF(範囲,検索条件)」という形で、
      指定した範囲の中に、検索条件を満足するセルがいくつあるかを
      数えるもので、この場合は、「$A$2:$I$2」の範囲の中にセルK5
      に入っている値「1」と同じ数の入っているセルの数を数えて、
      一つでもあれば(セルK1に)「0」を、なければ「1」をいれ
      て、「1」が入るか入らないかのマークにします。

     B セルD2を含むセルの並びセルD1:D9に「1」があるかどうかを
      調べます。調べるためにセルK2に次の式を入れます。

      =IF(COUNTIF($D$1:$D$9,K$5)>0,0,1)

     C セルD2を含むセル範囲D1:F3に「1」があるかどうかを調べる
      ためにセルK3に次の式をいれます

      =IF(COUNTIF($D$1:$F$3,K$5)>0,0,1)

     D A、B、Cの答えが全部「1」ならこのセルに「1」が入る可
      能性があります。一つでも「0」があれば「1」という数字は絶
      対に入りません。それを判定するために、セルK4に

      =K$1*K$2*K$3

      という式をいれます。この答えが「1」ならばこのセルに「1」
      が入る可能性があり、「0」ならば「1」は入る可能性なしとい
      うことです。

     E 同様に列Lで「2」、以下列Mから列Sまでのセルで、「9」
      までの数を一つずつテストしていきます。

     F セル範囲K4:S4に判定結果が「1」か「0」で表示されていま
      すが、ここが「1」であれば入る可能性のある数字ということで
      すから、「1」が二つ以上あれば、その中の一つが入るというこ
      とでまだ確定できません。「1」が一つであれば、その数字以外
      に入る可能性のある数字はないということでその数字に確定する
      ことができます。(ちなみにこのセルにはこの時点で「4」を確
      定することができます。)

   b 同じ方法で全部の空いているセルをテストしていきます。といえば
    簡単ですが、具合の悪いことに、セルの位置が変わると判定するため
    の式が変わります。

   (1)「▲」の入っているセルH2の場合の判定式

     A =IF(COUNTIF($A$2:$I$2,K$5)>0,0,1)
     B =IF(COUNTIF($H$1:$H$9,K$5)>0,0,1)
     C =IF(COUNTIF($G$1:$I$3,K$5)>0,0,1)

   (2)調べるセルが変わるたびに式を手で書き換えるのは面倒ですか
     ら、ここはマクロにやってもらうことにします。

Sub 数式記入()

cr = Cells(11, 2)  'セルの行番号
cc = Cells(11, 4)  'セルの列番号
bcr = Int((cr - 1) / 3) * 3 + 1 '3×3のセル範囲の左上のセルの行番号
bcc = Int((cc - 1) / 3) * 3 + 1 '3×3のセル範囲の左上のセルの列番号

For i = 11 To 19

    Cells(1, i).FormulaR1C1 = "=IF(COUNTIF(R" & cr & "C1:R" & cr & "C9,R5C)>0,0,1)"
    Cells(2, i).FormulaR1C1 = "=IF(COUNTIF(R1C" & cc & ":R9C" & cc & ",R5C)>0,0,1)"
    Cells(3, i).FormulaR1C1 = "=IF(COUNTIF(R" & bcr & "C" & bcc & ":R" & bcr + 2 & "C" & bcc + 2 & ",R5C)>0,0,1)"
    Beep

Next i

End Sub

   (3)VBAではセル番号をR1C1形式で取り扱いますからこんな形
     になります。

  b 判定の原理は以上のようですが、過程と結果を見やすくするためにい
   ろいろと手を加えています。次回は各シートを最初から説明したいと思
   います。

  c 前回「作品集」に掲載した「ナンプレくん1号」を、修正して新しい
   ものにしました。作品集のファイルを差し替えてありますので、あらた
   めてダウンロードしてみてください。

  d ダウンロードした「ナンプレ解決ツール」が「コンパイルエラー」が
   でて先へ進めない、というお便りをいただきました。皆さんに同じ症状
   が出ているのでしょうか。私自身が実際に「XP」でダウンロードして
   みましたが症状は出ていません。

    現在のところ、ダウンロードする際「マクロが含まれているためウィ
   ルスに感染する恐れがあります」といった意味の警告が出て、マクロを
   無効にしてダウンロードされたのではないかという気がしています。あ
   らためてマクロを有効にする設定で取り込んでいただければと思いま
   す。

    ほかに不具合のある方はメールでお知らせ下さい。 


 本日はここまでとします。今日も保存するファイルはありません。

===================================

編集後記:最後までお読み頂きありがとうございます。

 12月16日は、ベートーベンの誕生日だということで、いろいろな行事が
組まれているようです。

 「1770年12月16日、神聖ローマ帝国(現在のドイツ)のボンにおいて父ヨハ
ン、母マリアの長男として生まれる。」と「フリー百科事典『ウィキペディア
(Wikipedia)』」は冒頭に記しています。

 が、実際のところ正確な生年月日はわからないようです。記録ではっきりし
ているのは、洗礼を受けた日で、それから類推して12月16日には誕生して
いたであろう、という日付だそうです。

 ベートーベンに限らず、当時のヨーロッパの人々にとって、実際に生まれる
ことよりも、「原罪を洗い浄め新たな生命によみがえること」を意味する「洗
礼」の方が大きい意味を持っていたのかもわかりません。

 イエス・キリストが、父ヨゼフ・母マリアの子として生まれたとされる12
月25日も、実際に生まれた日とは関係なく、キリストの生誕を祝う日として
会議で決められたものですから、昔の人にとって、「生年月日」というのは、
「誕生日」とは区別された「俗」な日付として重視されていなかったのかもわ
かりません。

 実は、私の誕生日は1月1日です。よくひとからは「めずらしいですね」と
いわれますが、私の妻の母親もそうですし、前いた会社では、夫婦そろって1
月1日生まれというそれこそ珍しいカップルもいました。単純に確率から言え
ば1/365で、他の日付と現れてくる可能性は全く同じです。

 義母の場合は、本当は1月1日ではないのですが、戸籍上1月1日生まれに
したということです。そういえば私のいとこは、私より3日前の12月29日
生まれですが、暮れのあわただしいときにせず、1月1日で届けたらよかった
のにと周りから言われたといいますから、戸籍上の1月1日生まれは、他の日
に比べると、珍しいどころか、少し多めではないかという気がします。

 60数年前でこうですから、日本人でも昔は生年月日というのにそれほどこ
だわらなかったのではないでしょうか。歴史上の人物では、豊臣秀吉が1月1
日生まれということになっていますが、これなども、その出生を神秘化するた
めに捏造されたのだろうというのが定説になっています。

 現在では、生年月日によって学校に入学する年が変わったり、選挙権があっ
たりなかったり、年金の加入時期や、支給開始年齢が決められたりしますか
ら、生年月日は非常に重要な個人データですが、100年ほど昔(といっても
もう明治の終わりごろですが)には、生まれて1年以上経って、言葉をしゃべ
るようになってから役所に届ける、といったこともあったそうで、生年月日も
年齢もかなり大雑把でした。

 現在の私達は、365日たつと一つ年齢が上がるのですが、旧暦の1年は3
55日前後ですから、そのころの人は現代の私たちよりも早く年を取っていた
勘定です。もっとも3年目に1ヶ月調整が入りその年には一年が385日にも
なります。そんな時代に厳密な生年月日などなんら意味を成さず、ただ記念日
的意味を日付に持たせるより仕方がなかったのでしょう。

 よいお年をお迎えください。

===================================
エクセル嫌いのための「趣味のエクセル」
発行者:えっちょ

ご意見などはこちらへ hcho@mbg.nifty.com
ホームページ     http://homepage3.nifty.com/hcho/
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
このメールマガジンは次のところから配信しています。登録解除、バックナン
バーの閲覧はこちらからお願いします。

メルマガ天国  http://melten.com/m/13094.html
まぐまぐ    http://www.mag2.com/m/0000109260.htm
E‐Magazine   http://www.emaga.com/info/hobxls.html
カプライト   http://cgi.kapu.biglobe.ne.jp/m/8559.html
メルマ     sub-154201@mc.melma.com (登録用)
        us-154201@mc.melma.com (退会用)
 
*** このメルマガに返信していただいても購読解除できません。
    上のURLから手続きして下さい。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

規約に同意してこのメルマガに登録/解除する

メルマガ情報

創刊日:2005-07-19  
最終発行日:  
発行周期:不定期  
Score!: - 点   

コメント一覧コメントを書く

この記事にコメントを書く

上の画像で表示されている文字を半角英数で入力してください。

※コメントの内容はこのページに公開されます。発行者さんだけが閲覧できるものではありません。 コメントの投稿時は投稿者規約への同意が必要です。

  • コメントはありません。