Visual Basicの部屋
99年1月3日
今回はエクセル95のVBAです。
97では有りません。 実は会社の環境はいまだにOffice95を使用していますので、自宅だけアップしても 余りメリットが無い為です。間違ってもお金が無いと思わないようにね!!!
さて、業務で使用するアプリをVBで早く作ろうとしていましたが、なかなか難しく決定打 の物が作成出来ませんでした。 少し、飽き飽きしていたら、エクセルで業務用のアプリを作成している人からメールを 貰いました。 そのメールにはVBより簡単で直ぐに使えるよ! と有り、早速研究をしてみると ホンとに簡単でした。でも、VBでの基礎が無ければアタフタしたかもね?
私自身、業務でパソコンを使用して作成する物で一番時間が掛かる工事の日程表を 少しでも楽に作成できないかと、前から思っていました。 今回の開発のポイントはインプットを如何に簡単に実施できるかが鍵を握っていました。 会社内での時間では業務に追われてとても、プログラムを考える時間が無い為、自宅へ 戻ってから寝る時間を削って作成しました。偉い人、見ていたら考えてね!!! 無理か????
色々考えたすえ、メニューを効率的に使用するのが一番良いと思いました。 その為、殆どの操作はメニューと右クリックのホップアップメニューで出来るように しました。
説明が長くなりましたがどのような物かを説明します。 この日程表は60日を表示できます。前はエクセルの図形描画を使用してその都度、 形状&太さを指定して何処から何処までを指示して図形を書いていました。 また、図形の操作が多い為、工程名等の日本語入力はマウスを一箪離してキーボードを 使用する等の操作性が良くありませんでした。 60日の日付もいちいちカレンダーを見て入力していました。
これをメニューとホップアップメニューで簡単に入力できるようにしました。
1.参考図・メニュー
図形は10個あり、挿入したいセルをクリックしてメニューをクリックするだけで 表示されます。 又、工程名等もクリックするだけでセルに挿入出来る。
2.参考図・ホップアップメニュー
右クリックのホップアップメニューでも出来るようにしました。
3.参考図・ダイアログ
ダイアログの画面を作成して色んな入力をセルを指定しなくても入力できるようにした。 又、スタートの日付と土日サインを入れると60日間を自動的に計算して表示すると共に 休日の網掛を自動で行うようにした。
プログラムの中身の一部
1.'***** 上矢印 マクロ *****
Sub 上矢印()
ActiveSheet.DrawingObjects("直線 40").Copy
ActiveSheet.Paste
End Sub
解説
"直線 40"という図形をクリップボードにコピーさせる。
次にアクティブに成っているセルにクリップボードのデータにコピーする。
2.'***** 現着 マクロ *****
Sub 現着()
ActiveCell.Value = "現地着"
End Sub
解説
これは解説不要かな? アクティブに成っているセルにデータを挿入する。
3.'***** 簡単入力 マクロ *****
このマクロは難解かも知れないので、細かく解説を入れましょう。
Sub 簡単入力ok_click()
Dim dateStart As Date
Dim dateEnd As Date
解説 変数の定義をしている。
〜 中略 〜
Range("F4").Select
ActiveCell.Value = DialogSheets("簡単入力画面").EditBoxes("工事番号").Text
Selection.Font.Size = 16
解説
"簡単入力画面"の"工事番号"をフォントサイズ16で"F4"のセルに挿入している。
〜 中略 〜
If DialogSheets("簡単入力画面").EditBoxes("スタート年").Text = "" Then GoTo ch_end
If DialogSheets("簡単入力画面").EditBoxes("スタート年").Text < 1998 Then GoTo ch_er
If DialogSheets("簡単入力画面").EditBoxes("スタート月").Text > 12 Then GoTo ch_er
If DialogSheets("簡単入力画面").EditBoxes("スタート日").Text > 31 Then GoTo ch_er
解説 スタート年月日のチェックをしている。
〜 中略 〜
Range("I8:BO8").Select
Selection.ClearContents
Range("I9:BO49").Select
Selection.Interior.Pattern = xlSolid
Selection.Interior.ColorIndex = xlNone
解説 前に計算した月&休日網掛を消す。
Start_yy = DialogSheets("簡単入力画面").EditBoxes("スタート年").Text
Start_mm = DialogSheets("簡単入力画面").EditBoxes("スタート月").Text
Start_dd = DialogSheets("簡単入力画面").EditBoxes("スタート日").Text
解説 スタート年月日をセーブ
Cells(8, 9).Activate
ActiveCell.Value = Start_mm
解説 スタート月を(8, 9)のセルに挿入。
s = 9
i = 0
解説 ループに使用する変数の初期値の設定
h_loop:
If i = 59 Then GoTo ch_end
If i > 59 Then GoTo ch_end
解説 計算する日数は59日の為、それ以上はループから出る。
dateStart = DateSerial(Start_yy, Start_mm, Start_dd)
解説 計算できる数値型日付に変換
dateEnd = dateStart + i
解説 + i日後の日付を計算
sss_d = Format$(dateEnd, "d")
解説 計算した年月日から日をセーブする
Cells(9, s).Activate
ActiveCell.Value = sss_d
解説 9行目の次のセルをアクティブにして、日を挿入。
If Range("BC52").Value = False Then GoTo ch_do_n
解説 '簡単入力画面の"土日チェック"がついているかの判断。
my_we = WeekDay(dateEnd)
If my_we = 2 Then GoTo ch_do_n
解説 計算した日が土日かの判断。
〜 中略 〜
ActiveCell.Range("A1:A41").Select
Selection.Interior.Pattern = 17
解説 休日の網掛けの実行
ch_do_n:
If sss_d > 1 Then GoTo h_hizu1n
解説 日が一日かの判断
Cells(8, s).Activate
ActiveCell.Value = Format$(dateEnd, "m")
解説 日が一日だったら、日を入れた上のセルに月を挿入する。
h_hizu1n:
s = s + 1
i = i + 1
GoTo h_loop
解説 変数に1をプラスして次のセルの処理を行う為、前に戻る。
ch_er:
Msg = "日付にミスが有ります。入力をやり直して下さい。"
Style = vbOKOnly + vbCritical
Title = "工事日程表V1・06"
MsgSS = MsgBox(Msg, Style, Title)
解説 日付の形態チェックエラーのメッセージボックスを表示する。
ch_end:
End Sub
少しはプログラムがどのように成っているか理解できましたか? 理解できない、貴方には強い味方がいます。エクセルのヘルプファイルです。 VBAのヘルプファイルを見て勉強するか、又はVBAの本で勉強して下さいね。 私は本屋で立ち読みをしてある程度、理解して、HPの参考に成るサイトの サンプルプログラムを研究して、エクセルの自動マクロ機能をテストしてどうにか しました。 あなたもやる気さえあれば、それ程、難解では無いと思います。
しかし、私の書いたコードを見て、何となく懐かしいと思った貴方は多分、昔に 汎用コンピュータを使用していた人でしょうね。そうなんです。 実は私がVBでプログラムを組むと、いつのまにか昔のCOBOLのスタイルに成って しまうんですよ。ネットフレンドでVBを使用する人には非常に見づらいと言われていますが なかなか20年間使用していたスタイルは、簡単には直りそうも無いです。 それでも、VBを使用してアプリケーションを作成する時には構造化のプログラミングを するようにしています。でも、後で修正しようとすると、自分のコードを理解するのに時間が 掛かって、苦笑する事がシバシバです。涙ですよ。
興味のある方は下をクリックしてダウンロードしてみて下さいね。 但し、貴方のパソコンにエクセルが無ければ使用できません。 又、エクセル95で作成した為、エクセル97の方は一部エラーに成る事が有ります。 マイクロソフトは上位に互換性を完璧に遣っていない事は前から知っていましたが 疲れます。その為、95としてファイルを開けば多分、完璧に作動すると思います。
それと、色々有りまして、ブックに保護を掛けています。解除したい方はメールを
下さい。解除のパスワードを連絡します。
97年7月12日
このページもテストのつもりで作成しました。
Javaと共に勉強仕始めた為,オブジェクト、メソッド等でゴチャゴチャに成ってしまい
困りました。
そこで、取り合えずVisual Basicを優先して遣ることにしました。 しかし、簡単な言語とは誰が言ったのでしょうか?
確かにユーザーインターフェイスのデザインは簡単に出来ました。 ところが、コードを書くのは一般のプログラムと変わりは無く難解です。
私の感覚では騙されたように感じています。 もう少し簡単に出来ないものでしょうか?
** 注意 **
但し、Visual Basicのインストールされていないパソコンでは実行出来ません。
誰でも、使えるように作成出来るのですが、このVisual Basicで作成したアプリは 専用のランタイムを必要とします。
これが馬鹿大きく3.85MBになりHPでのダウンロードにはむかないからです。ごめんなさい。
私と直接会える方で,Visual Basicのインストールされていないパソコンの方はメール 下さい。FDで配布します。
| 戻る |
|---|