---黒鳥の子育て---

 毎年、今の時期になると、黒鳥が子育てをしています。
 近くを通る人から食べ物をもらえ、いい環境で、暮らして
 います。

 

 たいていは、つがいの片割れが近くにいて、けなげに番犬
 ならぬ、番鳥をしています。
 ある一定以上、近くによると、これ以上近づくなと、怒られて
 しまいます。

---PIC 流れるサインボード (2)---

 なめらかにスクロールする方法について、いろいろアドバイス
 いただきました。
 ハードルが高い部分もあって、なかなか実現できません。
 とりあえず、当初の目的である、PCからの入力を表示する
 ことができました。

 

 PICを初めてから、いつも迷ってたのが、文字のキャラクター
 コードの扱いです。
 VB等では、キャラクターコード得るには、

   Asc(‘A’)

 のように「Asc」の関数を使うようです。プログラムを初めて
 覚えたBasicでも同じような関数を使ったと思います。
 このことが頭に残っていて、関数を使わなければ、と思い
 こんでいました。
 なんのことはない、コンピューター上では、同じ、数字で扱わ
 れるんですね。ですから、アスキーコードを得て、演算をする
 には、端に「int」型にキャストすればいいということがやっと
 わかりました。

      char c1 = ‘a’;
      int code1 = (int)c1;

 これで、code1には、’a’のキャラクターコードの0x61を得る
 ことができました。
 キーボードからの入力を表示するにあたって、大文字のデータ
 しかいれていませんので、小文字は、0x20を引いて、

   char c1 = ‘a’;
   int code1 = (int)c1-0X20;

 大文字に変換しました。

---PIC 流れるサインボード (1)---

 諸兄のHPを参考に、PICを使ってサインボードを作りました。
 何の使用目的もない、ただのおもちゃです。
 ただ、諸兄のHPで使ってる74HC154は製造中止でしたの
 で、これまた、諸兄のHPを参考に、74LS138二つで置き換
 えて作りました。
 三日ぐらいかかって、配線を終えて、どのような形で、流れる
 サインボードを実現するか考えました。
 参考になるC言語によるプログラムがみあたらなかったので、
 過去の7セグLEDを使った工作を思い出しながら、
 ダイナミック点灯を基本にプログラムを組むことにしました。

 

 8×8のLEDが4枚ですので、8×32列のLEDがならんでます。
 この黄色い□から黄色い□までのLEDに、タイマー割り込みを
 使って、このLEDとダブるように準備したメモリーの内容を
 書き出すことにしました。
 テレビで使われている走査線のイメージでしょうか。
 メモリーには、縦に8個並んでいるそれぞれのLEDの
 ON-OFFの情報を書き込みます。
 右にスクロールさせるには、メモリーの左側の山吹色の部分
 に表示させる文字のデーターを書き込みます。
 左にスクロールさせるには、メモリーの右側の青色の部分に
 表示させる文字のデーターを書き込みます。
 「A」の表示をさせるには、

 

 16進数7個をメモリーに書き込みます。
 左側に書いてある数字が、上から左端の縦の列の情報に
 対応します。
 これをスクロールさせるには、メモリーに書いてある情報を
 それぞれ、一つ右側のメモリに移動する、ということで、実現
 します。

 

 多分、このほかにもスクロールの方法があるのでしょうが、
 自己流で、作製しました。
 実際に動かして見ると、すーっと流れるような表示には、
 なっていません。
 なめらかにするには、もう少し、工夫が必要なんでしょうね。

 

 アルファベットのA~Zまでの大文字のデーターを入れると、
 それだけで、ほぼメモリーが満杯です。
 倍のメモリーのある16F1939に変更してみようと思います。
 USARTを使って、PCのデータをスクロールさせるのが目標
 です。

---HP・htmlの編集---

 在宅のお手伝いの仕事の関係で、CGIをいじったり、
 htmlをいじったりしてます。
 CGI(Perl)は正規表現のオンパレードで、チンプンカンプン。
 もっぱらサポート掲示板のお世話になってます。
 それよりは、まだ、htmlの方がいじりやすいです。
 まだ、まだ、コピペ段階ですが、昨日は、input buttonをブリ
 ンクさせたくて、ネットでたぐって、やっと、その方法がわかり
 ました。
 C言語等でいえば、サブ関数を書き入れて、それを呼び出す
 イメージですね。
 次の手順でできました。もちろん、0から作るのではなく、
 動いているものを改変します。

   1 <head>~</head>の記述を探す。
   2 上記内でさらに
      <style type=”text/css”>~</style>を探す。
   3 さらに、を探す
   4 3の部分に使いたいcssを追記する。
   5 追記したもの
    /* 点滅 */
     .blinking{
       -webkit-animation:blink 1.5s ease-in-out infinite alternate;
       -moz-animation:blink 1.5s ease-in-out infinite alternate;
       animation:blink 1.5s ease-in-out infinite alternate;
     }
     @-webkit-keyframes blink{
       0% {opacity:0;}
       100% {opacity:1;}
     }
     @-moz-keyframes blink{
       0% {opacity:0;}
       mcxaza100% {opacity:1;}
     }
     @keyframes blink{
       0% {opacity:0;}
       100% {opacity:1;}
     }
   6 効果を持たせたい部分を
      <span class=”blinking”>
        と
      </span>
        で囲む

 これだけですが、理解するのに、半日以上かかりました。
 CSSの記述は、htmlファイル内に記述する場合と、
 *.cssという外部ファイルに記述して、取り込む場合と、
 両方あるようですね。
 外部ファイルの取り込みにも何種類かやり方があるようです。
 この辺は、Cとは、ちょっと違いますね。
 という訳で、やっと、目的の装飾(ブリンク)が達成できまし
 た。
 =追記=
   <span class=”blinking”>は、ブログの編集画面で、
   そのまま、書くと、スタイル?の一部と認識されて、
   表示されなくなります。
   「<」と「>」を半角で表記するには、それぞれ、
       &ltと&gt
   を使うようです。ちょっと、面倒ですねえ。

---レオとお散歩---

 いつの間にか、足腰がちょっと弱ってしまった愛犬のレオの
 ために、また、少しずつお散歩に行き始めました。
 足が悪いので、歩くのは嫌いなのですが、本人(本犬?)の
 ために、歩く距離を少しずつ増やせればと思います。
 過日、お散歩に行ったら、後から、人なつこい?カラスが
 一定の距離を置いてついてきます。
 レオにおやつをあげて休んでいると、なんと1mか2mぐらい
 の近距離まで、近づいてきました。

 

 このカラスは、きっと何回も食べ物をもらって、学習したんで
 しょうね。ささみのワンコ用のチップスを投げると、拾って
 食べました。車のおいてある所近くまでついてきました。
 お散歩にきた公園では、暖冬?のためか、いつもより早く
 梅の花が咲いていました。

 

 この週末は寒くなりそうですが、春は、もう、そこまできてま
 すね。
 この間、冬になったともったら、もう、春の足音が近づいて
 ます。時間がたつのがはやいです。

---手強しエクセルVBA (3)---

 VBAと格闘をしていて、最後に保存しようと、「Crtl+S」を押して
 上書き保存をしようと思うと、なぜか、名前をつけて保存に
 なってしまいます。
 NETで検索してもひっかかりません。
 もしやと思い、ファイル-オプションをたどってみると、なんと
 「保存」という項目があるではありませんか。

 

 ここにブックの保存形式という覧があります。ここがデフォルトでは、
 マクロを保存しない、「.xlsx」になってます。これで、上書きではなく
 て、名前をつけて保存になったようです。
 ここを、マクロも記録できる、「.xltm」にすると上書きができるよう
 になりました。
 もしかして、ここは、「.xlsm」(マクロ有効ブック)でもよかったの
 かも。
 この設定は、以前のものにはなかったような?,気が。
 あったのかな、この辺はちょっと、不確かです。

---手強しエクセルVBA (2)---

 お手伝いでしている仕事の内容は、ある行事の参加者申し
 込みの受付の処理です。
 参加希望者は、HPから申し込みをします。すると。手元に
 申し込みのメールが届きます。
 このメールを処理して、

  1 受講票返信メールの作成・送付
     受付日付
     受付No
  2 受講者一覧表の作成

 の一連の作業をします。以前は、この作業を全部手作業
 でやってました。
 今回の催しの定員が100名ですから、結構な手間です。
 そこで、VBAの登場でしたが、やっと次のような手順で
 かなりの部分を半自動?にすることができました。

 
  送られてくる自動返信メールのコピー(手動)
   ↓
  エクセルに貼り付け(手動)
   ↓
  必要データーの取り出しと成形(エクセル関数)
   ↓
  一覧表への追加(エクセルVBA)
   ↓
  返信文面の作製(エクセル関数)
    受付月日の挿入
    受付Noの挿入
   ↓
  エクセルの返信文面のコピー(手動)
   ↓
  メールへの貼り付け(手動)
   ↓
  送信・・・・・・・・・受付完了

 これらの作業のなかで、一覧表への追加が一番てまどりまし
 た。
 その次にてまどったのが受付Noの挿入です。
 これは、受付名簿の一覧表から、追加した項目のNoを
 読みとることで実現しました。

   Worksheets(“Sheet1”).Range(“B” & Range(“C4”).-
        End(xlDown).Row).Copy
   Range(“J6”).Select
   ActiveSheet.Paste

  表に追加すると、C4の表題以下のセルに種別が追加され
 ますので、

   Range(“C4”).End(xlDown).Row)

 で、どこのセルが記入済みの最下段(行)か取得します。
 この読みとった行とNoの書いてある”B”と&をとって、
 該当のNoのセルの番地を作ってます。

 Worksheets(“Sheet1”).Range(“B” & Range(“C4”).End(xlDown).Row)

 これを、作業セルのJ6にペーストします。

   Range(“J6”).Select
   ActiveSheet.Paste

 こんな一連の動作で、受付Noを挿入した文面を作りました。
 手間取りましたが、ちょっと楽になって、間違いもすくなくなり
 そうです。

---手強しエクセルVBA (1)---

 手強いVBAを少しやっつけました。
 以前にしたことを少し思いだしましたが、未だ手強いのには、
 変わりありません。
 昨日、やっつけたのは、一定の範囲のセルを表の最下行に
 追加でペーストするというものです。
 ただ、これだけで、何時間もかかりました。できてみると、

 Sub コピー()
    Worksheets(“Sheet1”).Range(“K133:O133”).Copy
    Worksheets(“Sheet1”).Range(“C” & (Range(“C4”).End(xlDown).Row + 1)).-
    PasteSpecial Paste:=xlPasteValues, -
    Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  End Sub

 何のことはない、たった、2行です。
 K133~O133のセルに書かれているセルの値だけを、表の
 最下行にコピーするだけです。
 
 表の最下行を

   Range(“C4”).End(xlDown).Row

 で求め、その下を+1で求めます。
 エクセルの番地は、英語と数字です。この番地を

   Range(“C” & (Range(“C4”).End(xlDown).Row + 1))

 で&を使って作ります。
 
 

---手強しエクセルVBA---

 在宅でお手伝いをしている仕事関連で、エクセルでの処理を
 手短にやろうと、久しぶりにエクセルのVBAをいじりました。
 やることは、

  原本
  ↓
  シートのコピー
  ↓
  振分してシートごとに転記
  ↓
  コピーの削除

 これだけですが、0から作ることはできないので、NETと検索
 するとちょうどVBAのプログラムがでていました。

   Sub 担当者別に振り分け()
    Dim OrgWS As Worksheet, TmpWS As Worksheet, CurWS As Worksheet
    Dim FromCell As Range
    Dim ToCellNum As Integer
    Dim CurName As String
    ’変数初期化
        Set OrgWS = Worksheets(“Sheet1”) ‘元のデータがあるシート名を指定
        CurName = “”
    ’処理終了まで描画を止める
        Application.ScreenUpdating = False
    ’シートを作業用にコピーして担当者でソート
        OrgWS.Copy after:=Sheets(Worksheets.Count)
        Set TmpWS = Worksheets(Worksheets.Count)
        TmpWS.Columns(“A:G”).Sort Key1:=Range(“A2”), Header:=xlYes
    ’メイン処理
       For Each FromCell In TmpWS.Range(“A2”, TmpWS.Range(“A65536”).End(xlUp))
        If FromCell.Value <> CurName Then ‘次の担当者に移った場合
          CurName = FromCell.Value
          Worksheets.Add after:=Worksheets(Worksheets.Count) ‘シートを最後に追加
          Set CurWS = Worksheets(Worksheets.Count)
          CurWS.Name = CurName ‘シート名を担当者にする
          ToCellNum = 2 ‘コピー先セルの行番号を初期設定
          OrgWS.Range(“B1”, “G1”).Copy CurWS.Range(“A1”) ‘タイトル行をコピー
        End If
         FromCell.Offset(0, 1).Resize(1, 6).Copy CurWS.Cells(ToCellNum, 1) ‘データのコピー
         ToCellNum = ToCellNum + 1 ‘コピー先セルを一つ下に進める
       Next
    ’作業用シートを削除
       Application.DisplayAlerts = False
       TmpWS.Delete
       Application.DisplayAlerts = True
    ’描画を再開
       Application.ScreenUpdating = True

 でした。すぐ動くかとおもいましたが、エラーでだめでした。
 ネットで検索をしながら、やっと、動くように手直ししました。
 動かなかったのは、多分、掲載してあったVBAは、2003用の
 古いものだったのかもしれません。2013では、動きませんでした。
 下記が、修正して、私の環境で動くようにしたものです。

Sub 振分()
  Dim OrgWS As Worksheet, TmpWS As Worksheet, CurWS As Worksheet
  Dim FromCell As Range
  Dim ToCellNum As Integer
  Dim CurName As String
  ’変数初期化
    Set OrgWS = Worksheets(“一覧”) ‘元のデータがあるシート名を指定
    CurName = “”
  ’処理終了まで描画を止める
  Application.ScreenUpdating = False
  ’シートを作業用にコピーして担当者でソート
    OrgWS.Copy after:=Sheets(Worksheets.Count)
    Set TmpWS = Worksheets(Worksheets.Count) ‘最後ワークシートを作業用に
    TmpWS.Activate
    TmpWS.Range(“B2:I17”).Sort Key1:=TmpWS.Range(“C3”), order1:=xlAscending, Header:=xlYes
  ’メイン処理
    For Each FromCell In TmpWS.Range(“C3”, TmpWS.Range(“C” & Rows.Count).End(xlUp))
      If FromCell.Value = “終了” Then Exit For
      If FromCell.Value <> CurName Then
        CurName = FromCell.Value
        Worksheets.Add after:=Worksheets(Worksheets.Count) ‘シートを最後に追加
        Set CurWS = Worksheets(Worksheets.Count)
        CurWS.Name = CurName ‘シート名を種別名にする
        ToCellNum = 1 ‘コピー先セルの行番号を初期設定
        OrgWS.Range(“B1”, “I2”).Copy CurWS.Range(“B2”) ‘タイトル行をコピー
      End If
      ToCellNum = ToCellNum + 1 ‘コピー先セルを一つ下に進める
      FromCell.Offset(0, -1).Resize(1, 8).Copy CurWS.Cells((ToCellNum + 2), 2) ‘データのコピー
    Next
  ’作業用シートを削除
    Application.DisplayAlerts = False
    TmpWS.Delete
    Application.DisplayAlerts = True
  ’描画を再開
    Application.ScreenUpdating = True
End Sub

  作業シートの作製までは、うまくいったのですが、このシート
  をソートしようと思っても、原本がソートされ、ここを直すのに
  まる一日以上かかってしまいました。
  目が疲れました。 

---工房外壁のプチ修理---

 震災の前にDIYで実家に建てた工房(12畳)ですが、外壁
 の痛みが進んできました。
 特に、日の当たる東側が激しいです。

 

 外壁は節約のため野路板を使って、テーブルソーで
 ラベッティング加工して、外壁にしました。
 はじめからラベテッィング加工してあるのは、確か、3倍以上
 の値段がしてたと思います。ただ、安かった分なのか、
 木材自体がまだ生乾きで、テーブルソーで、加工しているとき
 もダドカッターにしめった切りくずがこびりつきました。
 そのままぴったりの間隔で外壁として組み合わせたので、
 そのまま乾いて、かなり収縮して、隙間が大きくできた所
 もでてきました。

 

 野路板の下には、一応防水紙がはってあるので、直接は
 雨水はかからないと思いますが・・・・・・。
 収縮したために、所々浮いている場所が見られましたので、
 プチ修理ということで、ステンレスのビスでとめ直しました。
 キシラデコートも薄くなってきたので、そのうち再塗装するよう
 かなと思います。