|
アプリケーションのためのビジュアルベーシック |
表計算ソフト、エクセルにあるマクロ機能は、便利なので皆さんご存知のはずです。
でも、これに使われているコンピュータ言語のVBAは、エクセル専用でもありません。
つまり、オフィスのワードやパワーポイントも、マクロが組込めるようになっています。
ただ、実装できる機能として用意されているレベルを見ると、エクセルが一番です。
まあ、エクセルで作った、作表は一つのデータベースとして見なしてよい分けです。
そして、個人業務では、せいぜい、数百件ぐらいまでのデータがほとんどでしょうね。
それ以上になると、会社がRDBとかちゃんとしたデータベースを構築するものです。
そうなると、それを操作する端末画面での処理作業になり、凡人でもできるんだな。
だから、MRP・ERPの基幹業務を管理していますと言われても、ただのオペレータ。
プログラムを組んだのでもないから、全然偉くないんだと思うけど、どう思いますか。
本当は、個人業務のデータを有効に分析できる能力のある方が、優秀なんだよ。
そして、個人が作ったデータベースなんて、エクセルだとしても千差万別なのです。
こういった一次資料みたいなデータを広集めてきて、別のブックに再集計してみる。
また、日常の業務は、同じファイル名で上書きしたり、シートを追加したりするもの。
つまり、データの収集、計算、保存は、一定のルールで管理されることが多いのだ。
だから、この手順を逆手にとって、複数ファイルを読み取り、別なデータに作り直す。
これが、手作業だったら気の遠くなるような話ですが、マクロだったら何とかなります。
でも、根底は小技の利くプログラミング言語「VBA」を駆使できることが、第一歩。
Visual Basic(ビジュアル・ベーシック)の略称ですが、視覚的な基本言語なのだ。
要するに、読めば分かるし、プログラムを組めるコンピュータ言語だってことでしょ。
そう思いつつ、会社で仕事をする振りをして、シコシコとVBAを勉強して来ました。
その結果と感想を述べさせてもらうなら、先ず小技の利いたプログラムを作ること。
こういったプログラムを多くコレクションしておくと、後々、役に立つようになるのですよ。
こういうのは、ネットでサンプルが良く紹介されているから、参考にしてみてください。
でも、ネットの情報がいい加減で、あまり参考にならず、コードの組めない時もある。
或いは、あまり教えると商売にならないので、プログラムのミソは、はぐらかすのかな。
というわけで、自分なりに面白そうなVBAのコードを作ったので紹介しちゃいましょう。
特に、(1)のコードは、ネットで幾ら探しても役立つコードが見つからなかったので、英語圏のVBA有志サイトから拾ってきたもので、日本人のサイトでもこれぐらい紹介しろよと叫びたくなりますが、これを機に紹介するので、是非、有効活用してもらいたいものだと思うのでした。
(1)アクティブではないが、開いているブックを、一つずつ確認して閉じる
※クリックボタンを押して実行します。
一つのモジュールに二つのプロシージャを設定します。
二つ目のプロシージャは、一つ目で呼び出され、実行されます。
クリックボタンのあるブックは残されます。
もし、これも閉じたいなら、For~Next分の後に、次のコードを組みます。
Activeworkbook.Close SaveChanges:=True '保存して終了
※保存せず終了は、SaveChanges:=False にする。
-------------- モジュール内開始 --------------
Public WB As Workbook
Public AWb As String
Dim rc As Long
Sub ボタン1_Click()
AWb = ActiveWorkbook.Name
For Each WB In Workbooks
If WB.Name <> AWb Then
Call boxSelect
End If
Next WB
End Sub
Sub boxSelect()
rc = MsgBox(WB.Name & vbCrLf & "閉じますか?", vbYesNo + vbQuestion)
If rc = 6 Then
WB.Close savechanges:=False
ElseIf rc = 7 Then
End If
End Sub
-------------- モジュール内終了 --------------
※このコードのミソは、ファイル名を気にせず、アクティブかどうかを変数で判断。
そして、変数をコードに組んで実行させる記述(これ、賢いわ)
※メッセージボックスを関数にする場合、その結果で実行する戻り値は次の通り。
定数
値
説明
vbYes
6
[はい]ボタンが押された
vbNo
7
[いいえ]ボタンが押された
(2)電子サイコロのマクロコード
※クリックボタンを押して実行します。
-------------- モジュール内開始 --------------
Sub ボタン1_Click()
Dim Nr As Variant
Worksheets("Sheet1").Activate
Nr = Int((6 - 1 + 1) * Rnd + 1)
Worksheets("Sheet2").Cells(3, 3).Value = Nr
End Sub
-------------- モジュール内終了 --------------
お遊びみたいなものだけど、任意抽出なんかに使えます。
(3)日付時計
※クリックボタンを押して実行します。
Win32 APIを利用するので、宣言します。
これにより、メッセージボックスのタイムアウト(自動消滅)が実行できます。
-------------- モジュール内開始 --------------
Private Declare Function MessageBoxTimeoutA Lib "user32" _
(ByVal hWnd As Long, _
ByVal lpText As String, _
ByVal lpCaption As String, _
ByVal uType As Long, _
ByVal wLanguageId As Long, _
ByVal dwMilliseconds As Long) As Long
Sub ボタン1_Click()
Dim YYMMDD As Variant
Dim HHMM As Variant
YYMMDD = Format(Now, "Long Date")
HHMM = Format(Now, "Short Time")
MessageBoxTimeoutA 0&, YYMMDD & vbCrLf & HHMM, "日付時計", vbMsgBoxSetForeground, 0, 3000
'3000は、3秒のこと
End Sub
-------------- モジュール内終了 --------------
※Win32 APIを使う方法です。
これは、アプリケーションがWindowsの各機能にアクセスするための接点です。
このため、Windows上で動作するアプリケーションをさまざまに作成できます。
プログラミングの言語・開発環境において、使用できる便利な手段になります。