- ベストアンサー
ACCESS VBA xlsファイルのインポート
accessのVBAでxls形式のファイルを既存のテーブルにインポートしたいんですが、インポートするファイルがテーブル形式になっていない状態(要望票みたいな感じなので不規則にデータが状態)なのでセルをひとつづつ指定して、テーブルに取り込んでいくことは可能なんでしょうか? どこのサイトを探してもCSV形式からのインポートの方法しか記述されておらずこちらで教えていただければ助かります。 またセルを結合しているのでその場合でもテーブルにインポートは可能なんでしょうか? よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
まず、 > セルを結合しているのでその場合でもテーブルにインポートは > 可能なんでしょうか? についてですが、これは可能です。 (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
その他の回答 (2)
- DexMachina
- ベストアンサー率73% (1287/1744)
No.2です。 > セルでなければ参照範囲で指定できないものなのでしょうか? そうですね・・・インポートウィザードで対象にできるのは、セルに 限られます。 (イメージとしては、インポート時の確認先は、対象シートの上を キーボードのカーソルキーで移動できる範囲だけで、マウスを 使用しないと移動できないコンボボックスやオートシェイプ等は 対象外、といった感じでしょうか) ただ、Excel上の入力にコンボボックスを使用したとしても、VBAを 使用して、その更新時に値を特定のセルに記録してやるように すれば、間接的にインポートの対象にすることはできます。 (インポート時に、位置的に問題がなければ、コンボボックスの下に 隠れているセルが適当かと思います) なお、記録用となるセルについては、セルの右クリックメニューから 「セルの書式設定(F)」を選択して『セルの書式』ダイアログを開き、 『保護』タブ内にある『ロック(L)』と『表示しない(I)』のチェックを共に オンにした上で、シートの保護を有効にしてやれば、ユーザーから そこに記録された値を隠すことができますので、併せて参考まで。
お礼
遅くなりましてすみません。 教えていただいたことを参考に無事インポートできました。 助けていただいてありがとうございました。
- imogasi
- ベストアンサー率27% (4737/17069)
質問の内容がわからないよ。 エクセルのシート上のデータ配置がどうなっているのか。 項目の内容(見出しのようなもの)はあるのか。無ければどうして見つけるのか。セルの位置から解析するのか。 1シートで言えば、何レコード分入っているのか。1シート1レコードか。 こんなことを質問に書くべきだと思う。 ーー エクセルの別シートに、エクセルで言うリスト形式、テーブル形式(項目名が最上行に在って、その列に同じ性格のデータが詰まっている)に、一旦エクセルVBAで作成し、修正したシートが完成後、一斉にアクセスのテーブルにインポートするほうが、初心者にはやりやすいとおもう。エクセルーエクセルだから。あとはアクセスのマクロ コマンド一発。 ーー ADOなどでアクセスのレコードを読み・書きできる力があれば、エクセルのセルデータを読みながら、アクセスのテーブルのフィールドにデータをセットする方法もできるだろう。 WEBに記事がほとんど無いのは当たり前。通常ではないことを、初心者がやろうとしている。 アクセスはテーブルからフォームを実現することを、エクセルでは ごっちゃにして実現しているのだから。
お礼
アドバイスありがとうございます。 その方法も考えたのですが、結合したセルやコンボボックスの中身の とり方がわからずに出来ませんでした。 もう少し勉強してみます。 いつも回答ありがとうございます。
お礼
詳しい説明ありがとうございます。 上記のように定義をつくり試みたのですが、 コンボボックスの中身もテーブルにインポートしようとしたのですが、 セルでなければ参照範囲で指定できないものなのでしょうか? 質問ばかりですいません。 アドバイスお願いできますでしょうか?