Excel のワークシートSheet1の給料の平均値からの差分の絶対値を調べるSQL紹介します。
そのためには DAO(※Data Access Object の略)を利用します。ここで紹介す
る方法を実現するには、「Microsoft Office 14.0 Access database engine Object Library」が参照設定されていることが前提になります。
そのためには DAO(※Data Access Object の略)を利用します。ここでは、DAO を使ったデータベース検索方法を紹介します。
① 「Microsoft Office 16.0 Access database engine Object Library」を参照設定します。
② 参照設定したことで、DAOを利用できます。Excel ブックを用意して、標準モジュールに DAO を利用した次のコードを記載します。
Option Explicit
Public Sub Sample_ABSDiffAVG_DAO_01()
' DAO データベース設定用変数
Dim db As DAO.Database
' DAO レコードセット設定用変数
Dim rs As DAO.Recordset
' 単純なループカウンタ
Dim lp As Long
' 検索結果表示用文字列
Dim str As String
' "C:\Temp\仲間.xlsx"をデータベースとして開く。
Set db = DBEngine.Workspaces(0).OpenDatabase( _
"C:\Temp\仲間.xlsx" _
, False _
, False _
, "Excel 12.0;HDR=YES" _
)
' レコードセットを取得する。
Set rs = db.OpenRecordset( _
Name:=" SELECT 名前, 給料, ABS(給料 - AVG給料) AS 平均差分 FROM [Sheet1$], (SELECT AVG(給料) AS AVG給料 FROM [Sheet1$]) " _
, Type:=dbOpenDynaset _
)
' 対象レコードが1件以上存在するか調べる。
If rs.EOF Then
str = "(検索結果:0件)"
Else
' 検索できる全てのレコードを参照する。
Do Until (rs.EOF)
' 全ての検索結果をカンマ区切りで連結する。
str = str & rs.Fields(0)
For lp = 2 To rs.Fields.Count
str = str & "," & rs.Fields(lp - 1)
Next lp
str = str & vbLf
' 次のレコードに移る。
rs.MoveNext
Loop
End If
' カーソルを閉じる。
rs.Close
Set rs = Nothing
' データベースを閉じる。
db.Close
Set db = Nothing
' 検索結果を表示する。
MsgBox str, vbOKOnly
End Sub
③ Sample_ABSDiffAVG_DAO_01 を実行します。
コメントを残す