重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

Function ExcelDataImport()

'On Error GoTo エラー

Dim varac As Variant
Dim varxls As Variant
Dim strrange As String

varac = "社員ID" '

varxls = "Excelのパス" '

strrange = "社員ID!A1:H100" ' --- C



DoCmd.DeleteObject acTable, varac ' --- D
If MsgBox(strmsg, vbOKCancel) = vbOK Then
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _
varac, varxls, True, strrange ' -- E
MsgBox "データ入力は、正常に完了しました。"
End If

Exit Function


End Function

こんなコードを書いてます。
これは、A1~H100までを取り込むコードですが、
A1から空白のセルまでよみこむコードの書き方が知りたいのです。

Excelからエクスポートしたほうがいいのはわかっていますが、
どうしてもACCESSからExcelをインポートしたいのです。

どんなコードを書けばいいのでしょうか?

質問者からの補足コメント

  • 回答ありがとうございます。

    今日は、A1:H20を読み込むとします。 このシートは顧客情報があるため、毎日データを削除します。
    明日は、A1:H30を読み込むというようにしたいのです。

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/04/18 23:55

A 回答 (2件)

試してみて不都合がありましたか?


以下標準モジュールの場合です。

Sub 取り込みテスト()
'On Error GoTo エラー
Dim varAc As String
Dim varXls As String
Dim strRange As String

varAc = "社員ID" '
varXls = "e:\small.xls" '
strRange = "社員ID!A:C" ' --- C

If MsgBox("Ready?", vbOKCancel) = vbCancel Then
Exit Sub
End If

If DCount("*", "MSysObjects", "name='" & varAc & "' and type=1") = 1 Then '※
CurrentDb.Execute "DELETE * FROM " & varAc
'DoCmd.DeleteObject acTable, varAc ' --- D
End If

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _
varAc, varXls, HasFieldNames:=True, Range:=strRange ' -- E
MsgBox "データ入力は、正常に完了しました。"
End Sub

毎回テーブルを削除するのはデータベースの肥大化につながりますので
削除クエリに替えてみました。---D
※でテーブルの有無を確認しています。
ただし、読み込むフィールド数(Excelの列数)が多くなったり
フィールド名(列名)が変わったりすると実行時エラーになります。
    • good
    • 0
この回答へのお礼

残業で試す時間がなく、返事が遅くなりました。
勉強になりました。

お礼日時:2015/04/20 23:44

strrange = "社員ID!A1:H100" ' --- C



strrange = "社員ID!A:H" ' --- C
なら全行読み込んでくれますけど?
そういう事ではなく・・・かな?
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!