アクセス担当のまみです。
毎回エクセルやCSVのフォーマットが決まっているデータの取り込みを手動でやっていたりしませんか?
せっかくデータを取り込んだのに、ファイルを削除し忘れていて、同じデータを取り込んじゃったりとか・・・
重複したデータを正常な状態に戻すのってとっても苦労しますね・・・
何かいい方法ないのかなぁなんて思って。
実は、ボタン1つでデータをインポートしてくれて、データを取り込んだらファイルを削除してくれる。そんな機能をVBAのコードを書くことで、可能になります!
今回はインポートの方法をご紹介しますね。
Contents
ファイルを準備しよう
まずはファイル名「インポート」で新規にファイルを作成しましょう。
テーブル1は使用しないので削除しておきましょう。
①「作成」タブから②「フォームデザイン」を選択し、表示されたフォームに③ボタンを4つ配置します。
デザインはお任せしますので、名前と標題を下記のとおりそろえておきましょう。
1つ目のボタンのプロパティーシート
名前 | btnエクセル |
標題 | エクセルをインポート |
2つ目のボタンのプロパティーシート
名前 | btn先頭 |
標題 | 先頭行を項目名に |
3つ目のボタンのプロパティーシート
名前 | btnCSV |
標題 | CSVをインポート |
4つ目のボタンのプロパティーシート
名前 | btn削除 |
標題 | ファイルを削除 |
それから、インポート用のエクセルとCSVを用意しましょう。
私は下記の記事で作成した「住所録」ファイルからエクスポートしました。
エクセルをインポート
ではさっそく「btnエクセル」からコードを追加していきましょう。
①「btnエクセル」を選択した状態で、②「イベント」タブからクリック時に「イベントプロシージャ」を選択してコードの画面を表示しましょう。
「Private Sub btnエクセル_Click()」と「End Sub」の間に下記のコードを追加します。
DoCmd.TransferSpreadsheet acImportDelim, 10, "T_住所録", "D:¥住所録.xlsx" MsgBox "インポートしました"
インポートする時にはacImportDelimを使用します。
テーブル名を「T_住所録」にしているので、「T_住所録」テーブルがない場合は新たに作成され、「T_住所録」テーブルがある場合には「T_住所録」テーブルにインポートされます。
“D:¥住所録.xlsx”の部分で、インポートするファイルの場所とファイル名を指定してるので、環境に合わせて変更してくださいね!
それでは、フォームビューで動作確認してみましょう。
このコードは、先頭行のないデータを取り込む時ってことになりますね。(下の様なデータ)
範囲を指定してインポートする
DoCmd.TransferSpreadsheet acImportDelim, 10, "T_住所録", "D:¥住所録.xlsx", False, "T_住所録$A9:H" MsgBox "インポートしました"
先頭行を項目名としてインポートする
それでは、先頭行を項目名としてインポートするように「btn先頭」に設定してみましょう。
その前に、先程取り込んだ「T_住所録」は削除か名前を変更しておいてくださいね。
では「Private Sub btn先頭_Click()」と「End Sub」の間に下記のコードを追加しましょう。
DoCmd.TransferSpreadsheet acImportDelim, 10, "T_住所録", "D:¥住所録.xlsx", True, "" MsgBox "インポートしました"
先ほどのコードに「, True, “”」を付け加えることで先頭行を項目名としてインポートしてくれます。「, “”」は省略可能です。
それでは、フォームビューで動作確認してみましょう。
CSVをインポート
それでは次に、CSVをインポートできるように「btnCSV」に設定してみましょう。
では、下記のコードを「Private Sub btnCSV_Click()」と「End Sub」の間に追加しましょう。
DoCmd.TransferText acImportDelim, , "T_住所録", "D:¥住所録.csv", True, "" MsgBox "インポートしました"
エクセルの時はTransferSpreadsheetだったところがCSVになるとTransferTextになります。
「, True, “”」をつけているので、先頭行のあるタイプの取り込みですね。
インポートしたらファイルを削除する
それでは、「btn削除」ボタンのクリック時に「イベントプロシージャ」を選択してコードの画面を表示しましょう。
「Private Sub btn削除_Click()」と「End Sub」の間に下記のコードを追加します。
DoCmd.TransferText acImportDelim, , "T_住所録", "D:¥住所録.csv", True, "" MsgBox "インポートしました" Kill "D:¥住所録.csv"
先ほどのCSVを取り込むコードの後に、「Kill “D:¥住所録.csv”」を加えてあげればいいんです。
これで、データをインポートしたらファイルが削除されます。
必要なデータでしたらバックアップを取っておいてくださいね!
※アクセス制限の関係でインポートはできても、ファイルの削除ができない場合があります。
フォームには「F_インポート」と名前をつけておきましょう。
まとめ
インポートについて理解が深まったかと思います。
ボタン1つでインポートできるようになると、他のことに時間が使えるようになりますね。