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

2008年12月02日

Format関数とCurrency型

ExcelVBAの入門レベルのセミナーで変数と変数の宣言方法をご説明しています。
単価や合計金額など、金額はCurrency型として定義するのが一般的です。

ところがこれをそのままセルに代入してしまうと、セルの書式が変わってしまうことがあります。
例えば以下のようなプログラムを、書式設定をしていないワークシートに対して実行すると、
セルA1には \100.00 のように\マークだけではなく、小数点以下2桁までが表示されるようになります。


Sub 練習()
  Dim 価格 As Currency
  価格 = 100
  Range("A1").Value = 価格
End Sub


このような動きを回避するには、予めワークシートのセルに書式を設定しておくか、
あるいは
Format関数を使って 価格の値をどのように表示するか定義してからセルに代入すると
期待通りの表示結果になります。


例えば3桁ごとにカンマを表示するだけならば以下のようなFormat関数を作成します。


Sub 練習()
  Dim 価格 As Currency
  価格 = 100
  Range("A1").Value = Format(価格, "#,##0")
End Sub
posted by Three bit com at 10:00| Excel(エクセル)