• 締切済み

VBAでaccessのデータと比較…

エクセルVBAについてです。 正・誤の2列のみで構成されるエクセルの正誤表があります。フォームのボタン押下のイベントでこの正誤表の「誤」の列すべての値と、10項目程度からなるaccessのデータの正誤表の項目に該当する列の値を比較(検索)して、相違が見つかった場合に、accessデータの該当行をすべてCSV形式で出力するツールを作りたいです。 アタマが混乱中なので質問が分かりにくいと思いますが御力添え願えたら幸いです。

みんなの回答

  • potedora
  • ベストアンサー率47% (66/140)
回答No.3

今回のような処理は通常はACCESSで行うべきでしょうね。 ワークシート変換やCSV出力がマクロとしてあるので 作成も簡単です。 起動がEXCELからというだけなら、ACCESSにマクロを 作成して呼び出すという手もありますが、ADOかDAOを 使用するほうが処理の汎用度は高いでしょうね。 No.2の回答でも指摘されているようにEXCELはデータ量に 制限があるのでデータ量が少ないという前提ですが。 でもいろいろ諸事情があることでしょうから、VBAでの ADO処理のサンプルを以下に示します。 EXCELのセルとの比較、CSV出力は省略してあります。 Dim cnn As New ADODB.Connection Dim rst As New ADODB.Recordset Dim fld As ADODB.Field ' Open the connection cnn.Open _ "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=C:\db.mdb;" ' Open the table rst.Open "SELECT * FROM テーブル1 ", cnn ' Read all record While Not rst.EOF For Each fld In rst.Fields 'fld.ValueでACCESSの列値が取れるので 'EXCELのセルと比較してファイルにCSVで出力 Next rst.MoveNext Wend 'Close the recordset rst.Close cnn.Close 参考になれば幸いです。

  • Te-Sho
  • ベストアンサー率52% (247/472)
回答No.2

どこまでExcelでコントロールするのかで大きく変わってきますね。ACCESSのデータをOfficeリンクの機能を使ってExcelシートに落とし、そのシートをExcel内で比較するならシート同士の比較ですからExcelのVBAのみでも簡単に出来ると思いますが、直接ACCESSのテーブルやクエリをExcelで読み込むとなるとExcelVBA上でDAOやADOを使ってレコードを読み込みを行うようにしなければならないですね。 一回読んでしまえば、後は比較したレコードをワークシートに展開してCSV形式で書き込むだけですがレコード数の制限や性能を考えるとExcelVBAでと言う仕様は疑問ですね。

  • Te-Sho
  • ベストアンサー率52% (247/472)
回答No.1

ExcelのVBAでACCESSをコントロールするより、ACCESSのテーブルリンクでExcelシートをリンクしてACCESS内で処理した方が簡単だと思いますよ。

aiching
質問者

お礼

早速の回答ありがとうございます。 accessもExcelもまだわずかな知識しか無く、どちらが簡単~という判断はつきかねるのですが…今回はExcelVBAでコントロールするよう指示されています。 Te-Shoさまのご回答は、もう少し知識をつけて幾通りかのやり方を比較してみる段階での参考にさせていただけると思いました。 ありがとうございます。

関連するQ&A

  • 【VBA】エクセルからパワポの表に値を貼り付けたい

    エクセルに項目が縦に1列に並んでおり、その右隣の列に値Aがあるとします。 エクセルの項目と同じ文字列が書かれた表がパワーポイントにあり、その右側に値Aを貼り付けたいです。(表は項目が左に1列、右に値Aを入力したい列が1列ある形です。) エクセルと同じ文字列が入っている表があれば、その表の右側に値を代入するといった条件式をVBAで作成することは可能でしょうか。 エクセルのマクロはよく使っているのですが、パワポは全く分かりません。 実現可能かも含めご教示いただきたいです。

  • ExcelデータをAccessに取得させる方法

           エクセル           Access    A列   B列  C列      フェールド名  人 りんご みかん ばなな キャベツ    リンゴ  3   木村               木村  3    2    みかん  2   木村             小林             4    ばなな  4  小林               青木                   2    キャベツ 2  青木 のようにエクセルのデータでA列をAccessのフィールド名にし、もし無ければ、その項目名(りんご等)をフィールド名に追加させ、上の右図のようにAccessにデータを取得させるコードを作りたいと考えてます。  取得させる場合はExcellではなく、Access VBAで取得させたいです。  どんなコードを書いたらよろしいのですか?  分かる方がおられましたら、よろしくご指導くだされとうれしいです。  私のVBAのレベルですが、Access VBAは今回初めてで、Excel VBAは中級くらいかと思います。  よろしくお願いします。

  • エクセルでVBAを使ってセキュリティカードのデータ管理をしたい

    いつもお世話になります。VBA初心者です。 会社でセキュリティカードの導入を検討しているのですが、カード内に2種類のコードがあり、それぞれ別のプログラムで読みこんだものを手作業で紐付けなければならないので登録が難しく、VBAである程度登録を簡素化できないかと考えて投稿いたしました。手作業で行う場合の流れは以下のとおりです。 (1)プログラムを立ち上げ、登録する個人の個人コードを手打ち入力した後にセキュリティカードをリーダーにかざす。 (2)その後「保存」ボタンをクリックすると、所定の位置にCSVファイルが保存される。 (3)別プログラムを立ち上げ、リーダーにカードをかざすと、もう一種のコードデータがクリップボードにコピーされる。 (4)エクセルの管理表(A列に個人コード、B列に個人名;重複なし)を開き、CSVファイルも開く。 (5)CSVファイルのデータを個人コードをキーにして、VLOOK等でC列の該当するセルに紐付ける。 (6)紐付けられた該当セルの横のセル(D列)にクリップボードに保存されているコードデータを貼り付ける。 という流れなのですが、クリップボードからデータを貼り付ける作業が手作業なので、間違える可能性が高いです。 そこで、VBAを使って以下のような作業にしたいのです。 (1)CSVファイルとクリップボードにコードデータを保存する。 (2)管理表のエクセルデータを立ち上げ、プログラムを起動する。 (3)プログラムで自動的にCSVファイルのデータを読み込み、該当するセル(C列)にコードデータを割り当てる。 (4)該当したセルの横(D列)にクリップボードにコピーされているデータを貼り付ける。 という流れにしたいのですが、やり方をご存知の方、ご教授ください。

  • VBAでPPTからEXCELにデータをコピー

    こんにちは、ANIMと申します。 EXCELのVBAで下記を実現したいのですが、方法がわかりません。 ご存知の方、どうかご支援よろしくお願いします。 ・POWERPOINTの表のデータをEXCELのセルに貼り付けたい。 ⇒表のデータを手作業でコピーして、EXCELに貼り付ければよいのですが、   PPTのファイルが大量にありVBAで対応したいです。 ・POWERPOINTの表のデータをEXCEL VBAで取り込む方法がわかりません。  (TEXTのデータではなく、表の中のデータの取り込み方です) ・POWERPOINTの表の形式は同じ(例えば、3行5列の表)です。

  • VBAの質問です。

    エクセルVBAの質問です。商品と価格をCSVでデータを取り込んで別の表に商品一覧に価格の合計をSAMIFの常駐で出しているのですが商品項目が増えた場合に表に自動で追加できるようにしたいのですが、どのようなコードを書けばいいんでしょうか?是非教えていただけないでしょうか?

  • Excelの2つのBOOKのデータ統合のVBA

    Excelの2つのBOOKの項目が同じリストのデータを統合できるVBAを教えてください。項目は、処理結果、金額、年月日、番号、品名の5項目がA列~E列まででデータは複数行あります。VBAは初心者です。どうぞよろしくお願いいたします。

  • accessの読み取りデータ量について

    accessについて質問させていただきます。 扱いたいcsvが5万行×2000列(1Gbyte強)と膨大となっており、excel上でコピーして他のファイルに貼り付けるなど編集作業が一切できない状態となってます。そこでVisualStudioを用いてCのプログラミングで分割しようとしましたが、ファイルを開くfopen時点で「イメージサイズが最大許容サイズを超えています」と表示されエラーになります。 そこでネットで手段を探したところ、accessは大量のデータ処理に向いているとありました。最大255列?で分割していけるようなので、VBAを学んで挑戦しようと考えているのですが、そもそも自分が扱おうとしているデータ量をaccessで扱えるかが心配です。 推測の範囲でもよいので、回答お願いします。

  • excel vbaで複数のcsvファイルの読み込み

    100シート分のcsvファイルのデーターを一つずつ読み込んでexcelにコピーして使用してますが莫大な時間がかかって困ってます。 vbaを使用して作業を簡素化出来る事は出来ないでしょうか? ------------------------------------------ ※ csvの概要 excelで1枚のcsvファイルを開くとA列の11行目から65536行まで数値データがあります。 ※ vbaできたらよいなと思う仕様 そこで、複数のcsvファイルを選択して読み込むとCSV_データと言うSeetのA列の10行目から1枚目のcsvファイル、B列の10行目から2枚目のcsvファイルと言う風に選択した分のcsvを列に続けて数値データを貼り付けしてくれるvbaをご教授していただけると大変助かります。 不躾で申し訳ございませんが宜しくお願い致します。 excel2003 ------------------------------------------

  • ExcelをVBAで読み込むと

    ExcelデータをAccess VBAを使い、読み込んでテーブルに溜め込んでいます。 問題が1つあり、Excelのデータは他のシステムによって自動で作られています。 このExcelデータは1行目に見出しがあります。この見出しの列が時々追加されたり、削除さたりします。 例えば、下記の2列があるとします。読み込みたいのはID,NAMEのみです。 ID,NAME この2列が固定であれば、問題ありません。しかし、時々、 ID,SEIBETU,NAME と、SEIBETUという項目が追加されたりします。そうすると、Access VBAで読み取ろうとするとエラーが出ます(プログラムの修正をすればいいのですが)。 こういった問題を解決するには、何かいい方法はあるでしょうか?Accessでやっていますが、VB.NET、SQL Serverで解決できるなら、そちらを勉強して解決したいと思います。 よろしくお願いします。

  • Access VBA TransferTextについて

    すみませんAccess初心者です。 VBAのTransferTextでCSVファイルをAccessnoデータベースにインポートしようとしてるのですが、 あるフィールドが400バイトのデータがある場合は 255バイト目までしかインポート出来ないようになっているのでしょうか? もしそうであれば、他にインポートする方法はありますか? CSVファイルを1行ずつ読み込み、1フィールドずつテーブルに格納するという処理を行わなければいけないのでしょうか? よろしくお願いいたします。