質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

解決済

VBA コードのインデントについて

rebell
rebell

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

3回答

1評価

0クリップ

2929閲覧

投稿2018/10/31 07:04

編集2022/01/12 10:58

VBA応用(ADOでデータを取得する。)

上記URLのサイトを見てVBAの学習をしております。
以前はわからないコードについて質問させていただきました。

ソースレビューを受け手直しをしたのですがまだ見づらいと思っています。

誰が見ても見やすくするにはどうすればいいか教えてくださると助かります。

よろしくお願いします。

VBA

Option Explicit 'スコープがPrivateになっている定数 Private Const g_cnsTitle = "ADOによるMDBデータ取得" 'MicrosoftのOLEDBを使うことを宣言 Private Const g_cnsAdoConnectString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" 'Accessデーターベースのファイル名? Private Const g_cnsMdbName = "SampleCorp1.mdb" Public Sub GetMDBDateByADO() '変数を定義 Dim objFso As FileSystemObject ' FileSystemObject Dim dbCon As ADODB.Connection ' ADODB.Connection Dim dbRes As ADODB.Recordset ' ADODB.Recordset Dim objSh As Worksheet ' Excel.Worksheet Dim strFilename As String ' フルパスファイル名 Dim strConnection As String ' 接続文字列 Dim strSQL As String ' SQL文編集WORK Dim strToday As String ' SQL文本日編集WORK Dim lngRow As Long ' 行INDEX Dim lngCol As Long ' 列INDEX 'データベースのあるファイルのパス Set objFso = New FileSystemObject strFilename = objFso.BuildPath(ThisWorkbook.Path, g_cnsMdbName) ' Set objFso = Nothing 'オブジェクトへの参照を解除 '接続文字列の編集 strConnection = g_cnsAdoConnectString & strFilename & "';" 'データベースへの接続 Set dbCon = New ADODB.Connection dbCon.Open strConnection 'クライアントカーソル設定 dbCon.CursorLocation = adUseClient 'カーソルをクライアント側に持つか、サーバ側(例:Access)に持つかの設定 mdbはどちらにも持たない? '参照SQL文 strToday = "#" & Format(Date, "yyyy-mm-dd") & "#" '変換? strSQL = "SELECT H.[BUSYO_CD]" ' (00)部署コード strSQL = strSQL & " , B.[BUSYO_NM]" ' (01)部署名 strSQL = strSQL & " , H.[YAKU_CD]" ' (02)役職コード strSQL = strSQL & " , Y.[YAKU_NM]" ' (03)役職名 strSQL = strSQL & " , H.[SCD]" ' (04)社員コード strSQL = strSQL & " , S.[KANJI_SEI]+S.[KANJI_MEI]" ' (05)氏名(漢字) strSQL = strSQL & " , S.[KANA_SEI]+S.[KANA_MEI]" ' (06)氏名(カナ) strSQL = strSQL & " , S.[NYUSYA_YMD]" ' (07)入社日 strSQL = strSQL & " , S.[TAISYOKU_YMD]" ' (08)退職日 strSQL = strSQL & " FROM ((([MST_HAIZOKU] AS H" '取得したいテーブルを指定 strSQL = strSQL & " INNER JOIN [MST_SYAIN] AS S ON H.[SCD]=S.[SCD])" 'テーブルを内部結合 strSQL = strSQL & " LEFT OUTER JOIN [MST_BUSYO] AS B ON H.[BUSYO_CD]=B.[BUSYO_CD])" '外部結合 strSQL = strSQL & " LEFT OUTER JOIN [MST_YAKU] AS Y ON H.[YAKU_CD]=Y.[YAKU_CD])" '外部結合 strSQL = strSQL & " WHERE S.[NYUSYA_YMD]<=" & strToday '入社日と本日日付を比較・制限して検索 strSQL = strSQL & " AND (S.[TAISYOKU_YMD] IS NULL OR S.[TAISYOKU_YMD]>" & strToday & ")" ' strSQL = strSQL & " ORDER BY H.[BUSYO_CD],H.[YAKU_CD],H.[SCD];" 'クエリの結果を並べ替えする '参照SQL文の発行 Set dbRes = New ADODB.Recordset dbRes.Open strSQL, dbCon, adOpenKeysetm, adLockReadOnly 'Openステートメント ファイル開く '画面描画更新停止 描画を停止し処理を高速化 Call GP_StopSCUPD '標準モジュール 「ZZZ_Module」内の「GP_StopSCUPD」プロシージャを呼び出し 'シートの初期化 Set objSh = ThisWorkbook.Worksheets(1) With objSh If .FilterMode Then .ShowAllData .Rows("2:" & .Rows.Count).ClearContents IngRow = 1 '先頭レコードからEOFまで繰り返す End of Fileの略 Do Until dbRes.EOF '行を加算 IngRow = IngRow + 1 '全列をシートに展開 For IngCol = 0 To 8 .Cells(IngRow, IngCol + 1).Value = dbRes.Fields(lngCol).Value Next IngCol '次のレコードに移る dbRes.MoveNext Loop End With ' レコードセット、データベースを閉じる dbRes.Close Set dbRes = Nothing dbCon.Close Set dbCon = Nothing ' 画面描画更新復帰 Call GP_StartSCUPD End Sub

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。