アプリケーションとしてのVBA Excel(エクセル) VBA の役立つ Tips の紹介

アプリケーションとしてのVBA

テーブルを開く / データを抽出する



テーブルを開く / データを抽出する


  「社員テーブル」の部署コードと「部門テーブル」の部署コードを連結して読み込みます。
  
 
  社員テーブルは正規化をして冗長なデータは排除してあります。
  
  しかし、社員テーブルの部署コードは数字が入力されていてどこの部署かピント来ません。
 
 「社員テーブル」と「部門テーブル」を連結して、部課名を見やすく表示させます。
 
 こんな感じになります。
社員テーブル フィールドの連結

  単純に社員テーブルを読み込むには、
  SELECT フィールド名1,フィールド名2, ・・・・ FROM 社員テーブル
  
  ですが、テーブルを連結する場合は、
  SELECT フィールド名1,フィールド名2, ・・・・ FROM 社員テーブル
  LEFT JOIN 部門テーブル ON 社員テーブル.部署コード = 部門テーブル.部署コード
  
  こんなふうに書きます。
  
  更に、データを絞り込む場合には、
  SELECT フィールド名1,フィールド名2, ・・・・ FROM 社員テーブル
  LEFT JOIN 部門テーブル ON 社員テーブル.部署コード = 部門テーブル.部署コード
  WHERE フィールド名 = ○○○○
  
  とします。
  
  この辺は、ListView を使ったサンプルを参考にしてください。
  
Public Const ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="

Sub Read_Table()

    Dim DB_Connect                      As ADODB.Connection
    Dim DB_Record                       As ADODB.Recordset
    
    Dim MDB_Path                        As String
    Dim Prompt                          As String
    Dim File種類                        As String
    Dim xRow                            As Long
    Dim i                               As Integer
    
    Const DB_Name = "Personnel.mdb"
    
    'mdbファイルのパスを設定
    File種類 = "mdb (*.mdb),*mdb"
    Prompt = "「Personnel.mdb」を選択してください。"
    MDB_Path = Application.GetOpenFilename(File種類, , Prompt)

    Set DB_Connect = New ADODB.Connection
    
    DB_Connect.Open ConnectionString & MDB_Path & ";"
    
    Set DB_Record = New ADODB.Recordset
    
    DB_Record.ActiveConnection = DB_Connect

    xRow = 1
    Workbooks.Add
    Columns("F:F").NumberFormatLocal = "yyyy/mm/dd"
    
    DB_Record.Source = _
    "SELECT 社員番号 , 名前 , よみ , 性別 , 血液型 , 生年月日  , " + _
    "部門テーブル.部門名 ,  部門テーブル.課名  FROM 社員テーブル " + _
    "LEFT JOIN 部門テーブル ON 社員テーブル.部署コード = 部門テーブル.部署コード "
    
    DB_Record.Open

    For i = 0 To DB_Record.Fields.Count - 1
    
        Cells(xRow, i + 1) = DB_Record(i).Name
        
    Next
    
    xRow = xRow + 1
    Do Until DB_Record.EOF
        
        For i = 0 To DB_Record.Fields.Count - 1
        
            Cells(xRow, i + 1) = DB_Record(i)
            
        Next
        
        DB_Record.MoveNext
        xRow = xRow + 1
        
    Loop

    DB_Record.Close
    
    Set DB_Record = Nothing
       
    DB_Connect.Close
    
    Set DB_Connect = Nothing

End Sub



  サンプル をダウンロードして、ご使用ください。



Copy (C) 2005   アプリケーションとしてのVBA   All Rights Reserved.