• ベストアンサー

ACCESS VBA xlsファイルのインポート  

accessのVBAでxls形式のファイルを既存のテーブルにインポートしたいんですが、インポートするファイルがテーブル形式になっていない状態(要望票みたいな感じなので不規則にデータが状態)なのでセルをひとつづつ指定して、テーブルに取り込んでいくことは可能なんでしょうか? どこのサイトを探してもCSV形式からのインポートの方法しか記述されておらずこちらで教えていただければ助かります。 またセルを結合しているのでその場合でもテーブルにインポートは可能なんでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

まず、 > セルを結合しているのでその場合でもテーブルにインポートは > 可能なんでしょうか? についてですが、これは可能です。 (Accessにインポート後の状態としては、Excelのセルの結合を  解除したときと同じになります) ただ、こちらが・・・ > インポートするファイルがテーブル形式になっていない状態 > (要望票みたいな感じなので不規則にデータが状態) インポート元のExcelファイルが、上部や左にヘッダや余白がある、 程度であれば、インポートしたい領域にExcel側で名前をつけて やることで、インポートウィザードを通すこともできるのですが・・・ もしも、インポートしたい領域の中で、1つの列に異なる意味の データが混在するようだと、かなり厳しいことになります。 (本当に、AccessのVBAで、Excelのセルをしらみつぶし的に  見ていくようなコードを自作するしかない、と) とりあえず、Excelでの「範囲への名前の付け方」は以下の通り: (多分調査先にそのファイルを配布したのかと思いますが、本当は  この操作をやってから複製・配布、とすれば、個別設定をせずに  済んだのですが(汗):  但し、配布先で範囲外にまで回答を記入されると、また手間が  掛かりますが) 1)Excelの当該ファイルを開き、当該シートを選択 2)メニューで「挿入(I)→名前(N)→定義(D)」を選択 3)『名前の定義』ダイアログが開くので、『名前』に適当な名前を  入力 4)『参照範囲(R)』の右端にあるボタンをクリック後、インポートの  対象範囲を選択し、Enterキーを押す 5)名前や範囲に問題がなければ、『追加(A)』ボタンをクリック 6)Excelファイルを保存 ・・・以上です。 これで、Accessで『ワークシート インポート ウィザード』を開き、 上記ファイルを指定して、シート選択ページで左上にある 『名前の付いた範囲(R)』を選択すれば、指定した範囲のデータ のインポートが行えます。 ・・・この程度で済むようなデータだとよいのですが・・・(汗) それと、これはこのサイトを使用する際のアドバイスになりますが、 問題が解決できなかったなら、良回答を出さない、という勇気も 必要かと思います。 (解決できていたのでしたらすみません) http://oshiete1.goo.ne.jp/qa5366284.html

anman0201
質問者

お礼

詳しい説明ありがとうございます。 上記のように定義をつくり試みたのですが、 コンボボックスの中身もテーブルにインポートしようとしたのですが、 セルでなければ参照範囲で指定できないものなのでしょうか? 質問ばかりですいません。 アドバイスお願いできますでしょうか?

その他の回答 (2)

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.3

No.2です。 > セルでなければ参照範囲で指定できないものなのでしょうか? そうですね・・・インポートウィザードで対象にできるのは、セルに 限られます。 (イメージとしては、インポート時の確認先は、対象シートの上を  キーボードのカーソルキーで移動できる範囲だけで、マウスを  使用しないと移動できないコンボボックスやオートシェイプ等は  対象外、といった感じでしょうか) ただ、Excel上の入力にコンボボックスを使用したとしても、VBAを 使用して、その更新時に値を特定のセルに記録してやるように すれば、間接的にインポートの対象にすることはできます。 (インポート時に、位置的に問題がなければ、コンボボックスの下に  隠れているセルが適当かと思います) なお、記録用となるセルについては、セルの右クリックメニューから 「セルの書式設定(F)」を選択して『セルの書式』ダイアログを開き、 『保護』タブ内にある『ロック(L)』と『表示しない(I)』のチェックを共に オンにした上で、シートの保護を有効にしてやれば、ユーザーから そこに記録された値を隠すことができますので、併せて参考まで。

anman0201
質問者

お礼

遅くなりましてすみません。 教えていただいたことを参考に無事インポートできました。 助けていただいてありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

質問の内容がわからないよ。 エクセルのシート上のデータ配置がどうなっているのか。 項目の内容(見出しのようなもの)はあるのか。無ければどうして見つけるのか。セルの位置から解析するのか。 1シートで言えば、何レコード分入っているのか。1シート1レコードか。 こんなことを質問に書くべきだと思う。 ーー エクセルの別シートに、エクセルで言うリスト形式、テーブル形式(項目名が最上行に在って、その列に同じ性格のデータが詰まっている)に、一旦エクセルVBAで作成し、修正したシートが完成後、一斉にアクセスのテーブルにインポートするほうが、初心者にはやりやすいとおもう。エクセルーエクセルだから。あとはアクセスのマクロ コマンド一発。 ーー ADOなどでアクセスのレコードを読み・書きできる力があれば、エクセルのセルデータを読みながら、アクセスのテーブルのフィールドにデータをセットする方法もできるだろう。 WEBに記事がほとんど無いのは当たり前。通常ではないことを、初心者がやろうとしている。 アクセスはテーブルからフォームを実現することを、エクセルでは ごっちゃにして実現しているのだから。

anman0201
質問者

お礼

アドバイスありがとうございます。 その方法も考えたのですが、結合したセルやコンボボックスの中身の とり方がわからずに出来ませんでした。 もう少し勉強してみます。 いつも回答ありがとうございます。

関連するQ&A

  • VBA で EXCELファイルをインポート

    VBAに詳しい方お助けください。VBAを使用して、データベースをつかってインポート(データベースファイルを開かずにデータの取り込み)を行いたいのですが良く分かりません。データベースは一つはCSVファイル、一つはXLSファイルです。取り込み先のEXCELファイルのSHEET1にCSVファイルのデータベース(SHEET1)、取り込み先のEXCELファイルのSHEET2にXLSファイルファイルのデータベース(SHEET1)とインポートするにはどのようなVBAの記述が必要ですか?色々と調べているのですがうまく行きません。EXCELは2003を使用しています。

  • Access VBAでファイルのインポートについて

    あるディレクトリにAccessのmdbファイルを置き、「インポート」フォルダを隣に置きます。 このフォルダ内にCSVファイルを置き、それをVBAでテーブル「tbl_import」にインポートさせたいのです。 ちなみにインポート後はディレクトリ「インポート」下層のディレクトリ「インポート済」に移動させたいのです。 下記例文では「file.csv」と書いていますが、このファイル名はインポートの都度、常に変わります。 インポートさせるファイルは常に一つです。 「*」を用いれば出来ると思っていたのですが、うまくいきません。 良い方法を教示いただけませんか。 DoCmd.RunSQL "DELETE * FROM tbl_import" DoCmd.TransferText acImportDelim, "インポート定義", "tbl_import", CurrentProject.Path & "\インポート\file.csv", True FileCopy CurrentProject.Path & "\インポート\file.csv", CurrentProject.Path & "\インポート\インポート済\file.csv" Kill CurrentProject.Path & "\インポート\file.csv"

  • Access VBA CSVファイルのインポート

    お世話になります。 VBAにてCSVファイル(タブ区切り)をインポートするのに、 以下のように記述してますが、エラーとなります。 なお、インポート先のtempテーブルはインポートするCSVファイルの フィールドと同じ並びで予め作成したものです。 DoCmd.TransferText acImportDelim, , "temp", path, True 「実行時エラー2391 貼り付け先のtempテーブルには、'フィールド1_ フィールド2_フィールド3'フィールドがありません。」 このエラーを見る限り、フィールド1~3が一つのフィールドとして 認識されているように見受けられます。 タブ区切りなのか、カンマ区切りなのかを指定するようなパラメタは あるのでしょうか。 なお、当該CSVファイルをウィザードより手動でインポートする分には 問題無くインポート出来ます。 ************** インポートするCSVファイルはユーザーにより見出し(フィールド)の 並びが異なる場合がある為、インポート定義を予め作っておくことが できない状況です。 ご教授の程、宜しくお願い致します。

  • Access2010でVBAでのインポート

    csvファイルを指定したテーブルにインポートさせるのですが、この最初のフィールドに主キーを付与させようとしています。手動でインポートする際はメニューで指定するので主キーが付与されるのですが、VBAではcsvファイルそのままの状態でしかインポートされません。 このテーブルは、毎月更新させるので、一度データを削除してインポートさせます。 Mypath & Fdnは階層指定です。 いろいろネットで調べて下記の構文でインポートはできるのですが DoCmd.TransferText acImportDelim, "222 更新データ インポート定義", "更新データ【更新根拠】(当月)", Mypath & Fdn & "\222 更新データ【請求根拠】.csv", True, "" 手動でインポートする時指定する”主キーを自動的に設定する”はどのようにすれば適用されるのかがわかりません。 どなたか教えてください。よろしくお願いいたします。

  • ExcelをAccess(VBA)にインポート

    お世話になります。 VBAによるExcelのインポートにつきましてご教授願います。 あるExcelファイルがあり、それをAccessにてインポート したいと考えております。 通常の表であれば、インポートすることは可能なのですが、 その表の上数行に表名や氏名があったり、見出しが2行に なっていて、片方が結合されるような状態です。 xxxx表                    ←表名 氏名:○○○○               ←氏名                          ←空白行                          ←空白行     上期         下期      ←セルが結合されている No A  B    金額  E  F  金額←ここを見出しとして 1                       インポートしたいところ 2 3 ※A~F及び金額にはそれぞれ値が入ってます。 このようなExcelファイルをVBAにてインポートすることは 可能でしょうか? それとも、ある程度はExcel上で加工する必要があるので しょうか? 宜しくお願い致します。

  • Access2000 csvファイルのインポート

    Access2000のVBAを使用してcsvファイルを用意されたテーブルにインポートをしたいのですが、 やっかいな条件があります。 ある決められたフォルダに複数のファイルが存在している、そこから全てのCSVファイルを読み込み、3フィールド目(1行目はタイトル行)の値が「"3"」のものだけインポートする。 あるフィールドには、255文字以上のフィールド(改行文字あり)があります。このフィールドはインポートしてもしなくてもよい 今までは、インポート定義を設定してインポートしていたのですが、csvファイルを判別して、インポート前にフィールドの判別をする方法がわかりません。また、255文字以上の対応もうまくいきません。   

  • VBAでCSVファイルをインポートする方法について

    VBAでCSVファイルをインポートする方法について OS:ウィンドウズXP Access Version:2000 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で作成できるとよいのですが、可能でしたら教えてもらえないでしょうか。 ※以下はVBAを作成する為に仮に用意し、読込を行っているcsvファイルと、VBAソースになります。 ○csvファイル名:インポート用csvファイル.csv 内容: ID,テキスト1,テキスト2,テキスト3,テキスト4,メモ1,メモ2, 1,a,A,z,Z,あ,ん, 2,b,B,y,Y,い,を, 3,c,C,x,X,う,わ, 4,d,D,w,W,え,ろ, 5,e,E,v,V,お,れ, 6,f,F,u,U,か,る, 7,g,G,t,T,き,り, 8,h,H,s,S,く,ら, 9,i,I,r,R,け,よ, 10,j,J,q,Q,こ,ゆ, <b>32</b><br />,,,,,, ○VBAソース Dim FN As String Dim Res As Integer WizHook.Key = 51488399 Res = WizHook.GetFileName(0, "", "", "", FN, "", _ "csvファイル(*.csv)|*.csv", 0, 0, 4, True) WizHook.Key = 0 If Res = 0 Then DoCmd.TransferText , "csvインポート定義", "インポートテーブル", FN MsgBox "csvファイルをインポートしました", vbOKOnly End If

  • EXCEL- VBA(CSVファイル→インポート)

    A列~F列になる複数(100個以上)のCSVファイルをエクセルファイルにインポートして更に個別にエクセルファイルとして保存したいのですが VBAでできるのでしょうか? 記憶マクロでやったらどうにもうまくいきません。 エクセルのVBAについては ほとんど知識ゼロなので困っております。 大変厚かましくありますが どなた様かご教授お願いできたらと思います!! 【元のファイルの状態】   ◆ファイル名「*.CSV」*は文字数それぞれ違います。   <例:tanaka.xls だったり 09福島.xls>  ◆入っているドライブ   TEXT;C:\Documents and Settings\AA_B\デスクトップ\練習  ◆A~F列にデータが入っている 【やりたいこと】    (1)A~F列はカンマ区切りで全て文字列としたい  (2)元のファイル名でエクセルとして保存したい「*.XLS」

  • Access2000のCSVファイルのインポートについて

    Access2000でCSVファイルをインポートしようと思っています。 インポート方法は、VBAで 「DoCmd.TransferText acImportDelim, , "テーブル名", "ファイル名"」を使用しています。 この時に、CSVファイルが次のようなデータです。 F1,F2,F3 0010,0200,0001A12 0011,0201,0021B12 (実際は、1000件近いデータです) これをインポートすると、 F1,F2,F3 10,200,1A12 11,201,21B12 となってしまいます。 頭の「0」を省きたくないのです。 文字列として取り込めないでしょうか? CSVのデータに""を自動でつける方法はないでしょうか? Accessの外部データの取り込みを使うと、文字列として指定できるのですが、VBAを使いワンクリックでデータを取り込もうとしています。 よろしくお願いします。

  • ACCESSで毎回CSVファイルをテーブルにインポートする

    ACCESSでGUIで毎回CSVファイルをインポートしていますが、 (テーブル→新規作成→デーブルのインポート) 自動化?VBA?することはできるのでしょうか。 ACCSESSは初心者でよくわかっていません。 よろしくおねがいします。

専門家に質問してみよう