2012年10月31日

マクロ名を変数に代入して実行

ExcelVBA入門AccessVBA入門で頂いたご質問]

ExcelVBAの経験者の方々から、
「変数に代入されたマクロ名やプロシージャ名を使って、他のプログラムを呼び出す方法はないか」
というご質問を時々いただきます。

「Application.Run」を使うと、変数に代入されたマクロ名を使って、他のマクロを呼び出すことができます。
Application.Run は以下のように使います。


 Sub マクロ1()
   MsgBox "ハロー"
 End Sub

 Sub マクロ2()
   Dim マクロ名 As String
   マクロ名 = "マクロ1"
   Application.Run マクロ名
 End Sub


上記の「マクロ2」を実行すると
「Application.Run マクロ名」の行で、変数「マクロ名」に代入された「マクロ1」が呼び出されます。


呼び出されるマクロに引数がある場合は、
「Application.Run マクロ名」に続けてカンマで区切ってマクロ名を列挙します。


 Sub マクロ3(メッセージ)
   MsgBox メッセージ
 End Sub

 Sub マクロ4()
   Dim マクロ名 As String
   マクロ名 = "マクロ3"
   Application.Run マクロ名, "ハロー"
 End Sub


「マクロ4」を実行すると
「Application.Run マクロ名」に続く引数 "ハロー" が、マクロ3の引数として渡されます。


沢山のプログラムを利用する場合や、複数のバージョンのプログラムを使い分ける場合などには、変数を使ってサブルーチンの実行ができると、管理やメンテナンスの手間が減る場合があると思います。


変数が使えますので、例えばExcelのセルに、実行したいマクロ名を記入しておいて利用することもできます。
上手に使うと、仕様書と、実行されるマクロを連動させることもできると思います。


プログラムの実行には Call を使うことが多いと思いますが、Callは変数を使ってサブルーチンを呼び出すことができません。
作成の目的や量によっては、Application.Run を使った方が便利な場合も出てくるかも知れません。

システム化などを目的にExcel、AccessのVBAを利用される場合などには、一度利用してみると、分かりやすくメンテナンスしやすいプログラミングのための良いアイディアが浮かぶのではないでしょうか。

posted by Three bit com at 10:00| Excel & Access

2012年07月30日

Excel・Access・PowerPoint 2003から2010への移行

Excel中級Access入門・PowerPoint中級で頂いたご質問]

講習時に、Excel、Access、PowerPointの2003から2010への移行に関するご質問をよくいただきます。

バージョン2003までのメニュー体系が「リボン」へと大きく変更になりましたので、移行時に業務が滞るのではないかという不安を抱かれるITのご担当者様も多いようです。

マイクロソフトのWebサイトでも色々な情報が公開されていますので、弊社のセミナー時にも色々とご紹介をする機会がありますが、特にご紹介していて好評なのが以下のツールです。

<インターラクティブなガイド>
http://office.microsoft.com/ja-jp/excel-help/HA101794130.aspx?CTT=5&origin=HA101982272#_Toc26868837

インターネットにつないで利用するツールです。
2003のExcelやAccess、PowerPointの操作画面が表示されますので、画面から知りたい機能を選択すると、2010の画面が切り替わり、該当する2010の機能の場所を動画で教えてくれる便利でインターラクティブなツールです。

社内のITやセキュリティの規程上で問題がなければ、ソフト(無料)をインストールして、インターネットでご確認いただくと、メニューの変更に関連して移行時に戸惑われることはほとんどなくなるように思います。

Excel・Access・PowerPoint・Wordなど、ソフトごとにOfficeの操作方法が閲覧できます。

2003の[ツール]の[オプション]画面の中にあるような細かい機能までを調べるのは難しくはなりますが、頻繁に使用する代表的な機能でしたら、短時間で調べて、すぐに業務に利用できるのではないかと思います。

移行の準備中で、ご心配な場合は一度ご覧になってみてはいかがでしょうか。
posted by Three bit com at 10:00| Excel & Access

2010年07月02日

プログラム入力時の入力モード切り替え

ExcelVBA、AccessVBAの両講座で
プログラム入力時の日本語と半角英数字の切り替えについて
よくご質問をいただきます。

変数名やコントロール名を全て英数字にすれば、日本語入力の切り替えはほとんどなくなるのですが、
変数名には日本語を使った方が分かりやすいと感じる方も多く、
その場合は、どうしてもIMEやATOKの日本語と直接入力の切り替え回数が多くなってしまいます。

切り替えが面倒だと、モードを日本語にしたままプログラムコードを書き続け、
英数字に切り替えるところだけスペースキーで変換している方も多いようです。

私の場合も、プログラムを書き始めた最初の頃には、
ただでさえプログラムがうまく動かないことが多く、
その上この操作が面倒で、プログラムを書くことまで嫌になってしまったことがありました。

プログラム歴が長い友人に聞いてみると
「さぁ?余り気にしたことは無いけど・・・」
という答えが返ってくるので参考になりません。

そこでその友人の操作を観察して見てみると、
画面のコードをじっと見たまま
何気なく「半角/全角」キーをスムーズに切り替えていました。

どうやら慣れるしかないか方法は無いのか・・・
と諦めることにして、
何も考えなくても自動的に指が「半角/全角」キーに届くようになるまで、キーボードの切り替えだけを練習してみることにしました。

タッチタイピングで全キーボートを覚えるよりは、ずっと楽な練習ですので、少し練習している内にすぐに慣れてきて、いつの間にか気にならなくなりました。

ここ数年のセミナーへご参加される方を拝見していると、キーボード操作が非常にスムーズな方が増えてきているように思います。

IMEの切り替えが面倒で、プログラムが好きになれなかったら、
一度練習してみてはいかがでしょうか?
あっと言う間に、気にならなくなるように思います。

(参考)
ファンクションキーのF5〜F10を使ったことが無いという方が多いようです。
「あいうえお」と入力し、確定前にF6〜F10を順番に押して確認してみてください。
1回ではなく複数回押すと違った結果になりますので便利に感じることもあります。

(入力例)
「あいうえお」と入力してF10を3回押すと
aiueo → AIUEO → Aiueo
 
「あいうえお」と入力しF7を5回押すと
アイウエオ → アイウエお → アイウえお → アイうえお → アいうえお
のように順番に変換されていきます。
posted by Three bit com at 10:00| Excel & Access

2009年02月12日

接頭辞

「前任者の作成したプログラムの変数の先頭に、いくら参考書やヘルプで調べても見つからない文字列がついている」
というご質問を頂くことあります。

ソースを拝見してみると str商品 とか int数量 のように先頭に3文字の英文字が表示されています。
これは「接頭辞」または「プリフィックス」と言われるもので、変数の場合では、その変数の型が一目で分かるようにつけた文字列です。

例文を書いてみます。

Dim str商品 As String 
Dim int数量 As Integer
str商品 = "コーヒー"
int数量 = 1000

のような使い方です。
長いプログラムの途中でいきなり「商品」という変数が出てくると、その変数にどのような値を代入してよいのかが判断できません。

プログラムを読みやすく分かりやすくするために付けておくと便利です。
他の文法と異なり、String型の場合、必ず str とつけなければならないわけではありませんが、習慣でVBA、またはVBだとよく利用される使い方というのもあります。

社内で複数の人で作成をしてマクロを使いまわすときには、社内の作成ルールとして決めておくことをお薦めしています。
posted by Three bit com at 10:00| Excel & Access

2008年12月18日

MsgBoxで改行

ExcelVBA入門セミナーやAccessVBA入門セミナーの一番最初で、いつもご紹介しているMsgBox関数というものがあります。

例えばExcel(エクセル)を閉じるときに 「Book1への変更を保存しますか?」 のようなメッセージが表示されることがありますが、これもMsgBoxです。

このMsgBoxのダイアログ画面内で改行して、長い説明文や結果を表示したいときには改行を表す vbCrLf を使うことができます。例えば次のように & に続けて記載します。

 MsgBox "終了します。" & vbCrLf & "よろしいですか?"

表示結果は次のように2行に分けて表示されます。

 終了します。
 よろしいですか?

vbCrLf 以外にも vbCr あるいは vbLf と書いても同じような動きをしますので、1つ覚えておくと便利ですし、3つとも同じように使えることを知っておくと、参考書や他の人が書いたプログラムを読むときに役立つと思います。

posted by Three bit com at 10:00| Excel & Access

2008年12月11日

ADOとは?

データベースと連携したシステム開発をしている開発者の中では日常的によく使うADOですが、セミナー参加者の方に伺うと、IT関連部門の方やデータベース開発経験がある方を除き、ほとんどの方がご存知ないようです。

ADOとはエーディーオーと呼びますがMicrosoft ActiveX Data Objectsの略称です。
AccessでAlt+F11を押してVBE(エディタ)を起動した後、[ツール]メニューの[参照設定]を確認してみてください。
Access2000〜2003では既定でチェックが付いていますので、すぐに使えますし、2007の場合もチェックを入れれば使えるようになります。

ADOは一言でその役割を説明すると「データベースとやり取りするためのマイクロソフトのテクノロジーの一つ」です。
Accessの場合では、例えばフォームからプログラムを起動し、テーブルやクエリの各レコード・各フィールドをきめ細かくコントロールしたい場合には、AccessのフォームからADOを利用して、Accessデータベースとやり取りをすることになります。

プログラミングの際には、AccessVBAのエディタ画面で、フォームやレポートをコントロールするAccessVBAの命令以外に、ADOのテクノロジーも併せて利用しながらプログラムを書いていくことになります。

前任者が作成したシステムを解析したい場合にも、プログラムの中に例えば、

Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset

のように、ADODBなどが含まれているようでしたら、ADOの知識も習得しておく必要があります。
また、最近ではExcelとAccessを連携させたシステム事例を多く拝見するようになりましたが、ExcelからもADOを使ってAccessのデータとのやり取りをすることができますので、知識が増えるほど業務での活用範囲は広がることと思います。 
posted by Three bit com at 10:00| Excel & Access

2008年12月05日

Excel VBA と Access VBAの違い

最近のVBA関連のセミナーでExcel VBAとAccess VBAの違いを質問されることが増えてきました。
両者を連携させた簡易システムの構築をしている企業が増えてきたためでしょうか。

どちらも同じVBAなのでかなり似ているのではないか、と思われる方が多いようですが、その通りで文法はExcel VBAもAccess VBAも同じです。

いずれか片方のアプリケーションでVBAの基本をマスターしておけば、もう一方のVBAを勉強する際に既知の文法はそのまま活用することができます。

例えば、変数宣言、For、If etcが挙げられます。
両者の違いは、制御する・自動化する対象がExcelか、それともAccessか、という点に出てきます。

例えば、Excelならばセルやワークシートをコントロールする方法を、
Accessならフォームやレポートをコントロールする方法を知っておく必要があります。

普段の業務で使っているExcelの操作とAccessの操作が異なるのと同様に、それぞれ覚えておくべきことが変わります。

またAccessVBAをマスターする上でExcelと異なる大きなポイントの一つが、フォームやレポートのコントロール方法以外に、テーブルやクエリを直接操作するためのADOとDAOにも精通しておく必要があるという点です。

ADOやDAOは熟知しておくと、ExcelとAccessを連携させたシステムやプログラム作成にも役立つ便利なテクノロジーですので、AccessVBAを勉強される方は早い段階でこの両者に触れておくことをお勧めしています。
ちなみにADOは奥が深く高速なため、私も頻繁に利用しています。
posted by Three bit com at 10:00| Excel & Access