• 締切済み

この仕様を実現するには、VBAとADOで充分なのでしょうか?足りませんか。

当方、SEを1年半経験して現在WEBサイト制作に携わっております。 以下の仕様を実現するため、足りない知識を補強しようとしております。 そこで、「○○の知識が必要」、さらに可能でしたらオススメの書籍など アドバイス頂ければ幸いです。 【仕様】 データベース(仮にMySQLとします)に、 テーブルAとBがあります。 Aは会員情報テーブルで、名前やメールアドレス、そして属性という項目を持っているとします。 (属性は仮に1~3という3種の数値だとします。) Bは、属性別の「メッセージ」を持つテーブルとします。 Aと連携し、たとえば仮に山田さんが属性1だとすると、 ------------- 山田様 ここに属性1のメッセージ ------------- というように、最後はエクセルに出力し、 印刷まで行うシステムを作りたいと考えています。 上記のようにエクセルとDBが連携するには、 VBAとADOに関して書いてある本から学べば足りるのでしょうか。 (現在、こういった判断が全くできないほどの知識量で困っております。  また、大きな書店で何冊か本を見ていましたが、mdbという拡張子の  データベースファイル?にアクセスする例しか載っておらす、  本当にこれで任意の外部DBにつなげるのか疑問に思っております。) ちなみに私の現状は、 ・SQL文は書けます。 ・VBもプログラミング経験が1年ほどあります。厳密にはVBAは未経験ですが。 ・必要な本を買えば、VBAなどのコードを理解することはできると思いますが、  今回の案件をゼロから自分で書くのは不可能な状況です。  (それで、本を探しております。似たような例が載っている本を読めば、  理解し、できる自信はあります。) 以上ですが、不足がありましたら申し訳ございません、 コメントにて随時補足させて頂きたいと思います。 どうぞ宜しくお願い致します。

みんなの回答

  • benelli
  • ベストアンサー率51% (78/152)
回答No.4

#2のものです。 スタンドアロンでDBとエクセルの連携をさせるのは技術的には簡単です。(中級者以上ならば、ですが……) VBAだけで考えても、参照設定でDB用のライブラリでも読み込んでSQLでアクセスすればどうにでもなります。 VBAとADOで十二分ですね。 そもそもADOでは必要な情報を取得するだけであり、デザインやら印刷やらそれ以外のことはすべてVBAでやればいいだけのことであります。 あとは、どの部分までをマクロ化し、どの部分を人間に任せるかというだけですね。マクロに任せれば任せるほど作るのが大変なのはお分かりでしょう。 お話を聞いていると、プログラミング云々よりもDBの設定やSQL文を作りこみのほうが大変かも知れないと思いました。 できることなら、どんな誤動作が起きてもDBをキズ付けないようにすることなど(DBのバックアップをとり、そこからSQLで取得するなど)安全面に気をつけたほうがよいかと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • tomo316
  • ベストアンサー率35% (51/142)
回答No.3

<というように、最後はエクセルに出力し、 <印刷まで行うシステムを作りたいと考えています。 ExcelとDBを連携させることほとんどの人ができると思います。 <後日こちらで(Web上ではない)前述のような流れで印刷し、 <印刷結果を郵送するという仕様です。 ANo.2の回答への補足を見ると、規模によりますが、手作業で封筒に摘めて、宛名を書いて、切手を貼って、ポストに投函すると言う仕様なのでしょうか? (私がユーザだったらそんなシステムめんどくさくていやだな)・・独り言 システムとともに業務フローを書いて整理することをオススメします。

全文を見る
すると、全ての回答が全文表示されます。
  • benelli
  • ベストアンサー率51% (78/152)
回答No.2

ExcelとDBを連携させること自体は簡単です。でも、WEBサイト制作が目的なんですよね? ローカル環境でExcelからDBにアクセスするのは至極簡単で、VBAでやるのもいいですがExcelの外部データ読み取り機能を使えば最悪言語の知識なしでも読み取れるのはおわかりかと思います。 ただ、ネット環境でこのようなことをするには情報が、というか方針があいまいすぎじゃないですかね。そもそもWEBサイト制作をするならExcelやADOなどは二の次であり、大事なのはサーバー構築やらJSPやらCGIやらHTMLやら動作環境などやら、そういったことを決めるのが先だと思います。 ひとまず、Excelを使わなくてはならない理由、WEBサイト制作との関連性、サーバー・クライアントの環境設定(Excelはどちらの環境に依存?)などを整理してみてはと思います。

hana3hana3
質問者

補足

アドバイスありがとうございます。 そして申し訳ありません、私の説明不足です。 今回の処理は、WEB上で行うものではなく、WEBサイトから 「診断」を希望して登録された方に、診断結果を 後日こちらで(Web上ではない)前述のような流れで印刷し、 印刷結果を郵送するという仕様です。 ご経験のある方からのアドバイス、大変有り難いです。 どうぞ宜しくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。
  • kani7
  • ベストアンサー率47% (110/231)
回答No.1

遥か昔にMySQLに繋いでデータをグラフ化するツールの一部を見たことがあります。 MySQL用のODBCプラグインのような物を入れた覚えがあります。 MySQLをADOで使うツールもあるようなので問題ないように思います。 むしろMySQLから得たデータをexcel形式にするツールの方が難しいような。 どこかで、HTMLを直接execlに食わせて表データとして扱う方法を 見た記憶がありますが見つけられませんでした。

参考URL:
http://www.mysql.com/products/connector/
hana3hana3
質問者

お礼

ご回答、ありがとうございました。 おそらく、不可能ではないと私も思うんですよね。 あとは、知識不足なので具体的な方法が一度分かれば、 マスターできると思うのですが・・。 こういう時、たとえば職場にそれができる先輩がいると 習得が早いのでしょうね。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルVBAについて

    はじめてのVBAで本を読んでも使い方がわからないので教えてほしいのですが シート1にこのような表を作成して   A    B    1山田   500 2伊藤 20000 3佐藤    50 ・ ・ ・ シート2に    A   B    C 1    請求書 2 3 山田 4 500円 というような請求書を印刷していくVBAを作りたいのですが人数については10人から300人とその時々で変化するのでデータがないときは 印刷もそこで終わりという風にしたいのですが、、、 よろしくお願いします。 エクセル2003 XPです。

  • oracleとexcelのADOによる連携について

    お世話になります。 excelからADOでoracleのデータベースにある テーブルの必要なデータのみを抽出してexcelに 書き出そうとしています。 excelのvbaコードで、まず、ADOコネクションの生成として、 「cn.Open "Provider=OraOLEDB.Oracle;Data Source=" & "DB名" & ";User ID=hpsuser;Password=○○○;", "○○○", "○○○"」と書き、 ADOレコードセットの生成で、 「 rs.Open "~(1)~", cn, adOpenDynamic, adLockOptimistic, adCmdText」 と書いていますが、上記「~(1)~」の部分がかなり長いクエリ文になっているからなのか、 エラーがかかってしまいます。 単純なテーブルのデータを呼び出す事しかできないのか、又、 長いクエリ文のデータを抽出したい場合どの様にしたら良いのか、 どなたかご親切な方、ご教示頂けます様、宜しくお願いいたします。

  • エクセルVBAでのvlookup関数の使い方

    エクセルでvlook up関数を用いたVBAを書こうと思っているのですが上手くいきません。 詳しい方がいらっしゃいましたら教えて頂けませんでしょうか。 使用しているエクセルは2010です。 いろいろ調べながら書いてみたのですが、繰り返しの処理かエラー処理が悪いようでVBAを実行することが出来ませんでした。 シート1にあるコマンドボタンを押すことで別シート(シート2、3)に入力されている値をもってくるというVBAを考えています。 Sheet1(取扱商品)にはA列に商品番号、B列に商品名、C列に管理者が入力されています。 D~H列には属性1~5というヘッダーだけがあり、コマンドボタンを押すことで、別シートから商品の属性が入ります。 Sheet1(取扱商品) 商品番号 商品名 管理者 属性1 属性2 属性3 属性4 属性5 001  桜   安部 002  薔薇  安部 002  薔薇  伊藤 004  梅   上田 007  水仙  伊藤 010  牡丹  榎本 ...(以下続く) Sheet2(データベース1) 商品番号 属性1 属性4 001  A1  A4 002      B4 004  D1     008  H1  H4 ...(以下続く) Sheet3(データベース2) 商品番号 属性2 属性3 属性5 001  A2      A5 003  C1  C3  C5 004      D3 011  K1  K3 ...(以下続く) 各シートの商品番号は1対1で対応していません。 Sheet1は商品番号が重複する場合があります。Sheet2、3は重複しません。 コマンド実行後のイメージは下記のような形です。 対応する商品番号、属性がない場合はnull入るようにしたいと思っています。 Sheet1(取扱商品) 商品番号 商品名 管理者 属性1 属性2 属性3 属性4 属性5 001  桜   安部  A1  A2      A4  A5 002  薔薇  安部              B4     002  薔薇  伊藤              B4     004  梅   上田  D1      D3         007  水仙  伊藤                     010  牡丹  榎本                     ...(以下続く) 要領が得ないところがあるかと思いますが、皆様のお知恵を拝借致したく、教えて頂ければ幸いです。 どうかよろしくお願い致します。

  • エクセルVBAでアクセスのテーブルインポート

    VBA初心者です。 エクセルのVBAでデータベースA.mdbのテーブルAをデータベースb.mdbにインポートするプログラムお教えて下さい。 '================================================ sub インポート () Set cn = New Connection'データベース接続 cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source="C:\A.mdb" ●ここにPG書くような感じだと思いますが。   cn.Close: Set cn = Nothing'後処理 End Sub '================================================ もし難しい場合、アクセスのVBAでインポートをするが、この実行をエクセルでするよなのでもいいです。この場合は、インポートされるb.mdb側のプログラムをエクセルで実行するようにしたいです。(A.mdbは多数あるため、変更が大変なため) よろしくお願い致します。

  • エクセルでこれを実現する方法

    エクセル上で、セルA1に1、A2に2・・・という感じで A10まで数字があるとします。 ここで私が知りたいのは、各セル内で重複している 数字がいくつ存在するか、ということです。 この場合でいうと、A1~A10に1~10まで重複なく数字が あるとすると、重複は「0」で、仮にA10に8という数字が合った場合 重複は「1」という情報を知りたいのです。 これをエクセル上で実現する方法は何がベストなのでしょうか。 (関数?VBA?その他・・・もしくは不可?) 実際の入力数値はお金(数十万単位)の上、 量も膨大ですのでオートフィル機能は非現実的だと 考えております。 関数やVBAは少々触ったことがあるレベルです。 大した知識はなく、ちょっと混乱気味で、 知識ある方のご意見・お知恵を拝借したく よろしくお願い致します。

  • Excel VBA でデータベース操作のできる関数

    データベースを扱えるソフトを作ろうと思ったら、通常 Access を使うことになると思うのですが、Excel で作ろうと思っています。 なぜかというと、Office Personal版を持ってる人にも使って欲しいからです。 Excel の1シートをひとつのテーブルに見立てて、簡単なデータベース操作をしたいのですが、それが簡単に行える関数はありますか? VBA の関数でも知りたいのですが、SQL文などで扱えるようになってるのがあればなおさらいいのです。

  • EXCELのVBAを用いたACCESSのデータベース操作の本について

    VBAの初心者です。 EXCELのシート上にあるデータをACCESSのデータベースに蓄積したり、ACCESSのデータベースからEXCELにデータを飛ばして加工したりしたいと考えています。できれば、ACCESSにVBAを記述するのではなく、EXCELにVBAを記述し、データの蓄積などをEXCELから行う方法を勉強したいのです。 自分が本屋で見た限りでは、ACCESSにVBAを記述する方法であれば様々な本が出版されているのですが、EXCELに記述する方法が書いてある本が見当たりません(たくさんあるのかも知れませんが)。皆様お勧めの分本を教えてください。 なお、自宅でEXCEL2000とACCESS2000、会社でEXCEL97とACCESS97を使っていますので、どちらでもいける本がいいです。 よろしくお願いします。

  • Excel VBAを用いて学習ソフトを作る

    こんばんは。 Excel VBAを勉強しています。 参考書を一通り目を通して次に何をしようと考えた結果、 VBAや他の言語を勉強するための簡単なソフトを作ることを思いつきました。 自分の案としては参考書や問題集に載っているコマンドやプロパティなどの 解説をあらかじめ疑似的なデータベースに登録しておき、 VBAのマクロを使って入力したワードを検索・表示するというものです。 そこで土台をまずしっかり作りたいのでDBの形式を固めたいのですが、 どのような形式で管理、登録するとよいでしょうか? 例えば現段階では、 別のExcelシート自体をDBとして、 セルごとに、管理番号・所属・名称・説明文・登録日時 の形で管理しようかと思っています。 またはテキストファイルにCSV形式でそのままDB代わりに使う、などです。 データ自体は手入力でコツコツ入れていくつもりなのでレコード数は そこまで増えないと思います。(多くて500行程度?) 別の媒体をDBとして使う案や、追加しておいた方がいい属性などありましたら お金がかからない範囲で教えてもらえるとうれしいです。よろしくお願いします。 ちなみにAccessはPCには入っていません。

  • VBAによるレコードの追加について。

    同じテーブル構造をもつ2つのテーブルあり、Aという名前のテーブルにBという名前のテーブルの1レコードを1度に追加するには、ACCESS2003のVBAでは、どのように記述すればよいのでしょうか?イメージは、下記のとおりです。 Set TBL = DB.OpenRecordset("A", DB_OPEN_TABLE) Set TBL2 = DB.OpenRecordset("B", DB_OPEN_TABLE) Do Until TBL2.EOF TBL.AddNew TBL = TBL2 ‘← ココの記述が分かりません。 TBL2.MoveNext TBL.Update Loop

  • VBAでADOの質問です。かなり困ってます。

    質問なのですが、 Sub excel_access4() Dim dbs As New ADODB.Connection 'ADOコネクション Dim rcs As New ADODB.Recordset 'ADOレコードセット Dim mydbF As String 'アクセス ファイル Dim mydbT As String 'アクセス テーブル Dim mtr As Variant 'エクセル 全データ Dim rcd As Long 'アクセス 行指定 Dim fld As Long 'アクセス 列指定 '例として acctest2.mdb の テーブル4 に書き込む mydbF = "acctest2.mdb" 'アクセス ファイル指定 mydbT = "テーブル4" 'アクセス テーブル指定 'アクセスデータベースを指定 dbs.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & ThisWorkbook.Path & _ "\" & mydbF & ";" 'アクセスデータベースを開く rcs.Open Source:=mydbT, _ 'A ActiveConnection:=dbs, _  'B CursorType:=adOpenKeyset, _ 'C LockType:=adLockOptimistic, _ 'D Options:=adCmdTableDirect 'E 'エクセルシート全データ範囲(2次元配列) With Worksheets("Sheet1").Range("A1").CurrentRegion Let mtr = .Resize(.Rows.Count - 1).Offset(1, 0).Value For rcd = LBound(mtr, 1) To UBound(mtr, 1) '1次行 rcs.AddNew 'LB:最小値(1) UB:最大値(5) For fld = LBound(mtr, 2) To UBound(mtr, 2) '2次列 'アクセスに行列で書き込み Let rcs.Fields(fld - 1).Value = mtr(rcd, fld) Next rcs.Update Next End With rcs.Close dbs.Close Set rcs = Nothing Set dbs = Nothing End Sub AとBはわかりますが、CDEは一体何をしているのかわかりません。 また実行すると実行時エラー3709がでます。 この実行時エラーの原因がさっぱりわかりません。 どなたか詳しい方お教え願えないないでしょうか?