質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

1回答

30323閲覧

Excel→Accessへのインポート時のフィールド別型指定

maru0014

総合スコア151

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2017/05/31 04:57

###実現したいこと

  1. VBAで既存のテーブルに対してフィールドごとにデータ型を一括変更
  2. VBAでExcelファイルをAccessへインポートする際にフィールドごとにデータ型を指定

上記のどちらか、もしくは下記問題を解決できる方法

###問題
TransferSpreadsheetで新規テーブルとしてExcelファイルをAccessにインポートする際に「長い文字列」になって欲しいフィールドが「短い文字列」としてインポートされてしまいデータが途切れているレコードが発生している。

###前提

  1. Accessの仕様上最初の数行のデータからフィールドの型を自動判別しているらしいということはわかりましたが判別させるためだけに無駄に長い文字列を作るということは出来かねます。
  2. インポート元のExcelファイルのフィールド、フィールド数は変動します。

###該当のソースコード

VBA

1Private Sub convertDataCsv2_Click() 2'CSVファイルの選択 3ReturnArray = GetFileName(True, "Excelファイル (*.xlsx)|*.xlsx", "インポート") 4importFilePath = ReturnArray(1) 5 6If importFilePath <> "" Then 7 'CSVインポートの実行 8 Debug.Print importFilePath & " のインポート開始" 9 DoCmd.TransferSpreadsheet acImport, 10, "data", importFilePath, True, "" 10 Debug.Print importFilePath & " のインポート完了" 11Else 12 MsgBox "キャンセルされました" 13End If 14 15End Sub

###補足情報(言語/FW/ツール等のバージョンなど)
Access 2013

以上、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

インポート定義を作成すれば良いかと思いま。この時にデータ型を指定できると思います。
Access2016であれば、外部データタブより、Excelからのデータ取込でインポート定義を作ることができます。
イメージ説明

後は、

VBA

1DoCmd.TransferText acImportFixed, "インポート定義", "取込先テーブル", "取込元ファイル"

とすれば上手く取り込めるのではないでしょうか?

投稿2017/05/31 06:30

motuo

総合スコア3027

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maru0014

2017/06/01 06:03

回答ありがとうございます。 補足情報にも記載したとおり当方の環境がAccess2013で、Excelファイルのインポート時には「インポート操作」は保存できますが、「インポート定義」の保存はできないようです。 また、前提2のようにフィールドはその都度データベースの更新に必要な項目以外削除された状態のExcelファイルのためインポート操作を保存して実行してもフィールド数が異なると正常に取り込まれないようです。 上記のことから実現したいことの1,2が可能であれば考えに至った次第です。 よろしくお願いいたします。
motuo

2017/06/01 06:37

なるほど… では、かなりいびつな力技ですが、エクセル側の処理として下記とする案はどうでしょうか? ①1行目にダミーデータを挿入。 ②文字列が多い列があった場合、ダミーの1行目に同じように長い文字列を入れる。 ③Access側で、インポート完了後にそのレコードを削除する
motuo

2017/06/01 06:43

または、VBAでエクセルを読み込んでその結果をもってCreate Tableするとか… いずれにしても、自動で一発でうまくいく方法を私は知らないですね…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問