スポンサーリンク

050-VBA

ACCESSで給付金等の支給事務をするときの口座情報を入力するフォームの作成!金融機関コード・支店コード・金融機関名・支店名から相互に検索できるようにする!

へっぽこヘタレシステム管理者の管理人です。

さて、仕事をしていると・・・

小規模な給付金の支給事務等で、簡単なデータベースを内製する場合が割とあります。

エクセル等でやる方法もあるのですが・・・

管理人は、データベース的なモノを作成する場合は、必ずエクセルではなく、アクセスを使うようにしています。

これは・・・エクセルの場合では、生データが直で触れるので・・・

意図せず手がキーボードに触れた場合に、データが誤入力されたりする場合があるためです。

そうならないようにフォームを作る方法もあるのですが・・・

フォームを作るのであれば、エクセルよりもアクセスの方がはるかに簡単です。

SQLを簡単に記述できるのもアクセスのメリットです。

話はそれましたが・・・

給付金の支給事業等では・・・

必ず、口座情報の入力が必要となりますが・・・

振込データを作成するには・・・

金融機関コードと支店コードが必須となりますが・・・

一般的には、コードを書く欄がありませんので・・・

フォームに金融機関名を入力すると、自動的に金融機関コードが表示されて入力されるようにする必要があります。

また、支店コードも同様ですし・・・

反対に、金融機関コードから金融機関名を逆引きできる必要もあります。

作ろうと思うと・・・・これが案外難しい・・・

結構悩みました・・・

このフォームでは・・・

金融機関CDからでも金融機関名からでも相互に入力することができます。

同様に、支店CDからでも支店名からでも相互に入力可能です。

入力のベースとなる全国の口座一覧は・・・

ネット等から入手します。

金融機CD・金融機関名・支店CD・支店名の単なる一覧表です。

同様に入力するテーブルも・・・

金融機CD・金融機関名・支店CD・支店名の単なる一覧表です。

ここからは、本命の入力フォームの作成です・・・

管理人も試行錯誤の上、作成しましたが、これが正解のなのか分かりませんが・・・

意図する動作は出来ています。

入力するメインフォームに設定するテーブルは・・・

当たり前ですが【金融機関を参照する】テーブルではなく・・・

【入力先】のテーブルをしています。

フォームの各入力項目

  • 金融機関コード
  • 支店コード
  • 金融機関名
  • 支店名

は、それぞれコンボボックスとして、金融元のテーブルからSQLを駆使して表示させるようにします。

まず【金融機関コード】ですが・・・

同一の金融機関コードには、何個も支店コードが引っ付いていいますので・・・

とにかく、金融機関コードを重複を排除して表示させる必要がありますので・・・

金融機関キードのコンボボックスに設定する【集合値ソース】にSQLを仕込みます。

SELECT DISTINCT KZF_BNK.BNK_HON_CD, KZF_BNK.BNK_HON_NAME
FROM KZF_BNK
ORDER BY KZF_BNK.BNK_HON_CD;

【DISTINCT】を使い、金融機関コードと金融機関名の重複を排除して選択できるようにします。

次に、更新後処理として、SQLを走らせます。

Private Sub bnk_hon_cd_AfterUpdate()

    Set db1 = CurrentDb
    Set query1 = db1.QueryDefs("kzf_query")
    
    sql1 = " select "
    sql1 = sql1 & " distinct AA.bnk_hon_cd, AA.bnk_hon_name "
    sql1 = sql1 & " from "
    sql1 = sql1 & " KZF_BNK AA"
    sql1 = sql1 & " where "
    sql1 = sql1 & " AA.bnk_hon_cd =  '" & Me!BNK_HON_CD & "' "
    
    query1.SQL = sql1

  
    Me.BNK_HON_NAME = DLookup("bnk_hon_name", "kzf_query")
    Me.Refresh
    
End Sub

このSQLで、選択した金融機関コードから金融機関名を一意に選択するクエリを作成します。

一意に選択するには【DISTINCT】を使います。

さらに、フォームの金融機関名に【DLOOKUP】関数を使って、金融機関名を入力させます。

次に金融機関名からの金融機関コードの逆引きですが・・・

こちらも同様にコンボボックスの【集合値ソース】にSQLを仕込みます。

SELECT DISTINCT KZF_BNK.BNK_HON_NAME, KZF_BNK.BNK_HON_CD
FROM KZF_BNK
ORDER BY KZF_BNK.BNK_HON_CD;

【DISTINCT】を使い、金融機関コードと金融機関名を【DISTINCT】を使い、重複を排除して選択できるようにします。

次に、金融機関コードの更新後処理と同様に・・・

金融機関名の更新後処理として、SQLを走らせます。

Private Sub bnk_hon_name_AfterUpdate()

    Set db1 = CurrentDb
    Set query1 = db1.QueryDefs("kzf_query")
    
    sql1 = " select "
    sql1 = sql1 & " distinct AA.bnk_hon_cd, AA.bnk_hon_name "
    sql1 = sql1 & " from "
    sql1 = sql1 & " KZF_BNK AA"
    sql1 = sql1 & " where "
    sql1 = sql1 & " AA.bnk_hon_NAME =  '" & Me!BNK_HON_NAME & "' "
    
    query1.SQL = sql1

    
    Me.BNK_HON_CD = DLookup("bnk_hon_CD", "kzf_query")
    Me.Refresh
End Sub

このSQLで、選択した金融機関名から【DISTINCT】を一意に金融機関コードを選択するクエリを作成します。

さらに、フォームの金融機関名に【DLOOKUP】関数を使って、金融機関コードを入力させます。

次は支店コードです・・・

支店コードのコンボボックスのSQLについては、次のとおりです。

SELECT KZF_BNK.BNK_SIT_CD, KZF_BNK.BNK_SIT_NAME
FROM KZF_BNK
WHERE (((KZF_BNK.BNK_HON_CD)=[Forms]![koza_input_2]![bnk_hon_cd]))
ORDER BY KZF_BNK.BNK_SIT_CD;

【Where】で金融機関コードを指定して、選択した金融機関コードから該当する支店一覧を選択して・・・

支店コードのコンボボックスの【集合値ソース】とします。

同様に、支店コードの更新後処理として・・・

次のSQLを走らせます。

Private Sub bnk_sit_cd_AfterUpdate()

    Set db1 = CurrentDb
    Set query1 = db1.QueryDefs("kzf_query")
    
    sql1 = " select "
    sql1 = sql1 & " AA.bnk_SIT_cd, AA.bnk_sit_name "
    sql1 = sql1 & " from "
    sql1 = sql1 & " KZF_BNK AA"
    sql1 = sql1 & " where "
    sql1 = sql1 & " AA.bnk_hon_cd =  '" & Me!BNK_HON_CD & "' "
    sql1 = sql1 & " and AA.bnk_sit_cd =  '" & Me!BNK_SIT_CD & "' "
    
    query1.SQL = sql1

    
    Me.BNK_SIT_NAME = DLookup("bnk_sit_name", "kzf_query")
    Me.Refresh
    
End Sub

入力された、金融機関コードと支店コードから、支店名をユニークに特定して・・・

【DLOOKUP】を使って、支店名に入力させます。

支店名から支店コードの逆引きに関しては・・・

こちらも同様に、支店名のコンボボックスの【集合値ソース】にSQLを仕込みます。

SELECT KZF_BNK.BNK_SIT_NAME, KZF_BNK.BNK_SIT_CD
FROM KZF_BNK
WHERE (((KZF_BNK.BNK_HON_CD)=[Forms]![koza_input_2]![bnk_hon_cd]))
ORDER BY KZF_BNK.BNK_SIT_CD;

入力された、金融機関コードから、支店名の一覧表を選択します。

同様に支店名の更新後処理として、次のSQLを走らせます。


Private Sub bnk_sit_name_AfterUpdate()

    Set db1 = CurrentDb
    Set query1 = db1.QueryDefs("kzf_query")
    
    sql1 = " select "
    sql1 = sql1 & " AA.bnk_SIT_cd, AA.bnk_sit_name "
    sql1 = sql1 & " from "
    sql1 = sql1 & " KZF_BNK AA"
    sql1 = sql1 & " where "
    sql1 = sql1 & " AA.bnk_hon_cd =  '" & Me!BNK_HON_CD & "' "
    sql1 = sql1 & " and AA.bnk_sit_name =  '" & Me!BNK_SIT_NAME & "' "
    
    query1.SQL = sql1
   
    Me.BNK_SIT_CD = DLookup("bnk_sit_cd", "kzf_query")
    Me.Refresh
    
End Sub

入力された、金融機関コードと支店名から、支店コードを特定して・・・

【DLOOKUP】で支店コードを入力させます。

仕組みとしては以上となります。

アクセスのサンプルデータベースのダウンロードはこちらから

お試しは、Access Runtimuの2013で使用できます。

編集も場合は、アクセスのフルバージョンの2010以上で使用できます。

もう少しスマートなやり方があるのかもしれませんが・・・

管理人のレベルではこれしか思い浮かびませんでした。

ブログ開設に必要なドメイン取得、サーバーレンタル、ASPの登録等は、こちらのサイトから!

スポンサーリンク
スポンサーリンク

-050-VBA

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


関連記事

AI-OCR【Tegaki+Seisho】&RPA【WinActor】!特別定額給付金支給システムへの自動入力!急増シナリオで本格運用開始!

さて、平日週末関係なく、5月は休みなく連続勤務中の管理人です。 特別定額給付金の支給事務で5月のサビ残業が100時間を超過し身体が悲鳴をあげています。 その内に過労死するかもですね・・・ さて、いっき …

Excelで長い「if関数」からおさらば!ユーザー定義関数を使って関数を楽々作る方法!

長い「if関数」は、勘弁してほしい! さて、人事異動等で業務を引き継ぐと、前任者が作ったExcel(エクセル)ファイルを使う場面が良くあります。 そのまま使えれば良いのですが多くの場合、法令変わったり …

元祖国内RPAの【RocketMouse Pro】を試す!画像認識クリックはかなりの精度!

へっぽこヘタレ管理者の管理人です。 さて、高価な【WinActor】のライセンス問題があり・・・ 簡単な作業を安価に利用できるツールとして、いろいろと試してみていますが、 完全無料RPAの【マクロマン …

board-pic1

RPA【WinActor】VSパンチャー!どっちの入力が早いか? PDF化AI-OCRによる電子化に要する時間を含めてもRPAの勝ち!

さて、特別定額給付金【10万円】の支給事務で、日々サビ残に明け暮れる管理人です。 サビ残も130時間越え・・・ 過労死ラインを軽く超えています。 毎日RPA【WinActor】を動かして、申請書をひた …

Accessでユーザー定義関数を作る!基本はエクセルの場合と同じ方法でOK!

エクセル【EXCEL】でユーザー定義関数は、よく使いますが・・・ そういえば、アクセス【ACCESS】では、使った事がないなと思い・・・ 作り方を整理してみました。 基本はEXCELの場合と同じ 試し …

スポンサーリンク
スポンサーリンク
スポンサーリンク