pickup

目次

クエリの原則

こんにちは。伊川(@naonaoke)です。

今回は、クエリについて説明します。

何度かクエリは解説していますが、実際にサンプルをお見せしていません。

今日は実務で利用できる方法について紹介します。

問題提起

(株)IKAWAの阿久 世子男(アク セスオ)は同僚から下記の質問を受けました。

クエリってなに?

どのように解説したらいいだろうか?

解決策

回答
sesuo2.jpg
テーブルに入ったデータを変幻自在の形にするのがクエリと回答する。

 

クエリの解説

クエリの解説 作成手順その1 データベースを確認

上の図のようなデータベースがあるとします。

Now関数で表示できます。

しかし、なぜこんな面倒なことをするのでしょうか?

そもそも、時間までなんて必要ありません。

Year関数 Month関数 Day関数 Hour関数 Minute関数 Second関数がなぜあるのかを考えましょう。

システムを作成する側から考えると、Now関数で、すべての時間帯をデータベースに格納します。

そうすることで、日時、時間の対してのエンドユーザーの要望は、すべてつぶすことができます。

クエリの解説 作成手順その2 クエリ作成

Now関数によって格納されたデータは、上の図のように、どのような姿にも変化させることができるのです。

これが、クエリの凄いところなのです。

なせ、Year関数 Month関数 Day関数 Hour関数 Minute関数 Second関数があるのか理解できましたか?

Year関数 Month関数 Day関数 Hour関数 Minute関数 Second関数は、ユーザーの要望ではありません。

システム作成側が、後々の面倒を回避するために、作成した関数です。

そうすると、Left関数 Right関数 Mid関数も、勉強を始めたときは、さほど重要とは思いませんでした。

しかし、文字列を操作する場合に、ユーザーから要望が出そうな関数を、開発側があらかじめ用意したと思われます。


この用にクエリを作成しますが、もうひとつACCESSには強みがあります。


上の文章をSQL文といいます。

この文章で、クエリを作成しています。

この文章を自由自在に書くことができれば、一生、お金に困ることはないと思います。

そして、SQL文は、他のシステムでも共通の言語です。

そのSQL文を、一瞬で記載するACCESSは本当に凄いシステムなのです。

クエリの解説 作成手順その3 ACCESSでクエリを作成前に、Excelで作成する

ACCESSと同じデータベースがあります。

ACCESSを利用するときは、普通は、CSVファイルなどで、一括で貼り付けることが多いと思います。

その場合を想定して、ACCESSに転送する前にデータを変形することで、労働時間を短縮できます。

ACCESSにも転送されました。

Sub 日時変換()


Dim i As Long
maxrow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To maxrow

Cells(i, 3) = Year(Cells(i, 2)) & "年"
Cells(i, 4) = Month(Cells(i, 2)) & "月"
Cells(i, 5) = Day(Cells(i, 2)) & "日"
Cells(i, 6) = Hour(Cells(i, 2)) & "時"
Cells(i, 7) = Minute(Cells(i, 2)) & "分"
Cells(i, 8) = Second(Cells(i, 2)) & "秒"
Cells(i, 9) = Format(Cells(i, 2), "yyyy/mm/dd")
Cells(i, 10) = Format(Cells(i, 2), "ggge\年mm\月dd\日")

Next i


Dim con As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim conStr As String
Dim j As Long

conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ActiveWorkbook.Path & "\クエリ.accdb"
con.Open ConnectionString:=conStr
rs.Open Source:="MT_クエリ", ActiveConnection:=con, _
CursorType:=adOpenKeyset, LockType:=adLockOptimistic



j = 2
With rs
Do Until Cells(j, 1) = ""

.AddNew

.Fields("日時").Value = Cells(j, 2)
.Fields("年").Value = Cells(j, 3)
.Fields("月").Value = Cells(j, 4)
.Fields("日").Value = Cells(j, 5)
.Fields("時").Value = Cells(j, 6)
.Fields("分").Value = Cells(j, 7)
.Fields("秒").Value = Cells(j, 8)
.Fields("西暦").Value = Cells(j, 9)
.Fields("和暦").Value = Cells(j, 10)

.Update
j = j + 1
Loop
rs.Close
con.Close

End With


MsgBox "転送完了"
End Sub


 

ここがポイント

ここがポイント
Function8.png
ACCESSは、255までフィールドを設定できます。その中に、必要と思われるデータを格納しておけば、クエリで抽出できないデータはありません。ACCESSでは、VBAも重要ですが、クエリのほうがもっと重要なのです。

 

 

まとめ

今回のまとめ
sesuo6.jpg
今回の説明で、同僚も、クエリを理解してくれたようです。

今回のサンプルファイルは、No81です。

毎日の業務が、3時間短縮できます

わからない事を延々と考えるのは、無駄です。

  • なんで作動かないの?
  • もうやだ!VBAなんか嫌い!
  • ネットで調べても情報がない!

必ず作動するコードが、ここにあります。

スポンサーリンク

Twitterでフォローしよう

おすすめの記事