ChaichanPapa-World !

燈明日記(2006/10

◆ インデックス

◆ 2006年6月〜10月

■ 2006-10-31 授業参観&自殺シンポジウム 23:03

先日、まちゃ(小6:三男)の授業参観に行ってきました。

ちょうど、社会科の授業をしていて、『幕末から維新にかけて変わったこと』をやっていました。

乗り物、建物、着る物、食べる物いろいろ変わっています。

意外だったのは、牛肉が明治時代から食用されたこと、逆に言うと江戸時代までは、牛肉を食べていなかったのですね。

とまぁ、クラスは意気揚揚としていて、大変良い感じでした。


先日の次の日は、自殺のシンポジウムに参加してきました。

ちょうど、岐阜の女子中学生の自殺したニュースが飛び込んできた日でした。

自殺は心の問題だけでなく、自殺者を取り巻く環境や社会の影響が大きいとのことでした。

法整備等、国レベルで対策が必要とのことで、徐々にそのような流れになってきているとのことでした。

しかし、岐阜の女子中学生の校長の保身の会見は腹が立つ。

この校長を見ていると、起こるべくして起きた感じがしました。

■ 2006-10-31 ftpコマンドでローカル側のファイル一覧を見るには 23:03

コマンドプロンプトからftpコマンドでftpサーバーへログインした時に、ログイン先のフォルダのファイル一覧は以下で見れます。

ftp> dir

しかし、ftpコマンドには、自分のPCのローカルなフォルダのファイル一覧を見るコマンドはありません。

では、どうやって見るかと言うと、dosコマンドのdirを使用します。

ftp> !dir

『!』で、dosシェルが起動され、dosコマンドのdirが実行できるようになるのです。

つまり、ftpコマンドのdirはサーバーのフォルダファイル一覧で、dosコマンドのdirはローカルのフォルダファイル一覧。

■ 2006-10-30 バッチでftp(ファイル転送)するには 20:28

バッチでftp(ファイル転送)するには、まず、以下のような、手入力時と同じFTPコマンドが記述されているテキストファイル(ftpcmd.ftp)を用意します。

次に、ftpコマンドで-iオプションと-sオプションを指定したバッチファイル(ftpcmd.bat)を用意します。

そして、コマンドプロンプトからftpcmd.batを実行すると、インタラクティブでなく、バッチでftpができます。

ちなみに、-iオプションは、対話型プロンプトを非表示にします。

ftpcmd.ftp
open 172.xxx.yyy.zzz
ログオンID
パスワード
asc
mput *.txt
bin
mput *.xls
disconnect
bye
ftpcmd.bat
ftp -i -s:ftpcmd.ftp

参考 http://chaichan.lolipop.jp/src/howtoftp.htm

ちなみに、ftpコマンドでは、フォルダ単位のファイル転送は、できません。その場合は、ftpコマンドのmkdirでフォルダを作成して、cdしてから、mput等でファイル転送をします。

■ 2006-10-29 常用漢字の字数制限と字形変更 09:35

戦後、わが国は、誤った方向をもって国語政策が出発した。

それは、漢字をわずか1850字で限られた音訓の当用漢字にして、

その後、1981年に約100字を増やした1945字の常用漢字である。

しかも、字形をなんら理由もなく変更していることである。

つまり、以下の2つである。

  1. 漢字の字数の制限。
  2. 漢字の字形の変更。

1は、言葉の規制や伝統的な文化の断絶に繋がることは容易に予測ができたことである。

2は、3300年前に意味があって出来上がった字形を、その意味を無視して字形に変更を加え、字形本来の意味を表現できなくしてしまったのである。

たとえば、器、臭、類、戻の字形要素『大』は、本来『犬』であった。

しかし、就、伏の字形要素『犬』は、『大』にならず、なぜかそのまま。

ということで、漢字の字源を勉強するときは、当用漢字以前の字形を元に勉強します。

■ 2006-10-29 osqlを使ってバッチファイルからSQLを発行する 09:35

前回、bcpをご紹介しましたが、今回はosqlを紹介します。

通常、SQL発行は、インタラクティブにはクエリアナライザやエンタープライズマネジャを使います。まず、コマンドプロンプトからosqlを使う人はあまりいないと思います。しかし、バッチの時は、osqlかisqlかbcpを使うしかないですね。

ちなみに、isqlは、機能が制限されているとのことで、osqlの使用が推奨(2000では)されているとのことです。しかし、SQLサーバーの最新バージョン2005では、どちらもNGで、sqlcmdが推奨されているとのことです。今回は、あくまでosqlです。

まず、SQLファイル(test01.sql)とバッチファイル(test01.bat)を用意します。test01.bat実行後、その結果がtest01.txtに出力されます。以下が、そのソースと説明です。

test01.sql
 -- select EmployeeID, FirstName, LastName from Employees
select * from Customers
go
説明

--は、コメント。ちなみに/*〜〜*/で複数行をコメントにできる。

goは、sqlの実行(入力したすべてのステートメントを実行)。

test01.bat
 @echo off
osql -E -S localhost -d Northwind -i test01.sql -o test01.txt -n -w 400 -s "," -h-1
説明
参考リンク

■ 2006-10-28 WHERE句とHAVING句の違い 20:49

SQLでのWHERE句とHAVING句は、どちらも、入力行を絞ります。では、違いは何でしょうか……。


WHERE句は、グループ化や集約を演算する前に入力行を絞ります。

一方、HAVING句 は、グループと集約を演算した後に、グループ化された行を絞ります。


従って、WHERE句は集約前に評価されるので集約関数を持つことはできません。一方、HAVING 句は、集約後に評価されるので集約関数を持つことができます。


つまり、はじめにWHERE句で行を絞り、それをGROUP BY句でグループ化し、それを(グループ内を)HAVING句でまた絞る・・・てな感じです。


ちなみに、GROUP BY句とHAVING句はペアで使うものと思っている人がいるかもしれませんが(実は自分)……。実は、テーブル全体を一つの集合として、GROUP BY句なしで、HAVING句を問題なく使用することができます。

■ 2006-10-27 訓と音 21:11

ご存知にように漢字の読みは、訓読みと音読みがあります。

そして、音読みは、『行』の(呉音:ギョウ)(漢音:コウ)(唐音:アン)の3通りあります。

  1. 呉音 - 5・6世紀ごろ朝鮮半島をへて日本へ伝わってきた音。仏教に関係する言葉が多い。
  2. 漢音 - 8・9世紀ごろ国の使いや留学生達によって伝えられた。音読みとしては、一番多い。
  3. 唐音 - 12・3世紀ごろ僧や商人によって伝わった。しかし、あまり広まらなかった。

そう言えば、中国の人と一緒に仕事をしたときに、日本語の漢字の文は、結構、意味が分かると言っていました。まぁ、ルーツは同じなので当然と言えばそうだけど、ちょっと驚き…。

■ 2006-10-27 手続き型言語とSQLの違い 21:11

まず、前フリです。最近はオブジェクト指向言語が流行りですが、オブジェクト指向言語は、プログラミングする発想がオブジェクト指向であって、実際にプログラミングする時は、手続き型言語となんら変わらないので、今回は、オブジェクト指向言語も手続き型言語に含めます。(もしかしたら、とんでもないこと言っているかも)


それでは、本題です。手続き型言語は、問題解決の処理結果を得るために、その手続きを変数やインデックスを常に意識しながら上から下へと一次元的に記述していきます。


しかし、SQLは、手続きや変数、インデックス等を全く意識しないで、2次元的な発想でそれをSQL文法に結びつけて記述します。逆に言うと、SQLは、2次元的な発想さえ出来れば、手続きや変数等を全く意識しないで、処理結果を得ることができるという便利な言語なのです。


では、2次元的な発想とは何かというと、表に対してを行単位に一行づつ処理するような一次元的な発想でなく、表全体に対して2次元的に発想するのです。具体的には、WHERE句で行を絞り、それをGROUP BY句でグループ化し、それを(グループ内を)HAVING句でまた絞る・・・。そう、どこにも手続きや変数は出てこないのです。これらは、SQL実装内部で多分やってくれているのです。


つまり、2次元的な発想をSQL文法に結びつけるだけで、問題解決の処理結果を得ることが出来るわけです。しかし、結びつけるのが、結構、難しかったりするわけですが……。

■ 2006-10-26 ERRORLEVEL比較時の注意点 21:36

通常、FINDコマンドは、指定された文字列が見つからない時は、ERRORLEVELに1を返し、見つかったときは、0を返します。ですので、以下のNGのソースは、一見正しいように思えます。しかし、実際に実行すると、文字列が見つからない時でもARUになってしまうのです。

これは、ERRORLEVELの判定が、実は、『=』(イコール)ではなく、『>=』(以上)なので、そうなってしまうのです。結構、これに泣かされた人がいるのでは…(実は自分)。

回避策は、判定が『>=』なので、IF文の処理順をERRORLEVELの大きい方からにすればOKです。

NG
FIND "AAA" test01.txt
IF ERRORLEVEL 0 GOTO ARU
IF ERRORLEVEL 1 GOTO NAI
:NAI
echo NAI
GOTO END
:ARU
echo ARU 
GOTO END
:END
OK
FIND "AAA" test01.txt
IF ERRORLEVEL 1 GOTO NAI
IF ERRORLEVEL 0 GOTO ARU
:NAI
echo NAI
GOTO END
:ARU
echo ARU 
GOTO END
:END

■ 2006-10-25 説文解字とは 22:16

説文解字とは、後漢(西暦25年-220年)の許慎(キョシン)が篆文、籀文、古文等の字形の部首をもとに漢字を説明した研究書です。

しかし、後漢の時代には、まだ、甲骨文字と金文が発見されておらず、ある意味、補助を元にしてしまった研究書なので、字形解釈には誤りが多い。

それでも、その後(甲骨文字と金文が発見されても)の字形の研究書も含めて、説文解字に四敵するものがなく、すごい研究書なのです。

説文解字では、漢字の構成法を六書(りくしょ)として説明されている。

  1. 象形 - ものの形をかたどった字(牛、川、山、木、馬、日・・・)
  2. 指示 - 点や線などの印で表した字(一、二、上、下・・・)
  3. 会意 - 象形と指示を組み合わせた字(男、鳴、岩、明・・・)
  4. 形声 - 意味を表す部分と発音を表す部分を組み合わせた字(晴、汁、拍、請、姓、祉・・・)
  5. 転注 - 同意相承く(はっきりいって、よくわからない)
  6. 仮借 - 字形として表しがたいものを、同じ音の別の字の音のみを借りてあらわすこと(東、西、南、北…)

まだまだ、つづきます。

■ 2006-10-25 VBAでグラフを表示する 22:16

EXCELでグラフを表示して見ましょう。

F3:J6にグラフのデータソースがあるとして、A1:D10にグラフを表示します。

以下は、そのサンプルです。

サンプル
    Range("F3").Value = "行列タイトル"
    Range("F4").Value = "行タイトル1"
    Range("F5").Value = "行タイトル2"
    Range("F6").Value = "行タイトル3"
    Range("G3").Value = "列タイトル1"
    Range("G4").Value = 2
    Range("G5").Value = 3
    Range("G6").Value = 4
    Range("H3").Value = "列タイトル2"
    Range("H4").Value = 2
    Range("H5").Value = 3
    Range("H6").Value = 4
    Range("I3").Value = "列タイトル3"
    Range("I4").Value = 2
    Range("I5").Value = 3
    Range("I6").Value = 4
    Range("J3").Value = "列タイトル4"
    Range("J4").Value = 2
    Range("J5").Value = 3
    Range("J6").Value = 4

    'グラフの表示位置を確定する。
    Dim ranPosi As Range
    Set ranPosi = Range("A1:D10") '*1
    
    'グラフの表示する。
    With ActiveSheet.ChartObjects.Add(Left:=ranPosi.Left, Top:=ranPosi.Top, _
                     Width:=ranPosi.Width, Height:=ranPosi.Height) '*2
         .Chart.ChartType = xlColumnStacked '*3
         .Chart.SetSourceData Source:=ActiveSheet.Range("F3:J6"), PlotBy:=xlRows ' *4
         .Chart.Location where:=xlLocationAsObject, Name:="Sheet1" '*5
         .Name = "グラフ01" '*6
    End With

   '表示したグラフの縦方向の軸名を設定する。
    ActiveSheet.ChartObjects("グラフ01").Activate '*7
    ActiveChart.ChartArea.Select '*8
    With ActiveChart
        .Axes(xlValue, xlPrimary).HasTitle = True '*9
        .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "台数" '*10
    End With
説明
参考リンク

Chartの操作−チャートのタイトルと数値軸や項目軸のタイトル

埋め込みグラフをアクティブワークシートに作成する

新しいグラフを作成する(Addメソッド)

データ範囲を設定する(SetSourceDataメソッド)

グラフの場所を設定する(Locationメソッド)

グラフの種類を設定する(ChartTypeプロパティ)

軸ラベルを設定する

グラフ操作関連のテクニック

■ 2006-10-24 漢字の歴史 22:50

突然ですが、法華経ノートとVB-TIPSが一段落したので、この度、

新たなテーマ、『漢字の字解』の勉強をスタートさせます。

まずは、漢字の歴史から・・・。


漢字が生まれたのは、今から三千三百年前(約紀元前1300年)の中国、殷王朝の時代であったとされています。

殷王の墓室から亀甲と獣骨が丁重に埋められているのが発見されました。


亀甲は、亀の腹の甲で、獣骨は主に牛の肩胛骨で、そこには占いに関する字が刻み込まれていました。

これを、甲骨文字といい。この甲骨文字が、最古の文字であり、漢字の最初の形でありました。


また、殷王のお妃の墓からは、多数の青銅器が出土し、そこには、作器に由来をしるす銘文が鋳込まれていました。

これを、金文といい。甲骨文字とともに、象形の字が多く、当時の生活や文化のあり方が記された形になっていたのです。


ということで、甲骨文字と金文が漢字の成り立ちを知る基本となるのです。


つぎに、紀元前770年〜403年なると漢字の統一性が失われ、繁雑な字形と簡略な字形の差も著しくなって、

繁雑な文字を籀文(チュウブン)云い、簡略かされた文字を古文(六国古文)と呼ばれました。

しかし、秦は天下を統一すると、文字も古文を廃止し秦の篆文(テンブン)で統一します。


ということで、篆文、籀文、古文は、漢字の成り立ちを知る補助となるのです。


尚、本内容は、『常用字解』著者:白川静(平凡社)を大変参考にしています。

■ 2006-10-24 SQLを速くするための小技 22:50

以下のリンク、『SQLを速くするぞ』を読んでのメモです。

http://www.geocities.jp/mickindex/database/db_optimize.html


全15項目あり、上記のデットリンクや忘れないため、ここにメモしときます。

項目1:サブクエリを引数に取る場合、IN述語よりもEXISTS述語を使う。

理由1:IN述語の全表走査よりも、EXISTS述語の方が効率的に検索。


項目2:BETWEENを使う。

理由2:指定された範囲のインデックスのノードを1回の操作で比較することができる。


項目3:IN 述語の引数リストには、最もありそうなキーを左寄せする

理由3:左から右へ引数を評価するから。


項目4:EXISTS述語のサブクエリ内では、SELECT * を使う。

理由4:オプティマイザにインデックスが張られている列を使うべきかの選択を委ねられる。


項目5:3つ以上のテーブルを結合させる時は冗長な結合条件を書く。

理由5:テーブルのサイズが変わっても大丈夫なように。


項目6:行数を数えるときは COUNT(*) よりも COUNT(列名) を使う。

理由6:ただし、COUNT 関数の引数となる列にインデックスが張られている場合。


項目7:WHERE 句の抽出条件は、最も制限の強いものから並べる。

理由7:選択される行数が少ないものから順に並べる方が、効率よく動作する。


項目8:UNION の代わりに UNION ALL を使う。

理由8:重複を気にしなくてよい場合。(UNION は重複行を排除するためのソートが発生)


項目9:実はインデックスが使用されていないというケースが多々ある。

理由9:

項目10:行ポインタによるアクセスが最速。

理由10:しかし、MS-SQL Serverはこの機能はない。


項目11:ワイルドカードは使わない。

理由11:実行時に実際の列名への読替えが発生し、オーバヘッドが増加。


項目12:列番号は使わない。

理由12:列名への読替えが発生するため。


項目13:表に別名を付ける。

理由13:解析時にどの列がどのテーブルに属するかの判定を省略できるため。


項目14:暗黙の型変換を回避する。

理由14:暗黙の型変換は一度代入に失敗した後に行なわれるため、オーバーヘッドが発生。


項目15:ビューを濫用してはいけない。

理由15:集約操作が含まれている場合、非効率的な SQLになる。

■ 2006-10-21 DOSバッチファイルでのfor文とcall文等について 20:38

複数のファイルをcopyコマンドで一つに連結し、sortコマンドでソートした後、重複行を削除したいと思い、 UNIXでのuniqコマンドに相当するものがWINDOWSでもないかと探してみました。

ちなみに、uniqコマンドとは、重複行を単一行のユニーク(uniq)にするコマンドです。


http://www.fpcu.jp/dosvcmd/bbs/log/unixdoswindows/3-0062.html


そこにDOSバッチファイルでのuniqコマンドもどき(uniq.bat)のソースがありました。しかし、たった14行のソースなのですが全く読めません(わかりません)。そこで、調べてみました。以下はそのメモです。

uniq.batのソースの引用

  1. echo off
  2. set prev=
  3. if not exist "%1" goto error
  4. for /f "tokens=* delims=" %%L in ( %1 ) do call :sub %%L
  5. goto exit
  6. :sub
  7. if not "%prev%"=="%*" set prev=%*&&echo %*
  8. goto :EOF
  9. :error
  10. echo.
  11. echo 表示したいファイル名を指定してください。
  12. echo uniq.bat file.txt
  13. echo.
  14. :exit
ソース説明
1の『echo off』

エコーオフです(そのまんま)。ちなみに、エコーオンでコマンドを実行すると、コマンド実行文そのものやその実行結果が、すべてコマンドプロンプトに出力される。エコーコマンドのみのエコー出力をしたい場合は、『echo off』にします。また、『echo off』自体もオフにしたい場合は『@echo off』とします。

2の『set prev=』

環境変数の設定です。重複を求めるために読み込んだ一行分データを格納する変数です(この段階ではなにも設定していない)。

3の『if not exist "%1" goto error』

起動時の第一引数(%1)が存在しない時は、『goto error』しています。

4の『for /f "tokens=* delims=" %%L in ( %1 ) do call :sub %%L』

第一引数(%1)で指定されたファイルから一行読み込んで変数『%%L』にセットし、別プロセス(call)でサブルーチン『sub』を、引数に『%%L』の値をセットして呼んでいます。これを、ファイルのすべての行に対して繰り返『for』します。

for文に関して詳しい説明は、以下を参照願います。


http://forum.nifty.com/fpcu/dosvcmd/batch.htm#for


補足:『sub』は同ソース上にありますが、『call』で呼ばれたときには、呼び側プロセスと別プロセスになり、『goto :EOF』を実行後、呼び側プロセスに戻ってきます。また、『%%L』は、バッチファイル内では%%Lですが、コマンドプロンプトに直接入力の時は%Lとなります。

5の『goto exit』

『goto exit』して処理を終了しています。

6の『:sub』

サブルーチンです。別プロセスになります。

7の『if not "%prev%"=="%*" set prev=%*&&echo %*』

環境変数prevとサブルーチン全引数をまとめたもの(%*)、つまり、一行読みデータが等しくないかを判断し、もしそうなら、環境変数prevに一行読みデータ(サブルーチン全引数のまとめもの(%*))を設定しなおして、そのコマンドが成功したら(&&)、一行読みデータ(%*)をエコーする。

補足:&&は、直前のコマンドが成功したら&&以降を実行すること。また、%1〜%9は、引数の個数分に対応しており、%*は、それをすべてまとめたもの。

8の『goto :EOF』

WindowsNT/2000/XPでは、あらかじめ暗黙に定義された「ファイル末尾」を意味するラベル 『:EOF』 が利用できる。

9から14

割愛、ちなにみ『echo.』は、空行出力とのことです。


参考 : http://forum.nifty.com/fpcu/dosvcmd/batch.htm


uniq.bat使用例
C:\Documents and Settings\xxx>type test.txt
123456789
111111111
111111111
111111111
222222222
C:\Documents and Settings\xxx>uniq test.txt

C:\Documents and Settings\xxx>echo off
123456789
111111111
222222222

uniqコマンドを実行したことにより、111111111の行がユニークになりました。

■ 2006-10-20 ドキュメント力 22:57

日経SYSTEMS(2006.9)と云う雑誌の『開発ドキュメントの作成力』を読みました。なかなか良かったのでメモしておきます。

ドキュメント力アップのポイントは5つです!

  1. 最初に構成を考え、論理性を高める
    • 読み手の立場になって伝えるべきことを書き出す
    • 結論を頂点とした論拠を階層構造として構成する
    • 構成した階層構造の論理性を検証し要素を補う
    • そして、結論を先に書き、論拠を順に述べていく
  2. 意味のあいまいさを排除する
    • あいまいな言葉は、具体的な言葉に置き換える
    • あいまいな言葉は、具体的な説明を付け加える
    • 用語は統一する
    • かぎ括弧やダブルクォーテーションの使い方も統一する
    • 文の主格を明確にする
    • 係り受け(修飾)を明確にする
    • 指示語も具体的に指示にする
    • 「の」の同格と所有の関係を明確に表現にする
    • 「が」の逆接と順接の関係を明確に表現にする
    • 強調語は、それ以外にも意味をもつ(同レベルで強調されなかったところへ影響する)
  3. 文章と図表をバランス良く用いる
    • 文章のみより、図表があると直感的に理解しやすい
  4. レイアウトの工夫で視認性を高める
    • 見出しを強調する
    • できる限り見出し要素を抜き出す
    • 意味的なブロックで余白の切れ目を入れる
    • 意味的な階層構造でインデントを入れる
  5. 無駄取りと切れ目で、リズムを整える
    • ひらがなの羅列の無駄取り(出力するためには -> 出力するには)
    • 漢字の羅列に切れ目を入れる(販売計画立案段階 -> 販売計画を立案する段階)
    • 読点と句点を効果的に入れる(ビジネスプロセスマネジメント -> ビジネスプロセス・マネジメント)

■ 2006-10-19 仙人生活 21:47

最近、会社では一円も使わず、同僚から仙人やね、とか言われています。

お昼は、お弁当。コーヒーは、家でしか飲まず。

タバコは、もう何ヶ月も禁煙。交通費は、定期。

いつまで続くか仙人生活。少欲知足、少欲知足……。

■ 2006-10-19 SqlServer2000でのトランザクションログ切捨てについて 21:47

PC上にあるSqlServer2000データベースのデータは、実は拡張子が『.mdf』というファイルに格納されています。このファイルをデータファイルと呼びます。

一方、『.mdf』とペアで『.ldf』というファイルもあります。こちらの『.ldf』は、トランザクションログファイルと呼ばれ、トランザクションの履歴が格納されています。トランザクションログは、ロールバックや障害時のデータ復旧に利用されます。

そして、システムが稼動し始めて、数ヶ月かするとディスク容量がほとんどなくなってしまうことに気がつきます。すると、えらく大きくなったトランザクションログファイルに遭遇することになるのです。

そう、トランザクションログファイルは、復旧モデルがシンプル以外ではディスクのある分、どんどん増え続けるのです。したがって、普段からトランザクションログファイルに対して、容量切捨て必要かの監視が必要なのです。

容量切捨ての解決策としては以下の3つです。

  1. トランザクションログファイルのバックアップを定期的に取る。すると一緒に切捨てられる。
  2. 手動切捨てコマンドを実行する。(BACKUP LOG データベース名 WITH TRUNCATE_ONLY)
  3. 復旧モデルをシンプルにする。(ただし、障害時に完全復旧ができなくなる可能性が大きくなる)

実は、上記を実行しても使用済みエリアを空エリアにするだけで、ディスク空き容量の物理サイズは、変わりません。空エリアを、物理的に削るには、『DBCC SHRINKFILE』コマンドを使用します。

■ 2006/10/19 21:45 21:47

27414

■ 2006-10-18 布施と徳積 22:40

前回、『器量と布施と徳積』をお話しましたが、今回は布施と徳積についての補足です。

布施とは、以下のように3種類あります。

貧乏で財施はできなくても、身施、法施は、出来そうですね!

つぎは、徳積です。

徳積の『徳』という字は、行ずるの行人偏に十四の心と書きます。

十四の心とは、六波羅蜜と八正道を足した数の心です。そして、十四の心を積んで行くことが徳積なのです(ウマイ)。

■ 2006-10-18 VB系の質問BBSリンク集 22:40

VB系、EXCEL系で何かわからないことがあれば、以下のBBSの住民(エキスパート)達がいろいろ教えてくれるでしょう!

■ 2006-10-17 器量と布施と徳積 20:52

人には、人格やリーダーシップ等の器量というものがあります。器量が小さいと、その人の人生も、小さなものになってしまいます。これは、大きなチャンスが来たときに、小さな器だと受け取れないから、そうなってしまうのです。

では、器を大きくするためには、どうしたらよいでしょうか?

それには、2つ。

  1. すでに入っているものを出して、器の容量を増やす。
  2. やはり、器そのものをなんとか大きくする。

1は、布施です。自分の持っているもの(財施、身施、法施)を出して人に施し、自分の器の容量を増やすのです。

2は、徳積です。仏法では、善い行いを続けて行くことを徳積と云い、これにより器が大きくなると説かれています。

つまり、普段から布施と徳積を行うことにより、器の容量が多くなり、大きなチャンスが来た時にそれを受け止められるようになるのです。また、仏法では、因縁果報の法則より、善い行いをすれば、必ず善い結果が生じると説かれています。

そう、必ず善い結果なのです。だから、もう、布施と徳積を日々実践するしかないですね。誰にともなく……。

■ 2006-10-17 VBでのDBアクセスプログラム作成参考サイト 20:52

VBでDBアクセスプログラムを組む時に、たぶん参考になると思われるサイトです。


特に以下の2つは、読んでいて非常に面白かったです。これからは、DBも深く考えないといけないな…とか思った。

■ 2006-10-16 複数の問い合わせ結果を結合ソートするSQL 22:24

たとえば、複数の表のデータを、とある項目でソートしたい場合は、以下のような感じのSQLになります。

select 番号, 更新日 from A表 
union
select 番号, 更新日 from B表
union
select 番号, 更新日 from C表
order by 更新日 DESC

複数の問い合わせ結果の結合には、unionを指定します。

このように、別表で同じような項目を一括でselectする場合にunionが便利です。

order by は、select毎ではなく、最後に一つ指定ができます。

つまり、すべてのselectしたデータにたいしてソートが可能なわけです。

ちなみに、DESCは降順でソートします。デフォルトは昇順です。

■ 2006-10-16 2006/10/16 22:26 22:24

27020

■ 2006-10-14 VBでのクイックソートについて 20:16

普通、ソートは、DBを使っている時は、まず、SQL上のOrder Byでソートし、つぎにVB上のロジックでソートし、そのつぎにEXCEL上のメソッドでソートします。

VB上でソートしたい時は、配列内の重複データ削除の前処理としてソートするとかで、それには、クイックソートがもっとも速いとされています。

クイックソートのアルゴリズムは、以下の感じです。


クイックソートのアルゴリズム
  1. まず、配列の中央付近のインデックスの内容値を基準値とします。
  2. 配列のインデックスの小さい方から基準値に向かって、基準値より大きい値を探します。
  3. 配列のインデックスの大きい方から基準値に向かって、基準値より小さい値を探します。
  4. 2と3の双方の値を交換します。 そして、2から3を繰り返すと5の状態になります。
  5. 基準値より小さな値が基準値より左に、大きな値が基準値より右にきます。
  6. つぎに、基準値の左の配列と右の配列に対して、1から4のを繰り返します。
  7. 各々配列の要素が1になるまで、上記を繰り返せば、結果的に全配列内がソートされるわけです。

クイックソートのアルゴリズム具体例
インデックス0〜8の配列内の値が下記の場合だとします。 
0 1 2 3 4 5 6 7 8 : インデックス
2 9 8 3 5 4 1 7 6 : インデックス内容値

まず、中央のインデックス4の内容値5を基準値5と表現します。 

2 9 8 3 5 4 1 7 6

配列のインデックスの小さい方から基準値5に向かって、基準値5より大きい値は、9です。
配列のインデックスの大きい方から基準値5に向かって、基準値5より小さい値は、1です。
ですので9と1を交換します。すると配列内は以下の状態になります。

2 1 8 3 5 4 9 7 6

引き続き、
配列のインデックスの小さい方から基準値5に向かって、基準値5より大きい値は、8です。
配列のインデックスの大きい方から基準値5に向かって、基準値5より小さい値は、4です。
ですので8と4を交換します。すると配列内は以下の状態になり、基準値5より小さい値が左に、大きい値が右にきます。

2 1 4 3 5 8 9 7 6

配列のインデックスの小さい方から基準値5に向かっていくと基準値5より大きい値は、ありません。
配列のインデックスの大きい方から基準値5に向かっていくと基準値5より小さい値は、ありません。
基準値5は確定しました。

2 1 4 3 5 8 9 7 6
    1 <---------確定サイン

つぎに、基準値5より左の部分(2 1 4 3)を同じようにソートします。
基準値を1とします。
配列のインデックスの小さい方から基準値1に向かって、基準値1より大きい値は、2です。
配列のインデックスの大きい方から基準値1に向かって、基準値1より小さい値は、ありません。
このときは、2と基準値1を交換します。

1 2 4 3 5 8 9 7 6
     1 

配列のインデックスの小さい方から基準値1に向かっていくと基準値1より大きい値は、ありません。
配列のインデックスの大きい方から基準値1に向かっていくと基準値1より小さい値は、ありません。
基準値1は確定しました。

1 2 4 3 5 8 9 7 6
1       1 

つぎに、基準値1より右の部分(2 4 3)を同じようにソートします。
基準値を4とします。
配列のインデックスの小さい方から基準値4に向かって、基準値4より大きい値は、ありません。
配列のインデックスの大きい方から基準値4に向かって、基準値4より小さい値は、3です。
このときは、基準値4と3を交換します。

1 2 3 4 5 8 9 7 6
1       1 

配列のインデックスの小さい方から基準値4に向かっていくと基準値4より大きい値は、ありません。
配列のインデックスの大きい方から基準値4に向かっていくと基準値4より小さい値は、ありません。
基準値4は確定しました。

1 2 3 4 5 8 9 7 6
1     1 1 

つぎに、基準値4より左の部分(2 3)を同じようにソートします。
基準値を2とします。
配列のインデックスの小さい方から基準値2に向かっていくと基準値2より大きい値は、ありません。
配列のインデックスの大きい方から基準値2に向かっていくと基準値2より小さい値は、ありません。
基準値2は確定しました。また、配列の要素が一つになってしまったので3も確定です。

1 2 3 4 5 8 9 7 6
1 1 1 1 1 

つぎに、先の基準値5より右の部分(8 9 7 6)を同じようにソートします。
基準値を9とします。
配列のインデックスの小さい方から基準値9に向かって、基準値9より大きい値は、ありません。
配列のインデックスの大きい方から基準値9に向かって、基準値9より小さい値は、6です。
このときは、基準値9と6を交換します。

1 2 3 4 5 8 6 7 9
1 1 1 1 1       

配列のインデックスの小さい方から基準値9に向かっていくと基準値9より大きい値は、ありません。
配列のインデックスの大きい方から基準値9に向かっていくと基準値9より小さい値は、ありません。
基準値9は確定しました。

1 2 3 4 5 8 6 7 9
1 1 1 1 1       1 

つぎに、基準値9より左の部分(8 6 7)を同じようにソートします。
基準値を6とします
配列のインデックスの小さい方から基準値6に向かって、基準値6より大きい値は、8です。
配列のインデックスの大きい方から基準値6に向かって、基準値6より小さい値は、ありません。
このときは、基準値6と8を交換します。

1 2 3 4 5 6 8 7 9
1 1 1 1 1       1

配列のインデックスの小さい方から基準値6に向かっていくと基準値6より大きい値は、ありません。
配列のインデックスの大きい方から基準値6に向かっていくと基準値6より小さい値は、ありません。
基準値6は確定しました。

1 2 3 4 5 6 8 7 9
1 1 1 1 1 1     1

つぎに、基準値6より右の部分(8 7)を同じようにソートします。
基準値を8とします。
配列のインデックスの小さい方から基準値に向かって、基準値より大きい値は、ありません。
配列のインデックスの大きい方から基準値に向かって、基準値より小さい値は、7です。
このときは、基準値8と7を交換します。

1 2 3 4 5 6 7 8 9
1 1 1 1 1 1     1

配列のインデックスの小さい方から基準値8に向かっていくと基準値8より大きい値は、ありません。
配列のインデックスの大きい方から基準値8に向かっていくと基準値8より小さい値は、ありません。
基準値8は確定しました。また、配列の要素が一つになってしまったので7も確定です。

1 2 3 4 5 6 7 8 9
1 1 1 1 1 1 1 1 1

これで、ソートが完了しました。

クイックソートのコーディング例

上記を踏まえてコーディングをすると以下の感じになります。

Sub QuickSort(vntSortData() As Variant, lngMin As Long, lngMax As Long)
    '--------------------------------------------------------------------------------
    'クイックソート(配列データ, 配列データ最小インデックス, 配列データ最大インデックス)
    '--------------------------------------------------------------------------------
        Dim lngIdxL        As Long
        Dim lngIdxR        As Long
        Dim vntKijunChi    As Variant
        Dim vntWk          As Variant
        
        '中央付近のインデックス内容値を基準値とします。
        vntKijunChi = vntSortData((lngMin + lngMax) \ 2)
        '最小インデックスをセット。
        lngIdxL = lngMin
        '最大インデックスをセット。
        lngIdxR = lngMax
        Do
            '配列のインデックスの小さい方から基準値に向かって、インデックス内容値が基準値より大きい値かイコールな値を探します。
            For lngIdxL = lngIdxL To lngMax Step 1
                If (vntSortData(lngIdxL) >= vntKijunChi) Then  '*1、降順は『>=』を『<=』 にする。
                    Exit For
                End If
            Next
            '配列のインデックスの大きい方から基準値に向かって、インデックス内容値が基準値より小さい値かイコールな値を探します。
            For lngIdxR = lngIdxR To lngMin Step -1
                If (vntSortData(lngIdxR) <= vntKijunChi) Then  '*2、降順は『<=』を『>=』 にする。
                   Exit For
                End If
            Next
            '最小インデックスと最大インデックスが同じか大きくになったらブレイクDOループ。
            If lngIdxL >= lngIdxR Then
               'この段階で、基準値より小さな値が基準値より左に、大きな値が基準値より右にきています。
               Exit Do
            End If
            '双方の値を交換します。
            vntWk = vntSortData(lngIdxL)
            vntSortData(lngIdxL) = vntSortData(lngIdxR)
            vntSortData(lngIdxR) = vntWk
            '配列のインデックスの小さい方から基準値に向かってのインデックスを更新する。
            lngIdxL = lngIdxL + 1
            '配列のインデックスの大きい方から基準値に向かってのインデックスを更新する。
            lngIdxR = lngIdxR - 1
        Loop
        '左の配列の処理が必要か
        If (lngMin < lngIdxL - 1) Then
              '基準値の左の配列に対してのソート処理を行う。
              QuickSort vntSortData(), lngMin, lngIdxL - 1
        End If
        '右の配列の処理が必要か
        If (lngMax > lngIdxR + 1) Then
              '基準値の右の配列に対してのソート処理を行う。
              QuickSort vntSortData(), lngIdxR + 1, lngMax
        End If
End Sub

'QuickSort使用例
Sub Test()
    Dim vntwkx(8)   As Variant
    
    vntwkx(0) = "2"
    vntwkx(1) = "9"
    vntwkx(2) = "8"
    vntwkx(3) = "3"
    vntwkx(4) = "5"
    vntwkx(5) = "4"
    vntwkx(6) = "1"
    vntwkx(7) = "7"
    vntwkx(8) = "6"
    QuickSort vntwkx(), 0, 8
    
    vntwkx(0) = 2
    vntwkx(1) = 9
    vntwkx(2) = 8
    vntwkx(3) = 3
    vntwkx(4) = 5
    vntwkx(5) = 4
    vntwkx(6) = 1
    vntwkx(7) = 7
    vntwkx(8) = 6
    QuickSort vntwkx(), 0, 8
End Sub

ソートする配列のエリアが、Variantなので、整数型と文字列型の両方が対応できます。また、*1と*2の通りに2箇所を変更するだけで昇順から降順になります。

とにかく、クイックソートの実装は難しいです。上記ソースは、あくまでもコーディング例(間違っているかも)であり、何かに流用する場合は、ご自分の責任でお願いします。

クイックソートの参考URL

■ 2006-10-14 2006/10/14 20:17

26790

■ 2006-10-12 お弁当 21:19

ここのところ、お弁当をもって会社に行っています。

これで、また、少し、節約ができそうです。

来月から、一年間苦しめられた、とあるローンが終わって、それとミネラルウォーターの一年契約も終わって、

そのお金を生活費に当てれば、やっと、人並みの生活に戻れそうだ。

しかし、苦しい一年だった。

■ 2006-10-12 VBAシート初期化時のプロパティ解説 21:19

VBAでの初期化処理等でシートをクリアする場合、全セルを選択し(Cells.Select)、セルの値やプロパティをクリアします。

クリアには、値・数式(ClearContents)、書式(ClearFormats)、コメント(ClearComments)毎のクリアと3つ一緒(Clear)にクリアの方法があります。また、グラフのオブジェクトを削除する場合は、ChartObjects.Deleteを使用します。ちなみに、この場合のコメントとは、セルの右クリックメニューのコメントの挿入で書き込んだコメントのことです。

    '全セルを選択
    ActiveSheet.Cells.Select
    '値・数式クリア
    Selection.ClearContents
    '書式クリア
    Selection.ClearFormats
    'コメントクリア
    Selection.ClearComments
    '値・数式、書式、コメントを一緒にクリア
    Selection.Clear
    'グラフのオブジェクトがある場合は、それを削除する。
    If ActiveSheet.ChartObjects.Count <> 0 Then
       ActiveSheet.ChartObjects.Delete
    End If

つぎに、セル幅を設定し、その中に表示するデータが長い文字列の場合など、複数行に表示する時はWrapTextを使い、文字を小さくしてセル幅にフィットさせる場合はShrinkToFitを使います。

ただし、ShrinkToFitは、ブック自体をHTMLで保存した場合は、無効になりますので注意が必要です。ちなみに、 WrapTextは、HTMLでも有効です。

    'セル幅を設定する。
    ActiveSheet.Columns("A:C").ColumnWidth = 60
    ActiveSheet.Columns("A:C").WrapText = True
    ActiveSheet.Columns("A:C").ShrinkToFit = True

■ 2006-10-12 2006/10/12 21:19

26630

■ 2006-10-11 WEB相談室過去ログ6000〜6499をアップ 20:29

WEB相談室過去ログ6000〜6499をアップしました。

あと、 Google AdSense を入れてみました。

これで、WEB相談室用に借りている、Infoseekからの300Mのディスク代を稼がせてもらいます。

これからも、WEB相談室をよろしくお願いいたします。

■ 2006-10-11 VBスクリプトのリファレンスリンク集 20:29

とりあえず、VBスクリプトリファレンスのリンク集です。これだけあれば、どれかデットリンクなっても大丈夫。

VBスクリプト組むときは、以下のリンク先の情報で、ほとんど事足りるはず!

しかし、上記のリンク先の内容は、ほとんど一緒なんだけど、著作権とかは、どうなっているのだろうか・・・。

■ 2006-10-11 2006/10/11 20:25 20:29

26514

■ 2006-10-10 22:27

VBエディター(VBE)で良く使うショートカットです。

ちなみに、検索は、検索したいワードの上にカーソルを置いて、Ctrl+F3で、検索ダイアログなしで検索できる。

■ 2006-10-10 2006/10/10 22:30 22:27

26422

■ 2006-10-08 朝の送り出し 10:22

今朝は、5時にちゃいちゃんママを送り出し、6時に長男(大3)を送り出し、7時に次男(高1)を送り出し、8時に三男(小6)を送り出しました。

ママは新潟の某生誕地祭りへ、長男は大学の某キャンプへ、次男はバスケットボールの部活へ、三男はミニバスの練習へ。

そう、今日は、私一人で家にいるのです。

当然、インターネット三昧かと思いきや、洗濯物が山ほど、家の掃除も山ほど、夕飯の料理も任された。

平日も休日も、全然休めない、いや・・・お父さんは辛いです。

でも、最近、思うんです。貧乏だと思っていたら、ものすごい宝を沢山もっていたことに気がついたんです。

ものすごい宝って、何かって、それは、子供です。うちの子は、特別いい子だな・・・なんて、ごめん親バカでした!

■ 2006-10-08 VBA処理スピードアップ 10:22

VBA高速化テクニックです!(よそ様のサイトです。)

万が一、デットリンクになったときのためにメモしときます。 

■ 2006-10-08 2006/10/08 10:20 10:22

26126

■ 2006-10-07 少欲知足 20:01

少欲知足を追加しました。

よろしければ、どうぞ!

サイトのURLを強制変更させられて、ほとんどのページがページランク1になったけど、なぜか、このページだけページランク5なんだよな。うれしい…。

■ 2006-10-07 VBAでマクロのソース削除と標準モジュール削除 20:01

EXCELブックファイルをリリースする時に、VBAマクロで処理した後、セキュリティの関係でマクロ削除をする場合がよくあります。

これを手動で削除するのでなくて、マクロをマクロで削除する方法を以下に示します。

ただし、前条件が2つ。

  1. Microsoft Visual Basic Application Extensibility の参照設定が必要(Alt+F11でVBEになり、そのウィンドウメニューのツール(T)の参照設定(R)から)。
  2. EXCEL2003のマクロセキュリティの設定で『Visual Basic プロジェクトへのアクセスの信頼する』をチェックする(ブックxlsウィンドウのツール(T)->マクロ->セキュリティ(S)->信頼できる発行元タグの一番下)。
     Dim objVBCOMPO As Object

        For Each objVBCOMPO In ActiveWorkbook.VBProject.VBComponents
            With objVBCOMPO.CodeModule
                'ソースの削除
                If .CountOfLines <> 0 Then .DeleteLines 1, .CountOfLines
            End With
            If (objVBCOMPO.Type = vbext_ct_StdModule Or objVBCOMPO.Type = vbext_ct_MSForm) Then
                'モジュールの削除
                ActiveWorkbook.VBProject.VBComponents.Remove objVBCOMPO
            End If
        Next objVBCOMPO
        Set objVBCOMPO = Nothing

ソースは削除されますが、なぜか、空の標準モジュールが削除されない場合があります。ご留意ください。

また、VBProjectオブジェクトをいろいろいじくりまわすと、アンチウイルスソフトで自分がウイルス扱いされたり、 VB自体も怪しい動きをする場合があります。ご注意ください。

とにかく、マクロウイルス等の影響で、この辺の制御がやりにくくなっています。上記サンプルを何かに流用する場合は、ご自分の責任でお願いします。

■ 2006/10/07 20:00 20:01

26035

■ 2006-10-06 ブックを開いたときに任意のシートにオンするには 23:25

おさらいですが、EXCELのデータのxxx.xlsは、ブックと云います。また、ブックは複数のシート(ブックを開いたときにタブで選択するヤツ)を持つことができます。

ブックを開いた時に、一番初めに表示されるシートを任意に指定するには、VBAでブックを保存直前に任意のシートをアクティブにします。

例、shtTestSheetシートを一番初めに表示させる。

shtTestSheet.Activate
bokTestBook.Save

■ 2006-10-06 マクロ実行するかのダイアログを黙らせるには 23:25

VBAのマクロを含んだブックを開くとセキュリティレベルが高と中では、拒否または確認のダイアログが表示されます。

ですので、自動化する時には、ダイアログを黙らせる必要があります。それには、デジタル証明書を作成して、それでマクロを署名します。

その手順を以下に示します。

スタートボタンから『VBプロジェクトのデジタル署名』を選択する。

ダイアログが表示されたら、証明書の名前を入力してOKボタンを押す。

これで、デジタル証明書が作成されました。

つぎに、EXCELブックを立ち上げる。

EXCELメニューのツール(T)->マクロ(M)->Visual Basic Editor(V)を選択する。

すると、マクロプロジェクト(VBA)が立ち上がるので、VBAメニューのツール(T)->デジタル署名(D)を選択する。

先ほど作成したデジタル証明書でマクロを署名する。

注意、インストール先が複数ある場合は、この操作をインストール先のPCで各々行わなければならない。

■ 2006-10-06 2006/10/06 23:26 23:25

25906

■ 2006-10-05 腹八分目 21:05

最近、腹八分目をしています。

どうしてかというと、健康に良いのです。

実は、貧乏で満足な食事が出来ない日々が続いて、逆に体調が良いことに気が付いたのです。

もちろん、今も貧乏ですので、腹八分目を続行中です。

40歳の時から11年で5キロも太ってしまったので、丁度ダイエットになる。

いつもハングリー状態に身を置くのもいいものですよ・・・とか。

貧乏って、有り難い・・・。





てな、わけねぇだろ〜!

あと、一ヶ月すると、とあるローンが終わって、すこし貧乏脱出、あと、1年半すると長男が社会人で、

男2人働けば、リアル貧乏脱出!!

■ 2006-10-05 ファイル存在チェック(DIR関数の謎の動き) 21:05

VBでファイル存在チェックをするときは、とりあえず、DIR関数が使えますが、DIR関数は本来ディレクトリ内のリストを求めるものです。

また、DIR関数を複数入れ子で使うと謎の動きをします。たぶん、ひとつのポインターを複数のDIR関数が共有するものと推測します。

ですので、ファイル存在チェックは、APIのPathFileExists()を使いましょう!

VBでのAPIのPathFileExists()サンプル
    Declare Function PathFileExists Lib "shlwapi" Alias "PathFileExistsA" (ByVal lpszPath As String) As Long
    
    If PathFileExists("TEST.TXT") = 0 Then
       'MsgBox "TEST.TXTファイルが存在しません。
    End If

Pathで指定したファイルが実際に存在する場合、真(0以外)が返される。存在しない場合、偽(0)が返される。

■ 2006-10-05 2006/10/05 21:00 21:05

25827

■ 2006-10-04 VBAやDOSコマンドでのダブルクォーテーションのエスケープ 22:29

VB6,VBS,VBAやDOSコマンドでの文字列はダブルクォーテーションで挟んで表現します。しかし、文字列中にダブルクォーテーションがある場合は、どうするかというとダブルクォーテーションの前にもう一つダブルクォーテーションを置きます。単純なことだと思いますが…、実際は結構複雑です。

たとえば、あるDOSコマンドの引数に文字列がある場合で、VBAからそのDOSコマンドを発行した場合、以下の感じになります。

(VBAのソース上)
strTN = "XXX20060812120000"
strCMD = "C:\XXXMail\XXXMail1.xls"
strWkcmd = Environ("ComSpec") & " /c ""schtasks /create /TN " & strTN & " /TR " & """""" & strCMD & """"""""
(DOSコマンドのソース上)
C:\WINDOWS\system32\cmd.exe /c "schtasks /create  /TN XXX20060812120000 /TR ""C:\XXXMail\XXXMail1.xls"""
(注意:上記コマンドは、見やすくするため、かなりオプション記述を省略しています。詳しくは、schtasksのリファレンスを参照のこと)

上記のように"""""" & strCMD & """"""""となると結構複雑になります。解析の基本は、ダブルクォーテーションはダブルクォーテーションでエスケープする…です。

追記:DOSコマンド内のダブルクォーテーションは、そのコマンドがとのようにダブルクォーテーションを解釈するかによって、へたにエスケープするとエラーになったりします。

したがって、実際に試行錯誤して動作確認が必要です。

とにかく、ダブルクォーテーションエスケープに関して、VBからDOSコマンドを発行するときは、VBの仕様、WINDOWSの仕様、DOSコマンドの仕様が複雑に絡み合っていますので、細心の注意が必要です。

■ 2006-10-04 2006/10/04 22:30 22:29

25717

■ 2006-10-02 人を救えるお経とは? を追加しました。 21:46

人を救えるお経とは?

よろしければ、どうぞ!

■ 2006-10-02 MS-Wordでの見出し項番の位置調整について 21:46

Word文書で見出しに項番を付けるときは、メニューの書式->箇条書きと段落番号で設定します。しかし、設定後に「見出し」と「項番」の位置関係が「段落番号の書式設定」で調整しても、どうもしっくりこないのです。

で、設定方法をあみだしました。

  1. どれか一つの項番をクリックすると、上のルーラーに「L」等が表示されます。
  2. この「L」等をドローして「見出し」と「項番」の位置関係を調整します。
  3. 現在の項番見出しの書式をCtrl+Shift+c でコピーします。
  4. つぎに、右クリックメニューの一番下の『類似した書式の文字列を選択』をします。
  5. そして、Ctrl+Shift+v で書式をペーストします。(現在の項番見出しの書式を『類似した書式の文字列を選択』したすべてへペースト)
  6. これで、『類似した書式の文字列を選択』した、すべての「見出し」と「項番」の位置関係の微妙な設定ができました。

■ 2006-10-02 2006/10/02 21:45 21:46

25511

■ 2006-10-01 「挨拶」を追加しました。 21:30

挨拶

■ 2006-10-01 無量義経を大幅更新しました。 17:13

無量義経

よろしければ、どうぞ!

■ 2006-10-01 メモ帳でソースのライン数を知るには 17:13

VBSのスクリプトをメモ帳で開発しているときに、エラーが発生すると、VBSからエラー箇所をライン数で教えてくれます。

そんな時は、メモ帳メニューの表示(V)でステータスバー(S)をチェックすると、ステータスバーにカーソルのある行のライン数が表示されます。

64Kのソースしか見れないと思っている人には、たぶん、想像もつかないことだと思いますので、ここに取り上げました。

また、64Kの制限はWINDOWS98までで、それ以降のOSでは、たぶんメモリのある分読み込めると思います。

■ 2006-10-01 VB6,VBAでのVBEでグリグリするには 17:13

VB系でプログラムを組むときは、VB統合環境のエディッターを使いますが、VB.NET以前のエディッターでは、マウスのホイール(グリグリ)に対応していません。

私みたいにVB.NETからVB6&VBAに転向してきたものは、グリグリなしでは、いられない体になっています。

そこで、ネットで探したらありました。VB6&VBAでホイール機能を使えるようにするツールが!

■ 2006-10-01 2006/10/01 21:30 21:30

25397