プログラムを作り始めて何年になるでしょうかね。就職して,2年目からですから,結構な年月になります。
当時は,PCのはじめで,やりたいことのほとんどは,BASIC と呼ばれる言語で,自作しないといけませんでし
た。そのうち,MS-DOS上で動くマルチプランやらwindoesで動くロータス123等がでてきました。確か,
ロータス123は,当時68000円か78000円ぐらいしたと記憶していました。おまけに,123は,
プロテクトがかけられていて,バックアップができませんでした。その後,コピーツール等がでてきて,バッ
クアップはできるようになりました。
それにしても,高かったです。ただ,自分でもプログラムを作ってましたので,それが作成されるまでの労力
を考えると,決して高くないと思ってました。素人の自分が作るプログラムと,その高いプログラムはどこが
ちがうのでしょうか。もちろん完成度もあるのですが,素人とプロでは,エラー処理が格段に違います。プロ
は,考えるすべてのエラー処理をしていますが,素人の私が作るものは,動けばいい,というレベルのもので
す。
ただ,作るにあたっては,最低限の処理が必要になります。たとえは今,仕事のお手伝い関係で自作している
エクセルvbaのサーチのプロシャージャ(プログラム)でも,目的の項目がサーチできなかった時は,どうす
るかの処理ぐらいは必要になってきます。
そんな訳でエラーの時に,
XFD1048576
を返すものを作りました。この数字はなにかというと,
エクセルの表の最右列・最下段のセルということで,一番端っこのセルの番地を表す数字です。なぜ,この
この数字を使ったのかと言うと,昔BASICでプログラムをくんでいた時のなごりで,エラー処理に普段
出てこない,9999とか言う数字を使った名残です。(確か何年構えに2000年問題ということで,
話題になりましたね。これも。エラー処理に1999という数字を使っていて,ためですね)
ところが,デバックしているときにまたまた,はまりました。わざとエラーを起こしても,XFDが返って
こないのです。返ってくるのは,16384という数字が返ってきてしまいます。あれこれやりましたが,
肝心なこと忘れてました。使ったのは,Column というプロパティですが,当たり前ですが,このプロパテ
ィは,数字を返すものでした。ネット検索で,
Split(Columns(列番号).Address, “$”)(2)
のようにやって,やっと目的のXFDが返ってきました。長かったです。
下記がXFD1048576を返す,関数です,といってもぱくりです。
Public Function Search(ByVal rng As Range, ByVal keyWord As Variant, ByVal Whole As Boolean)
Dim r As Range
If Whole Then
For Each r In rng
If r.Value = keyWord Then
Set Search = r
Exit Function
End If
Next
Else
For Each r In rng
If InStr(r.Value, keyWord) > 0 Then
Set Search = r
Exit Function
End If
Next
End If
Set Search = Range("XFD1048576")←←エラー処理です。
End Function
デバックに使ったプロシャージャです。
MsgBox Split(Columns(Search(rng, "******", True).Column).Address, "$")(2)