Profileyoukey spacesBlogLists Tools Help

Blog


    April 20

    ホームページを作る(Excel)

     ここに書き込むのは何年ぶりでしょう? なんとか細々と生きていました(w
     
     さて、今回はブログっぽいホームページをExcelマクロで作成してみたのでご紹介します。
     実物はここです ⇒ http://youkeyspace.com/
      ・「ROOM」ごとにシートを用意(「あれこれROOM」「紅茶ROOM」「映画ROOM」の3シート)
      ・各ROOM(シート)は表形式で入力(フィールドは「タイトル」「内容」「更新日」の3つででOK)
      ・各ROOM(シート)ごとに1クリックでHTMLファイルを作成できるし、
       全ページのHTMLファイルを1クリックで作成することもできる
      ・cssは別途用意
     HTMLがわかればとても簡単にできます。
     cssは別に用意するので、デザイン(色、ヘッダー部画像など)の変更は簡単です。
     各ページはマクロでテーブルを作成(<table>タグ)しているので、この形式の変更は
    無理ですが、サイズはcssで変更可能です。
     
    そのうち少しずつマクロをご紹介していけたらと思います。 
     
    追伸:
    [amazon.co.jp で買う]ボタンを表示させたくないのですが、方法がわかりませんでした。
     
    October 14

    マクロを複数のブックで共有する(Excel)

     
    久しぶりに覚書です。
     
    あるExcelのマクロ(VBA)をつくったのですが、毎回新しいデータ(Excelのブック)が
    送られてくるので、その都度マクロをコピー&ペーストしていました。
    でもこれは非効率。そこで、ひとつのマクロを複数のブックで共有する方法を調べ
    ました。
     
    ■方法
     『個人用マクロブック』にマクロを保存します。
     個人用マクロブックの名前は『PERSONAL.XLS』でした。 
     
    ■個人用マクロブックの作り方
     [ツール]メニューの[マクロ]の[新しいマクロの記録]を選択して、表示したダイアログ
     の「マクロの保存先」に『個人用マクロブック』を指定します。
     その後[OK]ボタンをクリックしてマクロの記録を開始し、何もせずに記録を終了します。
     
     注意:
     [ツール]メニューの[マクロ]の[マクロ]を選択して表示する「マクロ」ダイアログでは
     『個人用マクロブック』は指定できません。
     
    ■個人用マクロブックにマクロを追加する
     『個人用マクロブック』は最初は非表示になっているので、[ウインドウ]メニューの
     [再表示]を選択して表示させます。
     その後、[ツール]メニューの[マクロ]の[マクロ]を選択して編集します。
     
     
     個人用マクロブックのシートに参照用の定数データを追加したのですが、
    再び「表示しない」設定にしておかないと、Excelブックを開くたびに表示されて
    わずらわしかったです(苦笑)
    ちなみに、個人用マクロブックはこの↓フォルダにありました。
    C:\Documents and Settings\xxx\Application Data\Microsoft\Excel\XLSTART
    スタート時に読み込まれるファイルはここに置けばいいのかな?
     
     
     
    May 09

    再びVBA

    ここ数ヶ月で身辺の状況が激変してしまいました。
    これからはVBAを触る機会が増えそうです。
    また面白いマクロを作ったらご紹介します。
     
    February 10

    Excelでカレンダ(VBA)

    多くの人は、仕事でスケジュールを書くときに何を使っているのでしょう?
    Microsoft Project とかかな?
    わたしはラフスケッチはExcelにカレンダを書いてやっているのですが、
    カレンダを手入力するのは面倒。そこでカレンダを挿入するマクロを
    作ってみました。
     
    年月を指定して、どこかセルを選択してから[カレンダ挿入]ボタンを
    クリックすると、図のような1月分のカレンダを挿入します。
    簡単なコード(VBA)でできます。うるう年などの難しい計算も必要
    ありません。
     
    <<2006.2.13追加>>
    お待たせしました。コードをご紹介します。
    エラー処理とかしてないので、適当に追加してください。
    コードが変でも怒らないでね。
    年月を指定するところはリストにしてます。
     
    ----------
    Private Sub cmdButton_Click()
        Dim strYear As String
        Dim strMon As String
        Dim week As Variant
        week = Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat")
        Dim nFontColor As Integer
        Dim nCnt As Integer
        Dim cel As Range
        Dim nline_cnt As Integer
            
        '指定された年月
        strYear = Cells(2, 2)
        strMon = Cells(2, 4)
       
        '1~3行目には出力できない
        If 4 > ActiveCell.Row Then
            MsgBox "1行目から3行目までには出力できません。" & vbCrLf & _
                   "出力する先頭のセルを選択後、ボタンをクリックしてください。", vbExclamation + vbOKOnly
            Exit Sub
        End If
       
       
        '月を出力
        Set cel = Cells(ActiveCell.Row, (ActiveCell.Column) + nCnt)
        cel = CStr(strMon)
        Set cel = Range(Cells(ActiveCell.Row, (ActiveCell.Column) + nCnt), Cells(ActiveCell.Row, (ActiveCell.Column) + nCnt + 6))
        cel.Interior.ColorIndex = 17
        cel.MergeCells = True
        cel.HorizontalAlignment = xlCenter
     
        '曜日を出力
       
    For nCnt = 0 To 6
            Set cel = Cells(ActiveCell.Row + 1, (ActiveCell.Column) + nCnt)
            cel = week(nCnt)
            cel.Interior.ColorIndex = 15
        Next
        
        '日付出力
        nline_cnt = 2
        For nCnt = 1 To 31
            '曜日を取得する
            On Error Resume Next
            Err = 0
            this_date = Weekday(strYear & "/" & strMon & "/" & CStr(nCnt))
            If Err <> 0 Then
                Exit Sub
            End If
      
            '曜日の色
            Select Case this_date
                Case 1: '日曜日
                    nFontColor = 3
                    nline_cnt = nline_cnt + 1
                Case 7: '土曜日
                    nFontColor = 5
                Case Else
                    nFontColor = 1
            End Select
      
            '日を出力する
           
    Set cel = Cells((ActiveCell.Row) + nline_cnt, (ActiveCell.Column) + this_date - 1)
            cel = nCnt
            cel.Font.ColorIndex = nFontColor
       Next
      
    End Sub
     
    ----------
     
    February 02

    この改行コードが…

    Webブラウザで表示している一覧のデータをCSV形式でファイルに
    出力する機能があるのですが、どうもある一覧だけ先頭に改行コード
    が入ります。一体これは・・・?
     
    【原因】
     インクルードしているPHPのファイルの最終行に改行コードが
     入っているのが原因のようです。次のような感じ。
       ----------
       ?>
            ←ここに改行がある
       [EOF]
       ----------
     
    【対処】
     改行コードを削除しました。これだけで直りました。
       ----------
       ?>
       [EOF]
       ----------
       
     
    【コメント】
     結構繊細なものなのですね。
     
    February 01

    ブラウザのエディタを変更する

    久しぶりの覚書です。
     
    Webブラウザの[表示]→[ソース]メニューを選択したときに開くエディタを
    変更する方法です。
     
    レジストリの次の部分を書き換えます。
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\View Source
    Editor\
    Editor Name
     
    このキーの既定値のデータを変更します。
     
    何もしないとメモ帳が開くんですよね。
    ちなみに会社ではTera Padを使っています。
     
    January 02

    PHPスクリプトの暗号化ツール(ionCube PHP Encoder)

    何気なく昨年書いたブログを見ていたら、書き忘れがある
    ことに気づきました。
    PHPの暗号がツール、結局『ionCube』を購入しました。
    使い方がとてもわかりやすかったのと値段が決め手かな?
    暗号化したものはWindowsでもLinuxでも問題なく動作
    しました。
     
    以下、覚書です。
    ■====================================================■
     ionCube PHP Encoder (ionCube Ltd.)
       http://www.ioncube.jp/
    ■====================================================■
    【価  格】
      Professional Edition     62,800 円から
      Cerberus Edition       83,800 円から
    【実行環境】
      ionCube Loader が必要。(無償)
    【メ  モ】
      日本ではアシアル株式会社がionCubeのパートナーに
      なっており、日本語でのサポートをしてくれます。
      http://www.asial.co.jp/products/ioncube/
     
    そのほかには次のツールもありました。
    ■====================================================■
     Zend Encoder 3.5 日本語版 (ゼンド・ジャパン株式会社)
      http://www.zend.co.jp/products/encoder/
    ■====================================================■
    【価  格】
      プロダクト         400,000 円
      年間保守アップグレード    80,000 円
      メジャーバージョンアップ(製品価格の50%)
    【実行環境】
      Zend Optimizer が必要。(無償)
    【メ  モ】
      PHP のスクリプトエンジン Zend Engine の
      開発メンバがZend社を創設しています。

    November 10

    HTMLエンティティから通常の文字列に変換する

    HTMLエンティティから通常の文字列に変換する関数はありません。
    でも、関数の組み合わせでできるそうです。
    PHPのマニュアルにありました。

    function unhtmlentities ($string) {
       $trans_tbl =get_html_translation_table (HTML_ENTITIES );
       $trans_tbl =array_flip ($trans_tbl );
       return strtr ($string ,$trans_tbl );
    }
    November 08

    MySQLの誤検索

    MySQLは日本語の検索で誤検索するんですね。
    聞いたところによると有名な話だとか。
     
    「一」を検索すると「三」がヒットするし、
    「高知」を検索すると「香川」がヒットするし。
     
    他にもありそうですね。
    これは仕方がないのでしょうか。
    MySQLの仕様ということで済ませてしまおうかな。。
    October 30

    phpDocumentorを使ってみました

    PHPで書いたプログラムのドキュメントが簡単に作れないかな?
    と思って検索してヒットしたのがphpDocumentorでした。
    早速ダウンロードして使ってみました。
    結構簡単に使えるんですね。ただひとつ問題が・・・。
     
    【困ったこと】
    クォートがエスケープされちゃって、ソースコードで最初に現れた
    シングル/ダブルクォーテーション以降すべて文字列になってしまい
    ました。
     例:
      <ソースファイル>
       var $event_handlers = array(
           'docblock' => 'handleDocBlock',
           'page' => 'handlePage',
           'class' => 'handleClass',
              :
     
      <phpDocumentor>
       var $event_handlers = array(
           'docblock\' => \'handleDocBlock\', 
               :
       ※ docblock の先頭についてる「' 」以降全部文字列リテラル
         として扱われる。
     
     
    【原因】
     php.ini の マジッククォートの設定(magic_quotes_runtime)が
     on になっていた。

      magic_quotes_runtime = On

     この設定が on の場合、データベースおよびテクストファイル
     を含む外部ソースから データを返す全ての関数のクオートは、
     バックスラッシュで エスケープされます。

    【対処方法】
     php.ini のマジッククォートの設定を off にする。

      magic_quotes_runtime = Off


    以前、ある「PHP暗号化ツール」のお試し版を使用して同様の
    現象が発生したことがあるんだけど、原因は同じかも。
     
    October 20

    PHPカバレッジツール(Xdebug )-つづき

    Xdebugのカバレッジ測定用の関数を使っても、何行目を何回実行
    したかしかわからないんですよね。しかも実行されなかった行はわから
    ない。
    そこでまた何かいいものを探していたのですが、Eclipseのプラグインで
    PHPファイルのコード行、空白行、コメント行の行数を算出してくれる
    ものを見つけました(提供してくださっている方には大変感謝です)。
     
    Xdebugとこのプラグインを組み合わせると、実行されなかったコード行
    の数が簡単に(?)わかります。厳密なカバレッジとは言えませんが、
    100%でないものだけ確認すればいいので助かります。
     
    Eclipseのプラグインを作れたら面白いかも。なんて。
    October 17

    PHPカバレッジツール(Xdebug )

    PHP4用のツールを調べたのですが、これは使えるかな?
     

      PHPのデバッグ用ソフトウェア。
      カバレッジ用の関数を使うと、ソースファイルの何行目
      を何回通ったかがわかります。ただし、通らない行は
      結果として出力されません。
      そのまま使うのは難しいかも?
     
    【ライセンス】
      The Xdebug License, version 1.01
      (Based on "The PHP License", version 3.0)
      http://www.xdebug.org/license.php
    October 11

    PHP4でカバレッジは・・・

    PHP4で作ったプログラムのカバレッジを調べたいのですが、
    そんなツールはないのでしょうか・・・。
    PHP5だといくつかあるみたいなのですが。それほど違いは
    ないのでしょうか?やってみればわかるか。(ぶつぶつ)
     
    September 23

    MOT Expert

    先日MOT事務局から
    のお知らせがきていました。(一応MOT取得者なので)
     
    この資格、どのくらいニーズがあるのか気になります。
    わたしは今のところ「MOT Expert」の取得条件を満たしていない
    のですが、もしニーズがあるのなら考えてみようかな、と。
     
    MOTはWord2003Excel2003しかもっていないのですが、Access
    VBAでプログラムを書いていたこともあってわりと好きです。
    会社で発表する機会が多いのでPowerPointも使い慣れてるし、
    Outlookは毎日使ってます。
     
    しかも「経営」とか「業務改善」とか興味があったりします。
    財務諸表がわかるようになりたくて始めた簿記は、面白くなっちゃって
    独学で2級までとってしまいました。
    せっかくなので何か人の役に立つことで使えるとうれしいのですが。
     
    まぁ、プログラムをかくのも好きなんですけどね。
    September 17

    フィールドを追加する(MySQLとPostgreSQL)

    すでに運用中のWebアプリですが、ユーザ要望を反映して、フィールドを追加
    することになりました。ここで、MySQL と PostgreSQL の違いを知ることに・・・。
     
    MySQLは好きな位置にフィールドを挿入できるのですが、
    PostgreSQLは最後尾に追加することしかできないようです。
     
    【コマンド】
     MySQL    :alter table テーブル名 add 列名 データ型 first|after 列名
     PostgreSQL:alter table テーブル名 add 列名 データ型
     
    PostgreSQLの方にあわせておけば、MySQLでも使えます。
    ですので、不本意ながら(?)フィールドは最後尾に追加することにしました。
    September 15

    フィールド名の大文字/小文字

    今PHPで作ってるWebアプリは、DBはMySQLとPostgreSQLのどちらでも
    よいようにPHPLIBを使って作っています。
    ところが、MySQLだとデータを表示するのにPostgreSQLだと表示しないと
    いう問題が発生しました。
     
    【現象】
     データベースからデータを取得するコードで、MySQLだとデータが取得
     できるが、PostgreSQLだと取得できない。(日本語になってる?)
     
    【原因】
     フィールド名に大文字と小文字が混在するものがありました。
      ・MySQLはCREATE TABLE で定義したフィールド名になる
      ・PostgreSQLは常に小文字になる
     SQLでアクセスする場合は大文字と小文字の違いは無視されるので問題
     ないのですが、PHPでデータベースからデータをフェッチするときはどうやら
     大文字と小文字を区別するようです。(確信はありませんが)
     
    【対策】
     プログラム中でMySQLとPostgreSQLのどちらを使っているかを判断して
     フィールド名を切り替えるようにしました。
     例:こんな感じかな↓
       if (MySQLの場合) {
          $field_name = "FieldA";
       }
       else if (PostgreSQLの場合) {
           $field_name = "fielda"; 
          }
           else {
          $field_name = "FieldA";
          }        
     
     
    フィールド名は大文字と小文字が混在しないようにしましょう。なーんて。 
    まだまだわからないことが多いです。。
    以上、覚書でした。
    September 08

    text型の数値の並べ替え

    覚書です。
    text型のフィールドに数値を入力して昇順で並べ替えると 
      1 → 11 → 2 → 20 → 3
    となっちゃうんですよね。
    そんなとき、CASTを使うと数値順に並べ替えられます。
     
     サンプル: ORDER BY  CAST(id AS UNSIGNED);
     
    ただ、MySQLとPostgreSQLでは指定できる型が異なるようです。
    <<MySQL>>
     BINARY
     CHAR
     DATE
     DATETIME
     SIGNED {INTEGER}
     TIME
     UNSIGNED {INTEGER}

    <<PostgreSQL>>
     int4 など

    【注意】
     PostgreSQLでは、""をintegerにキャストするとエラーになります。
     (キャストするフィールドに値がはいっていなければエラーになります)
      メッセージ:Invalid syntax input integer: ""
    【参考】
     ここ↓を参考にさせていただきました。
    September 06

    次の記事について :MySQL と Postgres の文の違い

    以前覚書で書いたものですが、今日、別のことを調べてて

    PostgreSQL との互換性を確保するため、MySQL では LIMIT row_count OFFSET
    offset 構文もサポートしている。

    というのを知りました。ちょっとショック。。

    ここ↓を拝見しました。

    http://www.hostgeekz.com/docs/mysql/japanese/manual.ja_Reference.html

     

     元の記事からの引用

    MySQL と Postgres の文の違い

    今、『PHP+MySQL』で動作するシステムの「MySQL」を「Postgres」に変えるという作業をしています (というか、両方に対応できるように改訂しています)。 その作業中に気付いたことをメモしていきます。

    1.LIMIT
     MySQLとPostgresでは少し書き方が違います。
      [MySQL  ] LIMIT start, count
      [Postgres] LIMIT count  OFFSET start
    例えば、先頭から3レコードだけを取り出したい場合は次のようになります。
      [MySQL  ] SELECT * FROM table LIMIT 0,3;
      [Postgres] SELECT * FROM table LIMIT 3 OFFSET 0;

    2.GROUP BY
     MySQLでは「非表示のフィールドに対する GROUP BY」ができます。これはMySQLの拡張機能であって、標準SQLにはありません。
    例えば、code というフィールドでグループ化する場合は次のように書けます。
      [MySQL  ] SELECT * FROM table GROUP BY code;   ←PostgresではNG
      [Postgres] SELECT code FROM table GROUP BY code;

    3.GRANT
     MySQLでは、テーブルすべてを対象にできるようですが、Postgresではテーブルをひとつずつ指定しなければならないようです。(やり方を知らないだけかも...)
      [MySQL  ] 
    GRALT ALL PRIVILEGES ON *.* to db_user@localhost IDENTIFIED BY 'password';
      [Postgres] GRANT ALL ON table TO db_user;

    なるべく拡張機能を使わないようにしたいものです。

    September 04

    どこまでが個人情報?

    遅ればせながら、会社で個人情報保護法の関係で、各社員が持っている
    個人情報を報告することになりました。
    個人情報ってどこまで書いてあると該当するのでしょう?
    個人を特定できるものということで、表彰状までリストアップされていたけど
    (表彰状には 会社、部署、名前 が記載されているからって)。
    メールに署名があるとこれも該当するらしい。
     
    思ったよりたくさん該当するものがあるんですね。
    世の中悪い人がいなければ、こんなことしなくてもいいのかな?なんて。
     
    August 27

    破損したテーブルの修復(active_sessionsのとき)

    覚書の続きです。
    active_sessionsテーブルは、repair table では修復できないと
    連絡がありました。こうなったら最後の手段・・・?
     
     
    【現象】
     Webブラウザでシステムにアクセスするとエラーメッセージが出る。
     
      ・MySQL Error: 1034 (Incorrect key file for table: 'active_sessions'. Try to repair it) Session halted.
      ・MySQL Error: 1016 (Can't open file: 'active_sessions.MYD'. (errno: 145))
    Session halted.
     
    【原因】
     これ↓です。

     
    【修復方法】
     ■ 手順とコマンド
      (1)データの保存先 data\mydb にある3つのファイルの名前を変更します。
          active_sessions.frm
          active_sessions.MYD
          active_sessions.MYI
      (2)MySQLを起動して、データベースを指定します。
          C:\>mysql -u root -p
          Enter password: **** 
      (3)active_sessionsテーブルを作成し直します。
          mysql> CREATE TABLE active_sessions (
               ->    sid varchar(32) DEFAULT '' NOT NULL,
                   ---(省略)---
                );

    【ひと言】
     テーブルを一部だけ置き換えるのはどうかな?と思ったのですが、
     セッション管理用のテーブルだから問題ないと思って。
     まあ、問題なく動いてるとのことだからよしとしてください。