AccessでExcelを操作する
AccessでExcelデータを扱う場合、イメージしやすいのはデータのインポートだと思います。
実際にExcelシートとAccessテーブルは構造が似ているので、データを移行させるのは簡単です。
Accessのテーブルを全選択して「コピー」してExcelに貼り付けることができます。(データはダミーです)
左上の全選択ボタンをクリックして「コピー」
Excelシートに貼り付け
あたかもExcel同士のように簡単にデータを移動できます。
逆にExcelシートをコピーしてAccessに貼り付けるのも同じ手順で可能です。
お手元のExcelシートをAccessにコピペするだけで、データベースは完成します。
このように整ったデータ、つまり「正規化」されたデータはAccessで扱うことができるので是非Excelから移行することをお勧めします。
Accessであれば数十万件のデータがあっても動作が遅くなるようなことはありません。
「正規化」について学ぶとデータベースの理解が早まりますので、Accessがなかなか理解できないという方は、一度Accessから離れて「正規化」について学んでみてください。
さてAccessでExcelデータを扱うことができることは理解できたと思いますがもう少し別の視点で考えてみます。
AccessでExcelのセルにデータを書き込む
先ほどの例ではデータを丸ごとやり取りすることができるのが分かりました。
今回のテーマではAccessのテーブルに保存された100名の従業員データをExcelの人事評価表に反映する方法を検討しています。
つまりAccessのテーブルデータをExcelのシートの反映したいということです。
Accessのテーブルにある「所属」「役職」「氏名」がExcelの各セルに反映されて保存できればExcelでの作業時間がかなり短縮できそうです。
人事評価表だけでなく年末調整の書類など、Excelで作成した書類に従業員の名前や住所を入力して配布したい場合など応用次第でかなり使えそうですね。
人だけでなく製品やサービスなど応用次第
印刷するために作成した手の込んだレイアウトのExcelの必要な部分にだけ
Accessからデータを書き込むことが出来れば仕事の幅が広がりそうな気がしませんか?
VBAコードを実行中…
Excelファイルが100個できました。流石にファイルを100個作るには数分かかりますが、手作業であれば1日では終わらないかもしれません。
何より入力ミスが発生するのは必至でしょう。
一番上の「あかぎ」さんのExcelファイルを開いてみます。
ちゃんとデータが反映されていますね。
当然間違いも発生しません。
「こんなことが出来るんなら、今やってる資料はもっと早く効率的に作れるんじゃないかな!」
「確かにそうね!」
興味を持たれた方は、是非ご連絡ください。
なにか閃いた方は、必ず効率化の道があると思います。
今回の作業は少し専門的なVBAコードが必要ですが、興味のある方は参考にしてみてください。
Excelのマクロを使用している方ならすぐ理解できると思いますが、AccessでExcelのオブジェクトを作成して100人分の処理をしているだけです。
500人でも1000人でも同じことができるのがプログラミングの強みですね。
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim rst As DAO.Recordset
Dim dbs As DAO.Database
Dim fName As String
Dim i As Integer
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("Sheet1")
Do Until rst.EOF
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open(CurrentProject.Path & "\人事評価シート.xlsx")
Set xlSheet = xlBook.Sheets(1)
xlSheet.Range("A4") = rst!所属
xlSheet.Range("B4") = rst!役職
xlSheet.Range("C4") = rst!名前
fName = CurrentProject.Path & "\" & rst!ふりがな & "_評価シート_" & Format(Now, "yymmddhhnnss") & ".xlsx"
xlApp.ActiveWorkbook.SaveAs FileName:=fName
xlApp.Quit
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
rst.MoveNext
Loop