トップ > スキル : アプリケーション > VBA for Access > 応用編(Accessで使える活用技)
期間ごとのデータを抽出する
日々事案が発生する売上データなどを期間ごとにデータ抽出することはよくある作業です。四半期、年、月、日ごとのデータを抽出するにはいろいろな方法がありますが、DatePart関数を使うと比較的簡単に取り出すことができます。
■ DatePart関数
【書式】 DatePart(単位,日付)
- 単位:年は「yyyy」、月は「m」、日は「d」、四半期は「q」を指定する。
- 日付:日付として抽出するフィールド名。

① クエリをデザインビューで作成します。
② すべてのフィールドをデザイングリッドに追加します。右端のフィールドに「DatePart("m",[見積日])」と入力します。
③ [抽出条件]欄にパラメータクエリとして「[見積月を入力してください]」と入力します。
※ フィールドリストのすべてのフィールドを追加する時は、「*」記号をデザイングリッドに追加します。また、DatePart関数を記述したフィールドは抽出する条件のためのフィールドなので、表示のチェックは外します。
クエリを実行すると入力画面が表示されるので、見積月を入力します。

入力した月のレコードのみが抽出されて表示されます。

名前から姓と名を分割して表示する
テーブルで名前フィールドを作成する際、姓と名を分割して作成する場合と分割しないでひとまとめで名前フィールドを作る場合があります。テーブルで分割しないで名前フィールドを作成した場合、クエリでその名前を分割することができます。
文字列関数である、Left関数、Right関数、InStr関数、Len関数の組み合わせで作成します。
■ Left関数
文字列の左端から指定された文字数分の文字列を返します。
【書式】 Left(strString,lngCnt)
- strString:取りだす文字列を指定します。
- lngCnt:取りだす文字数。
■ Right関数
文字列の右端から指定された文字数分の文字列を返します。
【書式】 Right(strString,lngCnt)
- strString:取りだす文字列を指定します。
- lngCnt:取りだす文字数。
■ InStr関数
ある文字列の中から指定された文字列を検索し、最初に見つかった文字位置を返します。
【書式】 Instr([lngStart,]strString,strSearch[,lngCmp])
- lngStart:省略可能。検索の開始位置を設定する数式を指定します。省略した場合は、先頭の文字から検索します。またNull値が含まれるとエラーになります。
- strString:検索先の文字列を指定します。
- strSearch:検索する文字列を指定します。
- lngCmp:省略可能。文字列比較のモードを指定します。省略した場合はバイナリモードで比較します。
■ Len関数
指定された文字列の文字すまたは変数を格納するに必要なバイト数を返します。
【書式】 Len(strString)
- strString:任意の文字列式、または変数の名前を指定します。Null値が含まれると、Null値を返します。

① クエリをデザインビューで作成します。
② すべてのフィールドをデザイングリッドに追加します。右側に2つのフィールドを追加して、以下の式を入力します。
姓: Left([氏名],InStr([氏名]," ")-1)
名: Right([氏名],Len([氏名])-InStr([氏名]," "))
※ 日本語文字以外はすべて半角入力します。特に:(コロン)などの記号は注意します。
※ 姓の式は、氏名の左端からスペースの部分までの文字数を取り出します。-1はスペースを文字列から引いたものです。
※ 名の式は、氏名の右端から全体の文字数から姓の部分の文字数を引いた文字列を取り出します。
※ 分割する場合は、名前(氏名)は姓と名の間に空白があることを前提にします。

50音の行ごとにレコードを表示する
フィルタを使用することで、氏名や会社名などを50音の行ごとに表示することができます。ア行で始まる会社名、タ行の名前を一覧表示することによって大まかな検索結果が得られます。
フォームで設置するものは、オプショングループでそれぞれの行のトグルボタンとすべてを表示するボタンを配置します。

オプショングループの[名前]を「選択」と設定します。そして、オプショングループのイベントにプロシージャを作成します。

① オプショングループのプロパティシートを表示します。
② [イベント]タブの[更新後処理]プロパティをイベントプロシージャにして、ビルドボタンをクリックします。
③ 次のプロシージャを入力します。
Private Sub 選択_AfterUpdate() On Error GoTo AfterUpdate_Err Select Case 選択 Case Is = 1 DoCmd.ShowAllRecords Case Is = 2 DoCmd.ApplyFilter "", "[T_顧客情報マスター]![フリガナ] Like '[ア-オ]*'" Case Is = 3 DoCmd.ApplyFilter "", "[T_顧客情報マスター]![フリガナ] Like '[カ-コ]*'" Case Is = 4 DoCmd.ApplyFilter "", "[T_顧客情報マスター]![フリガナ] Like '[サ-ソ]*'" Case Is = 5 DoCmd.ApplyFilter "", "[T_顧客情報マスター]![フリガナ] Like '[タ-ト]*'" Case Is = 6 DoCmd.ApplyFilter "", "[T_顧客情報マスター]![フリガナ] Like '[ナ-ノ]*'" Case Is = 7 DoCmd.ApplyFilter "", "[T_顧客情報マスター]![フリガナ] Like '[ハ-ホ]*'" Case Is = 8 DoCmd.ApplyFilter "", "[T_顧客情報マスター]![フリガナ] Like '[マ-モ]*'" Case Is = 9 DoCmd.ApplyFilter "", "[T_顧客情報マスター]![フリガナ] Like '[ヤ-ヨ]*'" Case Is = 10 DoCmd.ApplyFilter "", "[T_顧客情報マスター]![フリガナ] Like '[ラ-ロ]*'" Case Is = 11 DoCmd.ApplyFilter "", "[T_顧客情報マスター]![フリガナ] Like '[ワ-ン]*'" End Select AfterUpdate_Exit: Exit Sub AfterUpdate_Err: MsgBox Err.Number & ":" & Err.Description Resume AfterUpdate_Exit End Sub
※ 行ごとにフィルタを実行するので、あいまい検索のLike演算子を使用します。
※ フリガナ(ここではカタカナになる)をフィルタ(絞り込み)に設定しています。
※ ApplyFilterメソッドは「フィルタの実行」のことで、引数はフィルタ名と抽出条件の2つになります。
◆ ApplyFilterメソッド
【書式】
ApplyFilter フィルタ名,Where条件式
- フィルタ名:テーブル、フォーム、またはレポートのレコードの制限または並べ替えを行うフィルタまたはクエリの名前を指定します。アクションのフィルタとして使う場合は空白にします。
- Where条件式:抽出条件の式を指定します。
動作を確認します。サ行の会社名を調べたい時は「サ」のトグルボタンをクリックすると、フィルタの実行が行われて、サ行の会社名が表示されます。
