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

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

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

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

Q&A

解決済

2回答

1393閲覧

AccessでExcelを読み込んだ時のヘッダーを知りたい

d_neko

総合スコア108

Access

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

0グッド

0クリップ

投稿2020/12/14 05:38

編集2020/12/14 05:40

AccessでExcelを読み込んだ時に、すべてのデータ項目がExcelにあったか確認したいです。

例えば、以下のコードでExcelを、Accessの「t読込用」のテーブルに読み込んだとします。

DoCmd.TransferSpreadsheet acImport, , "t読込用", Me.TXT_path, True

Excelのデータのヘッダーは、A,B,C,Dとします。

しかし、Excelのヘッダーが、Cのない、A,B,C でもインポートされます。
その場合、Dのヘッダーがないことを確認したいです。

どうすれば、読み込んだエクセルのヘッダーを確認できるでしょうか。

とりあえず、エクセルを1行だけ読み込んで調べることにしました。
しかし、エクセルを1行だけ読み込む方法がわかりません。
調べても、CSVを読み込む方法しか見つかりません。

次に、エクセルを読み込んで、データのないところはヘッダーが無いことにしようと思いました。
しかし、その場合、エクセルにデータがない場合と区別できません。

よろしくお願いします。

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

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

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

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

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

guest

回答2

0

インポート自体を破棄する場合には、インポートしたテーブルに対し必要な項目でselectしてみてエラーで判断する方法もあります。
※[where false]とするとデータの読み込みは行われずSQL文がエラーかどうかだけの判断になります。

VBA

1 DoCmd.TransferSpreadsheet acImport, , "t読込用", Me.TXT_path, True 2On Error GoTo Err_Exit 3 Currentdb.OpenRecordset ("select [項目名], [項目名], ・・・ from t読込用 where False") 4On Error GoTo 0 5 6Err_Exit: 7 MsgBox "指定のレイアウトではありません"

項目の有無で判断して処理の分岐をさせるような場合には、Fieldsコレクションを調べる方が良いでしょう。

投稿2020/12/14 07:22

編集2020/12/14 07:24
sazi

総合スコア25195

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

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

d_neko

2020/12/14 07:50

回答ありがとうございます。 とても勉強になりました。 >項目の有無で判断して処理の分岐をさせるような場合には、Fieldsコレクションを調べる方が良いでしょう。 項目の有無でsqlを作ろうと思っています。だから、「Fieldsコレクションを調べる方」ってのがいいようです。
sazi

2020/12/14 07:52

蛇足ですが、Fieldsコレクションはインポートしたテーブルでも確認できますので、敢えてリンクテーブルを作らなくても良いと思います。
d_neko

2020/12/14 07:58

す、すみません・・・かなり動揺しています。 >敢えてリンクテーブルを作らなくても良いと思います。 インポートした後に、項目があったかどうかチェックできるのでしょうか? 今回やりたいことは、エクセルを読み込んで、そのデータの存在する項目を確認してSQLを作るです。
sazi

2020/12/14 08:24 編集

> インポートした後に、項目があったかどうかチェックできるのでしょうか? TransferSpreadsheet では指定したテーブル名で都度エクセルの内容で作成されるので、どのみちインポートするなら、インポートしたテーブルのFieldsコレクションを調べても同じことなので、リンクテーブルを作成しなくても良いという意味です。
guest

0

ベストアンサー

エクセルをリンクテーブルとして取り込んで、そのフィールドを確認すればいいでしょう。

vba

1Public Sub エクセルのフィールド確認() 2 DoCmd.TransferSpreadsheet acLink, , "tリンク用", Me.TXT_path, True 3 4 Dim db As DAO.Database, fld As DAO.Field 5 Set db = CurrentDb 6 For Each fld In db.TableDefs("tリンク用").Fields 7 Debug.Print fld.Name 8 Next 9 10 DoCmd.DeleteObject acTable, "tリンク用" 11 12End Sub

投稿2020/12/14 06:22

hatena19

総合スコア33715

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

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

d_neko

2020/12/14 07:39

回答ありがとうございます。 想像以上にシンプルな手順で、希望がかなえることができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問