VBAリファレンス

正式にはVisual Basic For Applicationといいます。Visual Basic(以下VB)という開発言語を元にMicrosoft Office製品(ExcelやAccessなど)用に カスタマイズされたプログラミング言語で、Office製品を好みの環境にカスタマイズするのによくつかわれます。 VBを元にしているのでVBでも使用できるものがいくつかあります。

目次

  1. 基礎知識
  2. メッセージボックスを表示させる
  3. 値を別のデータ型に変換する
  4. 指定された値をもとにテーブル(クエリ)の指定された値を返す(DLookup)
  5. 最初または最後のレコードの値を抽出する
  6. フィールド内の最大または最小の値を抽出する
  7. 分岐条件式(IF・IIF関数)
  8. 日付のカスタマイズ
  9. 再描画
  10. 全レコード表示
  11. 可視設定
  12. ループ
  13. ファイルコピー
  14. レコード数取得
  15. フィルター(抽出)
  16. テーブル非表示
  17. レポートプレビューをウィンドウサイズに合わせる
  18. Access2000のリンクテーブルのパフォーマンスが遅い
  19. インポート
  20. エクスポート
  21. 昇順・降順

基礎知識

主な特徴
  • 変数に大文字・小文字の区別がない
  • 変数の使用には宣言が必要

基本構成
基本的にSub ~ End Sub が一つのブロックになり、 Sub から End Sub の間にコードを記述していく。

Option Compare Database
Option Explici

Private Sub Form_Open(Cancel As Integer)
' Minimize the database window and initialize the form.

    ' Move to the switchboard page that is marked as the default.
    Me.Filter = "[ItemNumber] = 0 AND [Argument] = 'Default' "
    Me.FilterOn = True
    
    DoCmd.Maximize
    
End Sub
  • DoCmd.Maximizeはウィンドウの最大化

コメントの記述
コメント化したい文の先頭に'(シングルクォート)をつける。

(例)’ここにコメント

※コメントとして認識されると文字は緑で表示される。
変数の定義
VBAでは変数を使用するには事前に使用宣言をしないと使えない。書式は
Dim 変数名 as 変数の型

メッセージボックスを表示させる

msgbox"メッセージ文","ボタン及びアイコン","タイトル バーの文字","ヘルプ ファイルの名前","コンテキスト番号"

(例)msgbox "あああ"
(例)msgbox "あああ" , 64 , "いいい"
(例)msgbox "あああ" , vbOKOnly + vbInformation , "いいい"

※第二引数から第五引数は省略可。
  第二引数は指定された定数(vbOKOnlyやvbOKCancelなど)か指定された値(0や1や2や64など)で表示します。
  省略するとボタンはOKボタンのみ表示されます。
※VBではMessageBox.Show("メッセージ文", "タイトル")

値を別のデータ型に変換する

値を通貨型に変換 → CCur(値)
値を長整数型に変換 → Clng(値)
長整数型の値をパーセント表示にする → Format(0.25,"#%")またはFormat(0.25,"パーセント")
数値を日付に変換 → Dateserial(2006,10,10)

指定された値をもとにテーブル(クエリ)の指定された値を返す(DLookup)

返される値 = DLookup("フィールド名", "テーブル名", "抽出条件")

抽出条件が数値型の場合
(例)商品名 = DLookup("商品名", "商品", "[商品ID]=" & "商品ID" & "")

抽出条件がテキスト型の場合
(例)金額 = DLookup("金額", "顧客情報", "[品名]='" & "品名" & "'")

抽出条件が複数の場合
(例)受注コード = DLookup("受注コード", "受注", "[得意先コード] = '0005' And [社員コード] = 204")

※返される値が複数見つかった場合は最初のレコードのフィールド値を返します。

最初または最後のレコードの値を抽出する

最初のレコードの値を抽出 → DFirst("フィールド名","テーブル名")
最後のレコードの値を抽出 → DLast("フィールド名","テーブル名") 最大の値を抽出 → DMAX("フィールド名","テーブル名")
最小の値を抽出 → DMIN("フィールド名","テーブル名") IFの場合
IF 条件式 THEN
条件が一致した場合の式・内容
ELSE
条件が一致しなかった場合の式・内容
END IF

IIFの場合
IIF(条件式,条件が一致した場合の式・内容,条件が一致しなかった場合の式・内容) ○年度表示
4月1日から年度が変わる場合
Year(DateAdd("m",-3,[日付]))

○月度表示
21日から月度が変わる場合
Month(DateAdd("d",-20,[日付]))

○年号表示
Format(日付,"gee.mm.dd")

○数値を日付型に変換
Format(日付元データ,"yyyy.mm.dd") DoCmd.RepaintObject acForm, "フォーム名" DoCmd.ShowAllRecords Me.[テキストボックス名].Visible = False(TrueがON) Do Until
~実行する処理~
Loop
Do Until rsA.EOF 'rsA(Aはテーブル名)のレコードが無くなるまで繰り返し処理
rsA.MoveNext 'rsAのカレントを次のレコードに移動 Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.CopyFile "コピー元.mdb","コピー先.mdb" Me.CurrentRecord
(例)If Me.CurrentRecord = 0 Then A else B End If Me.Filter = "[部品NO]=検索部品NO"
Me.FilterOn = True(TrueがON)
Me.Filter = "[フィールド名]=" & Me!テキストボックス名
Me.FilterOn = True Dim MyDb As Database, MyTable As TableDef

Set MyDb = CurrentDb
Set MyTable = MyDb.TableDefs("etcデータ")
'テーブルの非表示/表示 非表示=1,表示=0
MyTable.Attributes = 0
Set MyDb = Nothing
Set MyTable = Nothing メモリ開放 DoCmd.RunCommand acCmdFitToWindow

Access2000のリンクテーブルのパフォーマンスが遅い

バックエンド データベース内の各テーブルの "サブデータシート名" プロパティを [なし] に設定します。
1. バックエンド データベースのテーブルをデザイン ビューで開きます。
2. [表示] メニューの [プロパティ] をクリックします。
3. "サブデータシート名" プロパティを [なし] に設定します。
4. テーブルを保存して、閉じます。 Excelファイル(.xls)の場合
DoCmd.TransferSpreadsheet acImport, 8(インポート定義), table(テーブル名), strpass(インポート元のファイルパス),
True(先頭行をフィールド名とするかどうか), sheet(インポート元のシート名)
テキストファイル(.txt)の場合
DoCmd.TransferText acImportDelim, , table, strpass, True, sheet Excelファイル(.xls)の場合
DoCmd.TransferSpreadsheet acExport, 8, table, strpass, False, sheet
テキストファイル(.txt)の場合
DoCmd.TransferText acExportDelim, , table, strpass, True 昇順は
Me.OrderBy = "フィールド名"
Me.OrderByOn = True
昇順は
Me.OrderBy = "フィールド名 desc"
Me.OrderByOn = True

TOPへ
戻る