その他インターネット

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

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

全て表示する >

「趣味のエクセル」 No.96 2011/9/15 漢字ナンクロツール(7)問題表を貼り付ける

2011/09/15

         OOO 今日のお遊び OOO

******** 漢字ナンクロツール(7) *********

★ 前回までにやったこと 

((( カレンダーで遊ぶ )))
(((  スタートリック  )))
((( 暑中見舞にひと工夫 )))「スピードくじ」を作る
((( 暑中見舞にひと工夫 )))気配り案内状を作ってみる
((( 暑中見舞にひと工夫 )))はがき裏表を作成する
((( グラフ機能を使って絵を描く )))グラフで作る幾何学模様
((( グラフ機能を使って絵を描く )))「帆船」を描く
((( ブロックくずしを作る )))一時休止です。しばらくお待ち下さい。
((( ナンバープレースを解く )))
((( 3択トレーナー ショートカットキー・マスター )))
((( 万華鏡もどき )))
((( ユーザー定義の書式を拡げる ))) 選挙啓発ポスター
((( セイムセットを解く )))
((( フエル・カレンダー )))
((( 「日報」作りを楽しむ )))
((( カレンダーの写真を自動変更 )))
((( 漢字ナンクロツール )))
1 漢字ナンクロとは
2 ツールのねらい
(1)盤面の中から、指定された番号の入っているます目をみつけ場所を表示
  する。
(2)その番号の場所に推理する漢字を表示してみる。
(3)推理が正しいと判断した時、その場所に正しい漢字を書き込む。
(4)いったん正しいとしたが、疑問が出た場合、その場所を見つけて表示 
  し、書き直しできるようにする。
3 ツールを動かす
(1)回答シートで問題を解いてみる
(2)回答手順をたどる
4 各シートの説明
(1)「基本データ」シート
(2)「問題」シート、「問題データ」シート
(3)「回答表示」シート
(4)「チェック表」シート
  A 漢字の重複の監視と警告

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

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

******** 漢字ナンクロツール(7) *********

6 「回答シート」を作成する

 a 表を貼り付ける

  一番最初に説明しましたが、このシートの解答表はワークシート「問題」
 の表とワークシート「回答表示」の表をコピーして、画像をリンク貼り付け
 して二つの画像を重ね合わせたものです。

  この操作は面倒ですのでマクロにやらせています。

  現在の状態では「回答図表示(マス目変更時のみ使用)」と書いてあるボ
 タンを押すと、マクロを実行します。

   *最初、91号で説明したときはこのボタンは「回答図表示」とだけ
   なっていました。その時にも触れましたが、すでに表が表示されている
   時、このボタンを押すと新しい画像が作成されて、次々と画像が重なっ
   てしまいます。そこで新しい画像を作成する前にすでにある画像を消し
   てやる必要があり、それをマクロの中で実行するのが宿題となっていま
   した。いろいろ調べてみましたが、この動作をマクロで行うのは不可能
   だという結論になりました。

    理由は、エクセルの画像処理は、画像に一つ一つ通しナンバーをつ
   け、それをインデックスとして画像を指定し、処理を行うようになって
   います。ところがこのインデックス番号が、固定されておらず状況に応
   じて変化するようになっています。新しい図が追加された、以前の図が
   消された、大きさが変わった、位置を変更した、いろいろな理由で変化
   したものには次々と新しい番号がつけられ、もとの番号は有効でない画
   像データとして残される、どうやらこのようなシステムらしいのです
   が、自分が処理したい図が今どの番号を持っているかを間接的に確認す
   る方法がありません。直接その図をクリックしてその時の番号を知るこ
   とは出来るのですが、今回のように同じ場所に重ねた場合は手で消すの
   と変わらないと見極めました。

    おそらく「元に戻す」操作を優先させるためと思われますが、そうい
   うことで、原則的にはこの画像は触らない、レイアウトを変えるときだ
   け、元の画像を「クリック」→「delite」で消して、新しく画
   像を貼り付けるということにします。

  そのマクロは次のようになっています。

Sub 回答図作成()

    On Error GoTo harituke
     ActiveSheet.Shapes.Range(Array("Picture 100", "Picture 101")).Select
    Selection.Delete
    
harituke:
    リンク貼り付け1
    リンク貼り付け2
  全画面表示
End Sub

  前半の3行は、先ほど説明した無駄な努力の名残です。実際に役に立ちま
 せんから消してしまってかまいません。(最新のエクセルファイルでは消し
 ています。)

  実体は

  リンク貼り付け1
    リンク貼り付け2

  この二つのプロシージャを実行するだけです。

まず、はじめの「リンク貼り付け1」の中身は次の通りです。


Sub リンク貼り付け1()

    tate% = Cells(2, 2)'縦のマスの数
    yoko% = Cells(3, 2)'横のマスの数。%は整数として扱うことを宣言する
            'マークです。
    
    chtate = Right(Str(tate), Len(Str(tate)) - 1)
            '縦のマスの数=表の一番下の行番号を文字列になお
            'す・・(表の右端最下段のセルを"A00" の形にする
            'ため)
    
    If yoko% <= 26 Then 
chyoko = Chr(Asc("A") + yoko% - 1)
    Else
    chyoko = Chr(Asc("A") + Int(yoko% / 26) - 1) & Chr(Asc("A") + (yoko% Mod 26) - 1) 
  'この式中の「Mod」を実行できるようにするため、整数宣言をしました
    '横のマスの数=表の右端の列の番号をローマ字に変換している。数が2
  '6より大きいと「AA0」「AB0」のような形になるので、それに対応する
  'ようにしています。
    End If

    lastcell = chyoko & chtate '表の右端最下行のセル番号を決定

    Sheets("回答表示").Select  'ワークシート回答表示を選択します

    Worksheets("回答表示").Range("A1:" & lastcell).Select
    Selection.Copy       ’回答表示の表を選択、コピーします

    Sheets("回答シート").Select 'ワークシート「回答シート」を選択
    Cells(1, 5).Select   '回答シートのセルE1を表の左上に決めます
    ActiveSheet.Pictures.Paste(Link:=True).Select
            'コピーした表を決めた場所にリンク貼り付けします
       
        
    図のサイズ変更 ’貼り付けた図のサイズを変更します
    
End Sub


  図のサイズ変更の手順は次のようになっています


Sub 図のサイズ変更()

    tate = Cells(2, 2)'縦のマスの数
    yoko = Cells(3, 2)'横のマスの数

    takasa = 17# * tate'1マスの高さ、幅が17ポイントになるよう、全体の
    haba = 17# * yoko '高さ、幅を算出します

    
Selection.ShapeRange.LockAspectRatio = msoTrue'この4行は決まり文句
    Selection.ShapeRange.Height = takasa     'です。図の属性を設
    Selection.ShapeRange.Width = haba       '定しています。高さ
    Selection.ShapeRange.Rotation = 0#      '幅は計算値です

End Sub

  このプロシージャは、マクロの記録で作りましたので、細かい意味は説明
 できません。特に1行目は私自身理解できていません。マスの高さ、幅の
 17ポイントもたぶんポイントだろうと思うだけで、実際は数字をいろいろ変
 えてみて、17が一番よさそうだということで決めました。


  次に「リンク貼り付け2」ですが、基本の形は「リンク貼り付け1」と同じ
 です。違うのは元の表の位置が一番上ではなく、セルA23から始まっている
 ことです。それを考慮して式を変更する必要があります。


Sub リンク貼り付け2()

    tate% = Cells(2, 2)
    yoko% = Cells(3, 2)
    
    bsr% = 23   '表がセルA23から始まるのでその位置を指定しています
    bsc% = 1
    
  chtate = Right(Str(tate%+bsr%-1), Len(Str(tate%+bsr%-1)) - 1)
            '縦の最下行を縦のマス目数に最初の行数を加えて算出

    If yoko% <= 26 Then 
    chyoko = Chr(Asc("A") + yoko% - 1)
    Else
    chyoko = Chr(Asc("A") + Int(yoko% / 26) - 1) & Chr(Asc("A") + (yoko% Mod 26) - 1)
    End If
      '横はA列から始まるのでリンク貼り付け1と同じ

    lastcell = chyoko & chtate
    
    Sheets("問題").Select
    Worksheets("問題").Range("A23:" & lastcell).Select
    Selection.Copy
    Sheets("回答シート").Select
    Cells(1, 5).Select
    ActiveSheet.Pictures.Paste(Link:=True).Select
    
    図のサイズ変更
    
End Sub


  最後の「全画面表示」は、出来るだけ全体が見渡せるようにするためで
 す。プロシージャの内容は次の通りです。

Sub 全画面表示()

    Application.DisplayFullScreen = True

End Sub

  このワークシートにはもう一つ、大きな表が貼り付けてあります。チェッ
 ク表です。

  この表の本体は、ワークシート「チェック表2」にあります。この表につ
 いてはすでに説明済みです。この表セルA1:Y10をそっくりコピーして、ワー
 クシート「回答シート」のセルC26を先頭にリンク貼り付けしています。

 今回はここまでとします。説明の途中でいろいろ触っていますので、「作品
集」新館の「漢字ナンクロツール」は内容が変わっています。ダウンロードさ
れている方は新しいものにさし替えしておいてください。次回は問題をワーク
シート「問題」に転写する方法について検討したいと思います。

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

********* ユーザー定義の書式を拡げる(2) ********

1 エクセルの表示形式はとても面白い使い方があります。今回はその機能を
 使って遊びたいと思います。

 e 書式のユーザー設定

 (6)次の「投票は朝7時から」と「夜20時まで」の値はそれぞれ
       セルB3・・38606.2916666667
       セルB4・・38606.8333333333
   となっています。整数部分の「38606」は「平成17年9月11日(日)は」
   と同じです。

    セルA3を覗いてみると、

      =A1+7/24

   という式が入っています。

    セルA1には、「2005/9/11」が入っていますから、これに「7/24」を
   加えることによって「2005/9/11 7:00」を算出しています。

    シリアル値の整数部分は、1日につき数値が1増えることになってい
   ます。1日は24時間ですから、1/24は1時間、7/24で7時間をあらわ
   しています。

    セルA4には

      =A3+13/24

   という式で、さらにその13時間後、「2005/9/11 20:00」を算出して
   います。

    実は、この式はあまりよくありません。というのは、前にも触れる機
   会があったと思いますが、コンピュータは小数計算があまり得意ではあ
   りません。途中で丸めてしまうので、整数に小数を1回加えるぐらいな
   ら誤差はあまり出ませんが、小数に小数を加える操作をすると、丸めが
   重なって、思っている数より多くなることがあります。今回はうまく2
   0時が出てきましたが、そうでない場合が起こるかもわかりません。
    正確を期するためには

      A1+20/24

   とした方がよりよいやり方です。

    この二つのセルの書式設定は次のようになっています。

     A3・・"投""票""は""朝"h"時""か""ら"
     A4・・"夜"h"時""ま""で"      

    「h」はシリアル値の中から、時・分・秒の「時」を取り出す書式で
    す。「分」は「mm」、「秒」は「ss」で取り出します。

     「mm」は「月」を表示する時も使います。「m」または「mmm」とす
    ると間違いなく「月」を取り出しますし、「mm」も単独で使うと
    「月」を優先的に取り出します。「h」とセットで使うと「分」を取
    り出すようです。

  (7)次の「投票所は○○中学校です」と「期日前投票は市役所ロビーで
    行っています」の値を見ると、それぞれ、「1」、「0」となってい
    ます。これは

     セルの値が「1」の時は「投票所は○○中学校です」、「0」の時
     は「期日前投票は市役所ロビーで行っています」

    と表示するようにした書式設定で、

[=1]"投票所は○○中学校です";[=0]"期日前投票は市役所ロビーで行っています";;

    とします。

     この型の書式設定は、4種類の設定ができます。各種の設定を
    「;」で区切っていますが、[ ]で指定しない場合、左から順に

      プラスの数;マイナスの数;ゼロ;文字列

    の値を設定するようになっています。

     セルA11からA14に「1」、「-1」、「0」、「Q」と入力し、
    セルA11:A14を選択してから、書式設定を

     "プラス";"マイナス";"ゼロ";"文字列"

    として見てください。

      プラス
      マイナス
      ゼロ
      文字列

    と表示されます。

     ですから、セルA5、セルA6の場合、

"投票所は○○中学校です";;"期日前投票は市役所ロビーで行っています";

    としても、同じ結果になります。違うところは、数値を指定していま
    せんから、「1」の代わりに「100」を入れても、「10」を入れても同
    じ結果になるということです。

     次の

       選挙は国民の大切な権利です
       棄権しないようにしましょう

    のところは、書式設定をしていない、ただの「文字列」にしています
   が、ここのところも、このテクニックで数値化することができます。一
   度試してみてください。

    []で指定する時、色を指定することができます。エクセルが準備して
   いるユーザー定義の書式の中に、

      #,##0;[赤]-#,##0

   のようなものがあります。これは値がマイナスであった時は赤で表示す
   るように指定したものです。これを利用すると、「0」だけ、別の色に
   することもできますし、プラスの数、マイナスの数でそれぞれ色を変え
   ることも可能です。

    先ほど作っておいたセルA11:A14に次のような書式設定をしてみまし
   た。

    [緑]"プラス";[赤]"マイナス";[黄]"ゼロ";[青]"文字列"

    「;」の間の部分に何も入れないと、その部分は「何も表示しない」
   という指定になります。

     ;"マイナス";;"文字列";

   という風にすると「プラスの数」と「ゼロ」とが表示されなくなりま
   す。

     ;;;

   としてしまうとどんな値を入れてもそのセルには何も表示されません。
   セルの値を非表示にしたい時、これまでも時々使いましたが、それには
   こんな理屈があったわけです。

 (8)最終行の「○○第3町内会」のところは上の「第44回・・・」と同じ
   手法です。この数字を別のものに変えると、その数の町内会のものがで
   きるという、便利設計です。

2 書式設定で逃げると便利なところ

 a 今回は数値に文字列を加える書式設定が、かなりの長文まで利用可能だ
  ということを知っていただけたと思います。

   通常定型文では、日付を変えるだけでいいというようなものが多いもの
  です。そういうときに私たちが陥るミスの一つに「曜日を間違えてしまっ
  た」というのがあります。たくさんある日付関連文言のいくつかを修正し
  忘れたということも時々発生します。そんな時日付1箇所を変えるだけで
  全部修正できたら、と何度思ったか知れません。

   ワードではこういう芸当はなかなかできません。エクセルでは「text関
  数」という便利なものがあって、地の文と、可変箇所とを組み合わせると
  いう操作が可能です。

   今回私が紹介した「書式設定を利用する方法」は、特殊な場面で利用可
  能なものに過ぎませんが、「text関数」とは違った便利さがあります。

   その第1は、数値を入力するだけでよい、ということです。
   第2は元が数値ですから「計算可能」だということです。日付を変更す
  るのに元の数値に日数をプラス・マイナスするだけで変更ができる(特に
  複雑な計算は不要です)というところで、例えば締切日が2週間後という
  ようなとき、14を足すだけでよいのですが、「text文」ではできませ
  ん。

   不便なところは、数値しか取り扱えないところ、1つの文には1つの数
  しか使えないところです。

   text文とうまく組み合わせて、仕事を楽にしていただければいいなと思
  います。

 b ワードアートは表示されたデータを使う

   もう一つ今回確認できたのは、ワードアートがセルの値をとってくるの
  に、私たちが本体と思っている「数値」ではなく、セル上に表示されてい
  る表示形式の方だということです。

   ただ表示された文章は取ってくれますが、フォントの種類はダメでし
  た。コピーしたワードアートを「ワードアートの書式設定」でいろいろ
  アレンジしていけますが、ここでもフォントの種類はさわれません。こ
  れだけは「テキストの編集」画面で設定するより方法はないようです。

   ところが、参照するセルを設定してしまうと「テキストの編集」画面
  が使えなくなってしまいます。文字データをセル参照で行い、かつワー
  ドアートをコピーして使う場合は、フォントの種類を同じものにすると
  いう限定つきでないと使えないということがわかりました。

 今回はここまでとします。この続きはまた機会を見て紹介したいと思いま
す。

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

編集後記:最後までおつきあい下さりありがとうございます。

 9月に入って早々、台風12号が西日本を襲いました。それでなくても日本
一雨量の多い、奈良県・和歌山県にまたがる山岳地域が豪雨禍に見舞われまし
た。東日本大震災ほどではありませんが、地形が変わり、いくつかの集落が孤
立しました。東日本の救済がほとんど進んでいない状況で、また救済が必要な
事態が発生しています。 

 政治は、新しく野田内閣に変わり、本格的に震災復興、財政再建に全力投球
とぶちあげた途端に、大臣の失言問題。またもや自民党の病気が再発して任命
責任云々にうつつを抜かしそうな気配です。どうか大事な会期をそんなことで
浪費しないようにお願いしたいものです。近畿南部の災害救援も忘れず審議し
てもらいたいですから。

久方ぶりに、ブログ「えっちょの言葉いじり」に記事をアップしました。以前
から気になっていた「脱原発」についてどう考えたらよいのか、ということ
を、自分なりにまとめてみたものです。

問題をニュートラルに考えてみたら、中間項としての「安全な原発」をまじめ
に考えてみる必要があるのではないかという気がしてきました。

最終的に「脱原発」に行くとしても、代替エネルギーの実現が可能になるまで
に、火力発電を使うという道は、地球環境の問題としてできるだけ避けようと
すると最善とは言えません。放射能漏れの危険をはらんだ今の原発でない、
もっと安全な原発の可能性も選択肢に入れるべきではないか、というのが中間
結論です。

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

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

メルマガ情報

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

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

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

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

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

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