• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Access VBA フィールドの追加とデータ)

Access VBAで指定フォルダの名簿.csvをインポートし、フィールドを追加する方法

このQ&Aのポイント
  • Access VBAを使用して、指定のフォルダにある「名簿.csv」をインポートし、テーブルの先頭にフィールド[Unique_ID]を追加し、値に[姓]と[名]を組み合わせてセットする方法を教えてください。
  • インポートする際に、姓が空白の場合はレコードを削除して、[Unique_ID]にnullを入れないようにしていますが、フィールドの追加とレコードの追加方法がわかりません。どのような方法がありますか?
  • また、このプログラムを実行する際に指定するフォルダは、VBA内で選択するようになっていますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.3

ADO・ADOX で変更できるかまでは探し当てていませんが Googleにあたり、どうも、キーワードとして ORDINAL_POSITION や OpenSchema 辺りが有効の様です。 参照するだけなら http://www.gizcollabo.jp/vbtomo/log/archive/choshoqa_24010_0.html とか色々ありますが 変更に関しては可能か否かも含めて見つけてません。 分かったら私めにも教えてくださいませ。<m(__)m> もう一つ レコードが 1,a 2, 3,c 4,d となっていた場合に 2のレコードを削除した時に、カレントレコードの位置が 1,aになるのか、それとも、3,cになるのかの確認も必要かも?

cricket5
質問者

お礼

お正月休みも含めて調べましたが、わかりませんでした。 結局、インポート元が対応することになりました。 ありがとうございました。

その他の回答 (2)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

決して茶々を入れるつもりではありません。ご了承ください。 >フィールド[Unique_ID]を追加して Set cn = CurrentProject.Connection Cn.execute "Alter Table 名簿 Add Column Unique_ID Char(12)" で出来るかと思いますけど、同姓同名の存在の可能性を考えると Unique_ID というフィールド名はそぐわないと思いません? >テーブルの先頭に DAOに参照設定が必要ですが CurrentDB.TableDef("名簿").Fields("Unique_ID").OrdinalPosition =0 で出来るかもしれませんがほとんど分かりません。(見た目には拘らない性格だし・・) Kiku さんの検証をご覧ください。 http://kikutips.blog13.fc2.com/blog-entry-74.html >rs.Open "名簿", cn, adOpenKeyset, adLockOptimistic rs.Open "SELECT * FROM 名簿 WHERE 姓 Is Not Null", cn, adOpenForwardOnly, adLockPessimistic にしておけば ループ中のIsNull判定が不要ですし、他のユーザーの変更も防げ、少し処理速度が上がります。 rs.edit rs!Unique_ID = rs!姓 & rs!名 rs.update で変更できますが、そもそも『姓』と『名』というフィールドがあるので クエリでも「姓名」に連結出来るので不要な処理とも考えられます。 また、Unique_ID に姓名をセットするなら レコードセットを廻さなくても更新クエリで一発だとおもいます。 UPDATE 名簿 SET [Unique_ID] = [姓] & [名] WHERE [姓] Is Not Null ※バックアップを取ってからお試しください。 ps. 『姓』にデータが無かったら消すのでしたか、なら DELETRE * FROM 名簿 WHERE 姓 IS NULL の削除クエリで。 説明下手で _(._.)_ 勘違い有っても <(_ _)>

cricket5
質問者

お礼

ご回答いただきありがとうございます。いろいろなご指摘、勉強になります。 フィールドの位置は、やはりADOでは、設定できないのでしょうか ちなみに、 インポートのデータがあまりにも大きいのと、10種類ほどインポートするため、姓=nullをテーブルから削除して、小さくしたいということを考えています。 名簿や姓、名としていますが、Stringでの説明しやすい名称にしております。 また、もろもろ事情がありまして、クエリではなくVBで行いたいのです。

noname#192382
noname#192382
回答No.1

この種の仕事はエクセルが得意ですから、データをエクセルに下請けに出してやったらいかがですか。 エクセルで第1カラムにカラムを挿入し、第2カラムのデータと第3カラムのデータをつないで第1カラムにいれる作業は次のプログラムで出来ます。データ数は3つの場合です。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2012/12/24 ユーザー名 : ' ' Dim mygyo As Integer Columns("A:A").Select Selection.Insert Shift:=xlToRight For mygyo = 2 To 4 Cells(mygyo, 1) = Cells(mygyo, 2) & Cells(mygyo, 3) '姓が第2カラム、名が第3カラムの場合 Next End Sub

cricket5
質問者

お礼

ご回答ありがとうございます。 今回は、アクセスでシステム化して、エンジン配布を考えておりますので、アクセスだけで完結したいのです。 VBAまで、作成していただいて、ありがとうございました。

関連するQ&A