VBA覚書
※自己責任でご利用ください。全部を検証しているわけではありません。あくまで自分のための参考程度でしかない。分野別に整理は時間があるときにするかもしれない。
1、DateValu(日付文字列) 文字列が表す日付の値を求める。
---------------------------------------------------------------------------------
2、Left(文字列,文字数) 文字列の左から指定した文字数分だけ取り出す。
---------------------------------------------------------------------------------
3、CCur(値)   値を通貨型に変換する。
---------------------------------------------------------------------------------
4、Clng(値)   値を長整数に変換する。
---------------------------------------------------------------------------------
5、Format([日付],"oooo") 設定にするとクロス集計などで正しく表示される。
以下は日付の表示書式です。
yy>00~99
yyyy>1900~999
m>1~12
mm>01~12
mmmm>January
d>1~31
dd>01~31
ddd>Sun
mmm>Jan
dddd>Sunday
oooo>1月
---------------------------------------------------------------------------------
6、マクロ名”AutoExec”としたら起動時に自動起動する。
---------------------------------------------------------------------------------
7、OpenForm  はフォームを開く。DoCmd.OpenForm
---------------------------------------------------------------------------------
8、OpenReport はレポートを開く、印刷
---------------------------------------------------------------------------------
9、Close はフォームを閉じる。DoCmd.Close acForm,Me.Nameは今現在開いているフォームを閉じるコード。
---------------------------------------------------------------------------------
10、SelectObject オブジェクトを選択する。
---------------------------------------------------------------------------------
11、ApplyFilter フィルタを実行する。
---------------------------------------------------------------------------------
12、ShowAllRecords フィルタを解除する。
---------------------------------------------------------------------------------
13、マクロをマクロVBAに変換するには、マクロ選択>ファイル>名前を付けて保存>貼り付ける形式>モジュール>保存。
---------------------------------------------------------------------------------
14、Private Sub bottn_Click()
DoCmd.OpenForm"住所録",acNormal,,"Clng(DateValue([誕生日])) >= " & CStr(Clng(DateValue([Forms]![メニュ]![誕生日])))
End Sub
---------------------------------------------------------------------------------
15、Exit Sub は抜ける。
---------------------------------------------------------------------------------
16、On Error GoTo Err  はエラーが発生しても次のコードを実行する。
On Error GoTo ラベル名
・・・・・・・・・
ラベル名:
MsgBox エラー発生しました。
---------------------------------------------------------------------------------
17、DoCmd.Maximize は画面最大化、DoCmd.Restore は元のサイズに戻す。印刷プレビューモードで開いたら、閉じる前に必ず、Restoreしなければならない。
---------------------------------------------------------------------------------
18、Where条件式はstLinkCriteriaという文字列変数に設定する。
stLinkCriteria = "(["フィールド名"]) like '*" & 条件.value & "*' "
---------------------------------------------------------------------------------
19、stLinkCriteria = stLinkCriteria & "and DateValue([誕生日フィールド]) <= " & CStr(Modul1.BirthDay) & " "
---------------------------------------------------------------------------------
20、ウィンドウの開き方
acNormal
acFormReadOnly
acWindowNormal
Minimize
Maximize
---------------------------------------------------------------------------------
21、WhereCond = ""は全部表示
   WhereCond = "([フィールド名]) = [Forms]![メイン]![フィールド名].Value"
---------------------------------------------------------------------------------
22、サブフォームの指定  Forms!メインフォーム名!サブフォーム名.Form!コントロール名
---------------------------------------------------------------------------------
23、Forms!フォーム名!コントロール名 と Me!コントロール名は同じ
---------------------------------------------------------------------------------
24、右辺から左辺へ値の代入
Forms!フォーム名!コントロール名 = 100
Forms!フォーム名!コントロール名 = "文字列"
Forms!フォーム名!コントロール名 = #02/31/2002#
---------------------------------------------------------------------------------
25、小数点を含むかもしれない場合にはデータの形をSingle型か Double型にすること。
---------------------------------------------------------------------------------
26、データ型変換関数
CBool Bool型に変換
CByte Byte型に変換
Clnt Integer型に変換
CLng Long型に変換
CSng Single型に変換
CDbl Double型に変換
CCur 通貨型に変換
CDate 日付型に変換
CStr 文字列型に変換
CVar 数値型に変換
---------------------------------------------------------------------------------
27、型の変換をするには変数に一度代入して使う。
---------------------------------------------------------------------------------
28、モジュールの宣言部に Option Explicit を追加すると定義してない変数を使えなくすることができる。
---------------------------------------------------------------------------------
29、and条件の書き方  hensu = (a >= 100) And (a <= 200)
---------------------------------------------------------------------------------
30、文字列を比較する hensuA = hensuB like "*あ*" 変数Bに あ という文字列が含まれいるか判定する。
---------------------------------------------------------------------------------
31、アクセスでは ひらがな、カタカナ、半角カタカナ は区別されない。
---------------------------------------------------------------------------------
32、ループを抜けるには Exit Do
---------------------------------------------------------------------------------
33、Functionプロシージャの注意点
1、戻り値のデータ型を宣言
2、コード内で戻り値を設定する。
3、変数と戻り値の変数を同じ型にする。
Private Function AAAAA() As String
............
AAAAA = "ああああ"
End Function
---------------------------------------------------------------------------------
34、ジェネラルプロシージャの場合引数は自分で設定しなければ自動では設定されない。
Private Sub AAAA(b As Integer,c As Integer) As Integer
..............
End Function
---------------------------------------------------------------------------------
35、変数 Dim と Static の違い
Dim>変数はプロシージャ内のみ有効
Static>変数はモジュール(例フォーム)を終了まで有効。
---------------------------------------------------------------------------------
36、モジュールレベル変数を宣言する。
1、通常 mCnt などのように先頭に m をつけることが多い。
2、Option Explicit
Private mCnt As integer
---------------------------------------------------------------------------------
37、パブリック変数は全てのプロシージャから利用できる。
1、通常 Public pCnt As Integer
---------------------------------------------------------------------------------
38、標準モジュールはデータベース全体で利用するプロシージャを書くところ。
---------------------------------------------------------------------------------
39、イミディテイウィンドはデバッグ用のコードを書くところ。標準モジュールでしか使えない。
---------------------------------------------------------------------------------
40、ローカルウィンドウは実行中の変数を表示するところ。
---------------------------------------------------------------------------------
41、レコードを抽出する

Private Sub コマンド12_Click()
Me.Filter = "商品グループ = '" & Me!txt条件 & "'"
Me.FilterOn = True
End Sub
---------------------------------------------------------------------------------
42、検索ボックスにデータが入ってない時の処理
If IsNull(Me!txt条件) Then
Beep
MsgBox "抽出する値を入力してください", vbOKOnly + vbCritical, "抽出"
Exit Sub
End If
---------------------------------------------------------------------------------
43、抽出を解除する。
Private Sub 解除_Click()
Me.FilterOn = False
End Sub
---------------------------------------------------------------------------------
44、リストボックスに抽出データを表示する。

Private Sub 抽出_Click()
Me!リスト結果.RowSource = "SELECT * FROM テーブル名 " _
& "WHERE フィールド名 = '" & Me!txt条件 & "'"
Me!リスト結果.Requery
End Sub
---------------------------------------------------------------------------------
45、リストボックスの初期化

Private Sub 初期化_Click()
Me!リスト結果.RowSource = ""
Me!リスト結果.Requery <===再クエリーの実行
End Sub
---------------------------------------------------------------------------------
46、サブフォームに抽出結果を表示する
Private Sub 抽出_Click()
Me!サブフォーム名.Form.Filter = "商品グループ = '" & Me!txt条件 & "'"
Me!サブフォーム名.Form.FilterOn = True
End Sub
---------------------------------------------------------------------------------
47、サブフォームの抽出解除。2度目の抽出をすると解除になる。
Private Sub 解除_Click()
Call 抽出_Click
End Sub
---------------------------------------------------------------------------------
48、タブシートによる切り替え(サブフォームボタンを非連結で使う)

Private Sub tabフリガナ_Change()
Select Case Me!tabフリガナ
Case 0: Me!lbl条件.Caption = "[ア-オ]*"
Case 1: Me!lbl条件.Caption = "[カ-コ]*"
Case 2: Me!lbl条件.Caption = "[サ-ソ]*"
Case 3: Me!lbl条件.Caption = "[タ-ト]*"
Case 4: Me!lbl条件.Caption = "[ナ-ノ]*"
Case 5: Me!lbl条件.Caption = "[ハ-ホ]*"
Case 6: Me!lbl条件.Caption = "[マ-モ]*"
Case 7: Me!lbl条件.Caption = "[ヤ-ヨ]*"
Case 8: Me!lbl条件.Caption = "[ラ-ロ]*"
Case 9: Me!lbl条件.Caption = "[ワ-ン]*"
Case 10: Me!lbl条件.Caption = "*"



End Select
Me!sub結果.Requery

End Sub
---------------------------------------------------------------------------------
49、フレームとトグルボタンによる切り替え(サブフォームボタンを非連結で使う)

Private Sub fra条件_AfterUpdate()
Dim criteria As String

Select Case Me!fra条件
Case 1: criteria = "市区町村よみ like '[ア-オ]*'"
Case 2: criteria = "市区町村よみ like '[カ-コ]*'"
Case 3: criteria = "市区町村よみ like '[サ-ソ]*'"
Case 4: criteria = "市区町村よみ like '[タ-ト]*'"
Case 5: criteria = "市区町村よみ like '[ナ-ノ]*'"
Case 6: criteria = "市区町村よみ like '[ハ-ホ]*'"
Case 7: criteria = "市区町村よみ like '[マ-モ]*'"
Case 8: criteria = "市区町村よみ like '[ヤ-ヨ]*'"
Case 9: criteria = "市区町村よみ like '[ラ-ロ]*'"
Case 10: criteria = "市区町村よみ like '[ワ-ン]*'"
Case 11: criteria = "市区町村よみ like '*'"
End Select

Me!sub結果2.Form.Filter = criteria
Me!sub結果2.Form.FilterOn = True

End Sub
---------------------------------------------------------------------------------
50、昇順・降順並べ替え(フレームとオプションボタン使用)

Private Sub fra表示順_AfterUpdate()
Select Case fra表示順

Case 1: Me.OrderBy = "市区町村よみ asc"
Case 1: Me.OrderBy = "市区町村よみ desc"
End Select

Me.OrderByOn = True

End Sub
---------------------------------------------------------------------------------
51、テキストボックスのデータがアルファベットか判定する。

Dim str As String

str = Left(Me!テキストボックス名,1)

If(str >= "A") And (str <="Z") Then
Else
Beep
MsgBox"アルファベッドではありません",vbOKOnly + vbInfomation,"アルファベッドチェック"
Cansel = True
---------------------------------------------------------------------------------
52、テキストボックスの入力文字数を数える。

Dim Length As Long

Length = Len(Me!テキストボックス名)

If Length <> 5 Then
Beep
MsgBox"5文字以上入力して下さい。",vbOKOnly + vbInfomation,"文字数チェック"
---------------------------------------------------------------------------------
53、パスワード
Private Sub コマンドボタン_Click()

If Me!パスワードテキストボックス名 = "password" Then
・・・・・・・・・・・・・・
Else
Beep
MsgBox"パスワードが違います。",vbOkOnly
End if

DoCmd.Close acForm,"パスワード画面フォーム名"

End Sub
---------------------------------------------------------------------------------
54、移動ボタン

Private Sub コマンド154_Click()
Me.Recordset.MoveFirst

End Sub
Private Sub 前へ_Click()
On Error GoTo Err_前へ_Click

DoCmd.GoToRecord , , acPrevious

Exit_前へ_Click:
Exit Sub

Err_前へ_Click:
MsgBox Err.Description
Resume Exit_前へ_Click

End Sub
Private Sub コマンド156_Click()
Me.Recordset.MoveNext

End Sub
Private Sub コマンド157_Click()
Me.Recordset.MoveLast

End Sub
---------------------------------------------------------------------------------
55、パスワードを登録するには
パスワード用フィールドのプロパティの定型入力>パスワードで設定すると
************で表示される。
---------------------------------------------------------------------------------
56、ADOオブジェクトはプログラムの中でデータベースを扱うことができる。
メモリー上でテーブルを開いてレコードを検索したり、値を変更できる。

Dim cn As ADODB.Connection '接続情報
Dim rs As ADODB.Recordset 'レコードセットオブジェクト
Dim length As Integer '入力した文字数

Set cn = CurrentProject.Connection 'カレントデータベースに接続
Set rs = New ADODB.Recordset '新規レコードオブジェクトを作成
rs.Open"テーブル名",cn,adOpenStatic,adLockReadOnly 'テーブル名をもとに読取専用のレコードオブジェクトを作成する。

・・・・・・・・・・・・・処理・・・・・・・・・・
rs.Find"フィールド名 = '" & Me!フィールド名 & "'"

rs.Close:Set rs = Nothing
+
cn.Close:Set cn = Nothing
End Sub
-------------------------------------------------
57、リストボックスの背景に色を付ける
Private Sub リスト_GotFocus()
Me!リスト.BackColor = RGB(206,255,255)
End Sub
-------------------------------------------------
58、検索には2つの方法がある。
1、クエリーを作成して検索する
2、フィルターを使用して検索する
-------------------------------------------------
59、レポートに連番を付ける。
1、非連結テキストボックス追加
2、コントロールソースに =[CurrntRecord]
---------------------------------------------------
60、並べ替えグループ化の使い方
1、普通にフィールドを昇順・降順とグループ化を設定できる。
2、フィールドに新しいフィールド名を入れてグループヘッダーを「はい」にする
と新しいセクションが追加できる。
------------------------------------------------------------------------------
61、先頭文字でグループ化する
1、プロパティの”グループごと”を”先頭の値”に設定
2、”グループヘッダーセクション”非連結テキストボックス追加
3、”コントロールソース”に =Left([フィールド名],2) 先頭2文字でグループ化
---------------------------------------------------------------------------------
62、日付/時刻型のフィールドの場合のグループ化
1、年・月・週・日・時・分・   四半期  などを指定できる
2、”グループヘッダーセクション”非連結テキストボックス追加
3、”コントロールソース”に  =Year([生年月日] & "年")
--------------------------------------------------------------------------------
============================================================
63、メイン/サブフォームは「リンク子フィールド」「リンク親フィールド」で同じ
フィールド名を設定することによりリンクされる。
-----------------------------------------------------------------------
64、リレーションシップが設定されていないと、ウィザードでメイン/サブフォームを
作成することはできない。
------------------------------------------------------------------------
65、今日の年齢を求める。
クエリーに演算フィールド作成して、
IIf(Format([生年月日]),"mm/dd")>Format(Date(),"mm/dd"),DateDiff("yyyy",[生年月日],Date())-1,DateDiff("yyyy",[生年月日],Date()))
-------------------------------------------------------------------------
66、データ削除
Private Sub 削除ボタン_Click()
On Error GoTo Err_SakujoErr

DoCmd.RunCommand acCmdDeleteRecord
Exit_削除ボタン_Click:
Exit Sub
Err_SakujoErr_Click:
DoCmd.CancelEvent
End Sub
-----------------------------------------------------------------------------
67、データ移動

DoCmd.GoToRecord acDataForm, "社員", acGoTo, 7

acFirst
acGoTo
acLast
acNewRec
acNext (既定値)
acPrevious
------------------------------------------------------------------------
68、データ登録
Private Sub 登録ボタン_Click()
Dim rec As integer

Beep

rec = MsgBox("登録しますか?",vbYesNoCancel + vbQuestion,"確認")

Select Case rec
Case vbYes
DoCmd.GoToRecord acDataForm,"フォーム名",acNewRec
Exit Sub
Case vbNo
DoCmd.RunCommand acCmdDeleteRecord
DoCmd.GoToRecord acDataForm,"フォーム名",acNewRec
Case vbCancel
End Select
End Sub
-----------------------------------------------------------------------------
69、誕生日を求める。

=IIf(Format([生年月日],"mm/dd")>Format(Date(),"mm/dd"),Datediff("yyyy",[生年月日],Date())-1,DateDiff("yyyy",[生年月日],Date()))
--------------------------------------------------------------------------------
70、集計関数
=Avg([フィールド名])
=Sum([フィールド名])
=Min([フィールド名])
=Max([フィールド名])
=Count([フィールド名])
=First([フィールド名])
=Last([フィールド名])

------------------------------------------------
71、複数条件に合致するデータを抽出
クエリーで同一の抽出条件行に「条件」を入力
------------------------------------------------
72、OR条件でデータ抽出
クエリーの抽出条件の行を変えて「条件」を入力
-------------------------------------------------
73、レポートにパラメータのデータを表示する。
1、非連結テキストボックスをレポートに追加する
2、テキストボックスの「コントロールソース」にパラメータの条件[開始日を入力]を設定する。
--------------------------------------------------
74、フォームのテキストボックスデータでサブフォームに検索結果を出したい
1、フォームに非連結テキストボックスを作成
2、新規クエリーの抽出条件に[Forms]![フォーム名][テキストボックス名]
3、非連結サブフォームのコントロールソースにクエリーを設定
4、マクロに「再クエリ」アクションを設定
5、再クエリーをボタンイベントに登録する。
------------------------------------------------------------------------
75、リストボックスに検索結果を出したい。
1、フォームにリストボックスを作成
2、新規クエリーの抽出条件に[Forms]![フォーム名][テキストボックス名]
3、非連結サブフォームのコントロールソースにクエリーを設定
4、マクロに「再クエリ」アクションを設定
5、再クエリーをボタンイベントに登録する。

------------------------------------------------------------------------
76、上記75のレポートを出力
1、クエリーをもとにウィザードでレポート作成
2、ボタンイベントに設定
------------------------------------------------------------------------
77、あいまい検索
クエリーの検索条件に
Like "*" & Forms![フォーム名]![コントロール名] & "*"
------------------------------------------------------------------------
78、フィルタ機能で検索(サブフォームにフォームに使っている場合のみ)
Private Sub 検索_Click()
Me!subサブフォーム名.Form.Filter = "フィールド名 Like '*" & Me!検索条件テキストボックス名 & "*'"
Me!subサブフォーム名.Form.FilterOn = True
End Sub
-------------------------------------------------------------------------
79、トグルボタンで「あかさたな」で抽出
1、フレームないにトグルボタンを複数作成。
2、サブフォームを作成する。ウィザードでテーブルに連結したデータシートを作成
3、フレームのイベントコードを設定

Private Sub fra条件_AfterUpdate()
Dim criteria As String

Select Case Me!fra条件
Case 1: criteria = "市区町村よみ like '[ア-オ]*'"
Case 2: criteria = "市区町村よみ like '[カ-コ]*'"
Case 3: criteria = "市区町村よみ like '[サ-ソ]*'"
Case 4: criteria = "市区町村よみ like '[タ-ト]*'"
Case 5: criteria = "市区町村よみ like '[ナ-ノ]*'"
Case 6: criteria = "市区町村よみ like '[ハ-ホ]*'"
Case 7: criteria = "市区町村よみ like '[マ-モ]*'"
Case 8: criteria = "市区町村よみ like '[ヤ-ヨ]*'"
Case 9: criteria = "市区町村よみ like '[ラ-ロ]*'"
Case 10: criteria = "市区町村よみ like '[ワ-ン]*'"
Case 11: criteria = "市区町村よみ like '*'"
End Select

Me!sub結果2.Form.Filter = criteria
Me!sub結果2.Form.FilterOn = True

End Sub
--------------------------------------------------------------------------------
80、タブコントロールを使って「あかさたな」で表示
1、タブコントロール作成
2、非連結サブフォーム作成
3、新規クエリー作成「抽出条件」に  Like[Forms]![フォーム]![条件テキストボックス]
4、非連結サブフォームのコントロールソースにクエリー設定

Private Sub tabフリガナ_Change()
Select Case Me!tabフリガナ
Case 0: Me!lbl条件.Caption = "[ア-オ]*"
Case 1: Me!lbl条件.Caption = "[カ-コ]*"
Case 2: Me!lbl条件.Caption = "[サ-ソ]*"
Case 3: Me!lbl条件.Caption = "[タ-ト]*"
Case 4: Me!lbl条件.Caption = "[ナ-ノ]*"
Case 5: Me!lbl条件.Caption = "[ハ-ホ]*"
Case 6: Me!lbl条件.Caption = "[マ-モ]*"
Case 7: Me!lbl条件.Caption = "[ヤ-ヨ]*"
Case 8: Me!lbl条件.Caption = "[ラ-ロ]*"
Case 9: Me!lbl条件.Caption = "[ワ-ン]*"
Case 10: Me!lbl条件.Caption = "*"



End Select
Me!sub結果.Requery

End Sub
--------------------------------------------------------------------------------
アクセスVBA覚書2