
AccessVBAでcsvファイルをインポートするマクロを作っています。
現在、インポート定義を利用して、データ型を指定したインポートができているのですが、1点だけ問題があり、質問します。
インポートするcsvファイルのA列にIDが入力されています。
そのA列の末尾に、ID(数値型)ではない「<b>32</b><br />」という値が入っています。
Accessのテーブルでは、このIDのフィールドは数値型で管理している為、この1レコードだけ
エラーとなり、エラーテーブルが作られ、また、インポート先のテーブルには空のレコードができてしまいます。
この末尾の行については、IDではない「<b>32</b><br />」以外は何もデータが入っていない為、
インポートする必要がありません。
もし可能であれば、csvファイルのA列(Accessテーブルでは数値型のIDというフィールド)が数値ではない場合、
その行のインポートをスキップするような処理がVBAで作成できるとよいのですが、可能でしたら教えてください。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
もう一つのリンク先が同じところに
なっていました。以下です。
http://oshiete1.goo.ne.jp/qa5784777.html
ついでだから、方法を貼り付けておきます。
リンクの仕方は、データベースウインドウ
を表示したままで、
(1)ツールバーのファイルから、
外部データの取り込み→テーブルのリンク
(2)取り込み.CSVが置いてあるフォルダを
表示。
(3)ファイルの種類はテキストを選択。
(4)取り込み.CSVをクリック
(5)テキストリンクウィザードが起動
(6)区切り記号つきを選択
(6)カンマ選択
先頭行をフィールド名として使う
にチェック
(7)次に進みIDの選択確認
(8)リンク終了のメッセージ確認
以上で取り込み.CSVがテーブルとして
リンクされます。
No.3
- 回答日時:
すみません。
CSVをリンクさせる方法は以下のところの下のほうに記述しています。
CSVファイルをリンクしたテーブルと同じ
ように扱おうということです。
設定の初めのほうは普通の外部データベースの
テーブルをリンクさせるのと同じです。
途中から、CSVファイルのフィールドの
見出しの設定などが出てきます。
http://oshiete1.watch.impress.co.jp/qa5784777.html
文字が見づらければ、以下のサイトは以前の
表示をしています。ただログインはここの
IDが必要のようです。
http://oshiete1.goo.ne.jp/qa5786935.html
IsNumeric関数は関数の引数が
数値型であるか判定する関数です。
IsNumeric(引数)
CSVファイルのフィールドの型と
受け入れるテーブルの型が一致
していれば普通にテーブル間の
データの移動と同じように出来ます。
一度、この方法で確かめてください。
インポート定義の方法は確認してみます。
朝早く(夜遅く?)に回答いただき、ありがとうございます。
教えていただいた方法を試してみます。
また確認した結果をご報告させていただきます。
No.2
- 回答日時:
すみません、訂正です。
>インポートするテーブルをTABLEとし、
>フィールドは適当にAA,BB,CCとします。
の部分をID,AA,BBとします。
コードの中ではわかりやすくということで
ID,AA,BBにしています。
以上です。
この回答への補足
piroin654様、早速の回答、ありがとうございます。
教えていただいた方法を試すべく、IM.csvファイルにA、B、Cのフィールドを用意し、TABLEにID、AA、BBを用意してコードの実行を行ってみたのですが、「実行時エラー '3078': 入力テーブルまたはくえり'IM'が見つかりませんでした。そのテーブルやクエリが存在していること、または名前が正しいことを確認してください。」というエラーが出て、実行できませんでした。
アクセスを最近始めたばかりですべて手探り状態の為、やり方が間違っているのかもしれないのですが、テーブルリンクという方法を実行するのに、
IM.csvとTABLEを用意して、コードを実行するだけではいけなかったのでしょうか?
また現在は以下のコードでインポートを行っています。
※csvかxlsファイルを任意の場所から選択し、商品登録簿(テーブル)へインポートする。
Dim FN As String
Dim Res As Integer
WizHook.Key = 51488399
Res = WizHook.GetFileName(0, "", "", "", FN, "", _
"csv;xlsファイル(*.csv;*.xls)|*.csv;*.xls", 0, 0, 4, True)
WizHook.Key = 0
If Res = 0 Then
If Right(FN, 4) = ".csv" Then
DoCmd.TransferText , "csvインポート定義", "商品登録簿", FN
Else
DoCmd.TransferSpreadsheet , , "商品登録簿", FN, True
End If
MsgBox Right(FN, 3) & "ファイルをインポートしました", vbOKOnly
End If
このコードにIf IsNumeric(rs!ID) Thenというものを使用してみたのですが、やはりダメでエラーが出てしまいました。
Dim FN As String
Dim Res As Integer
Dim db As Database
Dim rs As Recordset
WizHook.Key = 51488399
Res = WizHook.GetFileName(0, "", "", "", FN, "", _
"csv;xlsファイル(*.csv;*.xls)|*.csv;*.xls", 0, 0, 4, True)
WizHook.Key = 0
If Res = 0 Then
If Right(FN, 4) = ".csv" Then
Set db = CurrentDb
Set rs = db.OpenRecordset(FN)
If IsNumeric(rs!ID) Then
DoCmd.TransferText , "csvインポート定義", "商品登録簿", FN
End If
Else
DoCmd.TransferSpreadsheet , , "商品登録簿", FN, True
End If
MsgBox Right(FN, 3) & "ファイルをインポートしました", vbOKOnly
End If
いろいろと知識がなくて折角いただいた回答を生かせず申し訳ないのですが、もしよろしければ、また回答いただけると幸いです。
下記、テーブル構成です。
AutoID(オートナンバー型)主キー:csvファイルにはないフィールドです。
ID(数値型):csvファイルのA列で、これの末尾のやつが問題となっています。
仕入日(日付/時刻型)
商品名(テキスト型)
登録日(日付/時刻型)
登録時間(日付/時刻型)
登録時価格(数値型)
更新日(日付/時刻型)
更新時間(日付/時刻型)
店頭価格(数値型)
商品説明(テキスト型)
備考(メモ型)
No.1
- 回答日時:
方法はいろいろですが、一つの案として
IsNumeric関数を使ってみます。
CSVファイルをIM.csvとし、フィールドは
適当にA,B,Cとします。
インポートするテーブルをTABLEとし、
フィールドは適当にAA,BB,CCとします。
CSVファイルのA列について判断しながら
インポートする方法ですが、一応
CSVファイルをテーブルとしてリンク
して使用する方法でコードを出してみます。
Sub funcインポート()
Dim db As Database
Dim rs As Recordset
Dim rst As Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("IM")
Set rst = db.OpenRecordset("TABLE", dbOpenDynaset)
rs.MoveFirst
Do Until rs.EOF
If IsNumeric(rs!A) Then
rst.AddNew
rst!ID = rs!A
rst!AA = rs!B
rst!BB = rs!C
rst.Update
Else
End If
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
rst.Close
Set rst = Nothing
db.Close
Set db = Nothing
End Sub
以上はIsNumeric関数の使い方という
ことで簡単にテーブルリンクで説明
しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- Excel(エクセル) エクセル テーブル機能の不明点 2 2022/04/14 14:10
- Outlook(アウトルック) 【 Windows 10 】アドレス帳に正しくインポートを完了させたい。 3 2023/04/23 13:41
- Access(アクセス) スキルシートのエクセルの項目に 2 2023/04/04 22:41
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- Access(アクセス) Accessにインポートした複数のテーブルを表示させる方法が分かりません。 1 2023/01/30 20:22
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Access(アクセス) Access2016のExcelインポートの機能のことで教えてください 1 2022/09/11 14:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイルメーカーでの集計
-
Accessで、固定アルファベット+...
-
Accessにてデータの更新
-
再度ACCESSについて質問です
-
初歩的な抽出方法に関して(Acc...
-
ACCESSデータベースにフィール...
-
AccessのデータをVBを使って置...
-
アクセスの空欄のテーブルについて
-
SQLで日付の更新は?
-
アクセスの正規化?
-
ACCESSクエリでの結合の仕方
-
ACCESSのフォームでアルファベ...
-
ACCESSでオートナンバーを任意...
-
アクセス フィールド名変更と別...
-
ACCESSでのマクロ、ソート、縦...
-
固有レコード識別子の選択とは??
-
アクセスフォームのデータ入力
-
access 2007 での jpgデー...
-
CSV入力 手動ではできるのにVB...
-
ご存知の方お助けください。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
INSERT INTO ステートメントに...
-
Accessのフィールド数が255しか...
-
ACCESSで400以上のフィールドが...
-
SQLServer2005のSQL文での別名...
-
アクセス エラーを数値「0」に...
-
accessのレポートで元になるテ...
-
Accessでテーブルの値をテキス...
-
ACCESSでの改行コード
-
ACCESSでテーブルのチェックを...
-
ExcelのデータをコピーでACCESS...
-
ACCESS検索★ある文字を複数のフ...
-
Access 昇順・降順で並び替え...
-
アクセス メモ型 255文字...
-
アクセス A列コピー B列貼り...
-
【Access】フォームで自動計算...
-
ACCESSでオートナンバーを任意...
-
Access:リンクテーブルマネー...
-
ACCESS VBAにてCSV...
-
Accessで、固定アルファベット+...
-
主キーはオートナンバー型のID...
おすすめ情報