ExcelからMySQLの更新・登録・削除の操作

このQ&Aのポイント
  • Excelのワークシートにマクロを登録し、MySQLのDBのレコードを更新・登録・削除する方法について教えてください。
  • ODBCドライバの設定や外部データの取り込みを行い、Excelで取り込んだデータを編集し、新しい商品を登録してMySQLのデータベースを更新することは可能ですか?
  • VBAのサンプルコードや解説など、初心者でも理解しやすい方法でExcelからMySQLの操作を行いたいです。
回答を見る
  • ベストアンサー

excelからmysqlの更新・登録・削除の操作

EXCELのワークシートにマクロを登録したボタンを設置して、 mysqlのDBのレコードを更新・登録・削除する事は可能でしょうか? SQLとかVBAの勉強も兼ねてテスト的に作ってみたいなと思っています。 上手くいけば仕事でも使えればとも思っております。 現在phpmyadminで作成したmydbがあります。 testというテーブルにid,商品名,価格,在庫というようなレコードがあります。 ODBCドライバ等の設定をして、EXCELの外部データの取り込みで、データを取り込む事は できました。 この取り込んだデータを編集したり、新たに新しい商品を登録して、データベースを更新 できるようにしたいのですが、可能でしょうか? VBAのサンプルコードなどあればご教示ねがいます。 因みに私のレベルはVBAもmysqlも素人なので、できれば解説などもしていただければ 尚助かります。 よろしくお願い致します。

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

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

あれま .Update を .MoveNext ではいかがでしょうか? データの抽出は同様のコードでできましたでしょうか? オブジェクトが開いている場合は、操作は許可されません を そのまま理解すると ほかのユーザーがデータベースを開いている いうことになりますが。 ほかのユーザーがデータベースを開いていても抽出はできるはずです。 とりあえず On Error GoTo Err の行を無効にして どこで エラーになっているか確認されてはいかがでしょうか? もし rs.Open Sql, con, adOpenStatic, adLockOptimistic あるいは .Update あたりでは? 同じ状況が確認できる環境ではありませんので、確実な回答ができません。

pikakichi2
質問者

お礼

ありがとうございます。 .MoveNext を試してみましたがダメでした。 On Error GoTo Err をコメントアウトしてエラーを確認してみるとご指摘通り rs.Open Sql, con, adOpenStatic, adLockOptimistic の行がエラーになっていました。 試しにコメントアウトして 'rs.Open Sql, con, adOpenStatic, adLockOptimistic にしてみると、ちょっとだけ先に進むのですが、 !ID = Cells(i, 1).Value のところでエラーになり、 現在の Recordset は更新をサポートしていません。 プロバイダか、選択されたロックタイプの限界の可能性があります。 というメッセージになります。 ロックタイプを指定してみたらいいのかなと思い con.Open connectionString のところに追記で con.Open connectionString, adOpenStatic, adLockOptimistic という風にしてみると access denied for user ''@'localhost' using password yes と、パスワードが違いますよというようなメッセージになってしまいます。 お手上げでしょうか。。。?

その他の回答 (3)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.4

別案ですが SQL文でできるかもしれません。 con.Execute ("Update costomer Set 氏名='山田' Where 会員番号='1000'") とかで実行してみてはいかがでしょうか? For i = 2 To Cells(1, 1).CurrentRegion.Rows.Count !会員番号 = Cells(i, 1).Value !氏名 = Cells(i, 2).Value !電話番号 = Cells(i, 3).Value !住所 = Cells(i, 4).Value .Update Next i の部分を For i = 2 To Cells(1, 1).CurrentRegion.Rows.Count NyID=Cells(i, 1).Value MeMess= Cells(i, 2).Value con.Execute ("Update costomer Set 氏名='" & MyMess & "' Where 会員番号='" & MyID & "'") MyMess = Cells(i, 3).Value con.Execute ("Update costomer Set 電話番号='" & MyMess & "' Where 会員番号='" & MyID & "'") MyMess = Cells(i, 4).Value con.Execute ("Update costomer Set 住所='" & MyMess & "' Where 会員番号='" & MyID & "'") Next i といった感じでしょうか? 重複しない会員番号があって、会員番号は変更しないという条件になりますが。 SQL文に強い人であればほかの書き方もあると思います。 ちなみにSQL Serverでは 更新できました。 ちなみに 追加は Insert 削除は Delete で可能です・

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

難しそうですね。 できないことはないと思いますが MySqlについての情報って調べてみましたが私も該当するような サイトが見つかりませんでした。 ちなみにAccessではできています。 でも仮にできたとしても追加と削除は運用であまり気にしたくても 大丈夫でしょうが、 データの内容を更新するとしたら、抽出したデータと更新する内容が 常に一致する条件が必要ですので複数のユーザーでひとつのデータベースを 活用する場合は注意が必要です。 でも 同じような方法でデータの抽出はできているのですよね。 近いところまで来ていると思います。 ちょっとほかのサイトで質問してはいかがでしょうか。 結果については、私もちょっと興味があります。 http://www.moug.net/ などではいかがでしょうか? お力になることができずごめんなさいです。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

現在のコードを提示してもらうと回答が付きやすいかと思います。 たぶん、今は http://www.cocoaliz.com/excelVBA/index/40/ で紹介されているような Recoredsetを使って データベースの内容を エクセルに抽出、表示できた所だと想定して回答いたします。 ちょっと検索しましたがmysplの場合の >この取り込んだデータを編集したり、新たに新しい商品を登録して、データベースを更新 について見かけませんでしたので Accessの場合ですが データを新しく登録する場合の例がありました。 http://www.moug.net/tech/exvba/0150040.htm この取り込んだデータをエクセルで編集し、データベースの内容を置き換える場合は 上記のサイトの .AddNew !伝票番号 = Cells(i, 1).Value !日付 = Cells(i, 2).Value !コード = Cells(i, 3).Value !得意先 = Cells(i, 4).Value !金額 = Cells(i, 5).Value .Update の .AddNew を抜いたコードで考えてみてください。 修正の場合は、エクセルに抽出したデータが編集中にほかのユーザーで変更されないことなど 注意して使うことになります。 エクセルのシートの上には 抽出のボタンと抽出した内容を編集後に、データベースの内容を置き換えるボタンをおいて活用しています。 参考までに http://www.moug.net/tech/exvba/0150041.htm データを削除する場合のサンプルがあります。

pikakichi2
質問者

お礼

ご回答いただき、ありがとうございます。 早速 http://www.moug.net/tech/exvba/0150040.htm の分のサンプルコードを参考にして、下記のような形にしました。 Sub 追加() Dim con As ADODB.Connection Dim rs As ADODB.Recordset Dim connectionString As String Dim sqlStr As String '接続文字列 connectionString = "Driver={MySQL ODBC 5.1 DRIVER};" _ & " SERVER=localhost;" _ & " DATABASE=torys;" _ & " USER=root;" _ & " PASSWORD=;" 'ADODB.Connection生成 Set con = New ADODB.Connection On Error GoTo Err 'MySQLに接続 con.Open connectionString 'SQL文 sqlStr = "select * from customer" 'SQL文実行 Set rs = con.Execute(sqlStr) rs.Open Sql, con, adOpenStatic, adLockOptimistic With rs 'シートの項目行(1行目)を除いてデータ行数分ループ For i = 2 To Cells(1, 1).CurrentRegion.Rows.Count !会員番号 = Cells(i, 1).Value !氏名 = Cells(i, 2).Value !電話番号 = Cells(i, 3).Value !住所 = Cells(i, 4).Value .Update Next i End With 'クローズ con.Close Set rs = Nothing Set con = Nothing Exit Sub Err: Set rs = Nothing Set con = Nothing MsgBox (Err.Description) End Sub すると、 「オブジェクトが開いている場合は、操作は許可されません」 というメッセージが表示されます。 どこが問題でしょうか… どんくさい質問で申し訳ありません。

関連するQ&A

  • MySQLにEXCELやCSVなどでの一括登録

    レンタルサーバー上のMySQLにローカル上のEXCELで作成するデータを登録しようとしています。 過去ログ等を調べたのですが、自分で質問することにしました。 http://oshiete1.goo.ne.jp/qa1244588.html MySQLとPHPでwebに公開するサイトを作っています。 データベースはphpMyAdminより操作しています。 データ登録時なのですが、登録する項目(フィールド)と、件数(レコード)が多いので、 phpMyAdminだと一度に登録できるのが、2件とブラウザ上での作業になるので、 間違いや、確認等の効率がかなり悪くなります。 エクスポートでEXCELやXML、CSVなどがあるので、インポートでも使えるのではないかと考えました。 そこで過去ログやweb上で情報を探し、CSVなどをインポートしてみたのですが、エラーが表示されます。 過去ログで見つけました、ODBCドライバというのは必要なのでしょうか。 またそれはレンタルサーバーでも使用可能なのでしょうか。 EXCELなどのソフトを使って、ローカル上でデータを作成・管理したいと考えています。 何か良い方法はないでしょうか。 環境: Mac OSX.4  (基本Macで作業しています) Windows XP sp2 レンタルサーバ: MySQL 4.1.10a phpMyAdmin 2.6.4-pl4 PHP4(ver.4.3.8) 宜しくお願いします。

    • ベストアンサー
    • MySQL
  • ExcelからMySQLを編集する

    基本的な質問で申し訳ないのですが、ExcelとMySQLをODBCで接続し、Excelで入力した文字をMySQLに登録させるようにしたいのです。 ODBCのインストールはできました。そのあとExcelでどのような設定をすればよいのでしょうか??

    • ベストアンサー
    • MySQL
  • Access -> MySql

    AccessからMySqlに接続しようとしているのですが、なかなかうまくいきません。 ODBCでデータソースを作成するところまでは出来ているのですが (TestでもSuccess:connection was mode!とでています) Accessを起動し 「ファイル」->「外部データの取り込み」->「テーブルのリンク」を選択し出てきたダイアログの「ファイルの種類」でODBCデータベースを選択するのですが、「データソースの選択」ダイアログが出てきません。 何に問題があるのでしょうか? Access:Access2003 MySql:5.0.27 ODBC:Mysql Connecter/ODBC 3.51.17 DBサーバ、クライアントともにXPを使用しています。

  • MySQLのデータベースをODBCに登録する

    ODBCデータソースの登録がうまくいきません。 ご教授お願い致します。 OS:WindowsXP,MySQL-4.0.22,ODBC:mysql-connector-odbc-5.1.5 ユーザーDNSに追加しようとすると、「Connection Failed:[HY000][MySQL][ODBC5.1Driver]Unknown system variable 'character_set_results'」というエラーメッセージが出て登録できません。

    • ベストアンサー
    • MySQL
  • MySQLでのバイナリデータ削除方法

    MySQLでのバイナリデータ削除方法 現在、PHPとMySQLでデータベースを作っている初心者です。 MySQLに登録したBLOB型のバイナリデータ(jpeg画像)を削除することはできるのでしょうか。 PHPMyAdminではレコード自体は消せますが、バイナリデータについては編集不可となっています。このフィールドのみ空にすることはできるのでしょうか。 考え方、方法などご教示ください。 上書きでNULLをインサートする??のかとも思うのですが、よくわかりません。 MySQL 5.1.34 PHP 5.2.6

    • ベストアンサー
    • MySQL
  • Access2019でMySQLデータ更新で障害

    初めてご質問します。 Access2019でMySQL(5.7.24)にODBC接続し、直接テーブルを更新したり、フォームからデータ挿入しようとすると、参照も更新もできるのですが、頻繁にAccessが強制終了してしまいます。 環境は以下の通りです。  OS:WindowsServer2016  Access:2019  MySQL:5.7.24  その他:Access、MySQLとも同じサーバー上にインストール  ODBCドライバー:mysql-connector-odbc-8.0.27-win32   MySQLは初の設定のため、ネットなどを参考にインストール、ODBCも無事に接続でき、Access上で作成していたデータを投入して、フォームからのデータ登録を試したところ、頻繁にエラーが発生してAccessが落ちてしまいます。 不思議に思い、AccessよりODBCでリンクを張っているテーブルを参照し、ごみデータの削除をすると同様にAccessが落ちることから、AccessとMySQLDBとの通信等等の障害と感じています。 OSのイベントビューワーでも、Applicationのエラーに複数のエラーが確認できました。 ・障害が発生しているアプリケーション名: MSACCESS.EXE、 ・Aborted connection 4 to db: ・障害バケット 1366483222980313419~ 当初はmysql_upgradeが発生していたので実行しました。 こちらを完了したところmysql_upgradeは表示されなくなりました。 同様にAccess2019も更新し、最新になっています。 AccessからODBC接続をさせ、安定して稼働させるには、どのようにしたらよいか、お知恵をお貸しいただけないでしょうか。

    • ベストアンサー
    • MySQL
  • MYSQLとEXCEL2003の接続エラー

    64bit windows7に、32bitのexcel2003を使用しています。 excel2003から外部データ取り込みで、MYSQLのデータを送受信できるようにしたいです。 ネットでは、mysql-connector-odbc-5.2.6-win32.msi と32bit版をインストールしたほうが良いとの書き込みを見たことがありますが、 mysql-connector-odbc-5.1.13-winx64.msi をインストールしないと、ODBCのデータソースにドライバーが出てきませんので、こちらをインストールしました。 写真のとおり、ユーザーDSN、システムDSNでは、ドライバーを追加して、コネクション-サクセスフルになるのですが、 実際 excel2003から、外部データの取り込みで、ODBCのデータソースを選択すると、データリンクプロパティ画面が現れてしまい、そこで設定を入力しても、写真のようなエラーが出てしまいます。 どのように対処すればよいか、アドバイスいただけないでしょうか。

  • excel>外部データで更新できない

    古い仕様ですが、Oracle8iとexcel2002でデータベースの集計をしています。 SQLが少々複雑なのでoracleにViewを作って、excelから外部取り込み(ODBC)を行っています。 1回目の取り込みはうまくいくのですが、データが更新したときに、excelで「更新」処理をしたところ内容は変更されませんでした。ところが、SQLplusを使ってViewを見ると値に変化があります。 Viewを作り直すとexcelのデータは更新します。 何とかexcelの「更新」だけで新しい情報が反映できないものでしょうか? ご存知の方、よろしくお願いいたします。

  • XAMPPのMySQLで削除済みレコードが表示される

    XAMPPのMySQLで削除済みレコードが表示される XAMPP1.7.3をWinXP Proにて運用しています。 PHPにてselectのSQLを実行したところ、削除済みのレコードが表示されるため困っています。 これまでの経緯は 1.phpMyAdminにてDBとテーブルを作成し、サンプルデータを4件登録 2.PHPからselectで条件なしで全レコードが表示されるのを確認 3.条件をつけてselectし、それぞれの条件にマッチしたレコードが表示されるのを確認 4.phpMyAdminにて1レコードを削除 5.条件をつけてselectし、削除したレコードが表示されるのを発見 6.phpMyAdminのSQLで同じ条件のSQLを実行し、削除レコードが表示されないのを確認 7.PHP側のselect後にDBCloseをしているかの確認 8.phpMyAdminにてテーブルの修復、最適化などを実行 9.MySQLの再起動 以上の操作をしてみましたが、やはりPHPからのSQLの結果に削除されたレコードが表示されてしまいます。 色々なサイトで同じような現象のTipsがないか探しましたが、見つけきれず質問させていただきます。 同じような現象に対しての対応を紹介したサイトや、対処方法をご教授下さい。 よろしくお願いします。

  • CGIによる、MySQLのデータの更新処理が出来きず困ってます。

    最近、perlの勉強をはじめ、 勉強がてら、 ユーザ管理フォームを作りたく CGIのソースを書いています。 データはMySQLに登録しています。 以下のプログラムを使用し、 データの更新をしたい際に、 更新作業を行うと、 エラーなどは出ず、 ソースにあるように、 「データを正常に更新しました」と表示されますが、 更新されたか?をMySQLで確認すると、 データが更新されておらず、 更新作業を行う前と何ら変わらない値が登録されています。 「update文」のあたりがおかしいのかな?と 感じたのですが、 どこが検討はずれなのか?が分からず、 前に進めないでいます。 アドバイスいただけると大変ありがたいです。 宜しくお願い致します。 ソースは以下の通りです。 ========================================= use CGI; use DBI; $form = CGI->new; print "Content-type: text/html\n\n"; print "<html><body>\n"; # DBに接続 $db=DBI->connect("DBI:mysql:dbname","username","pwd", {RaiseError => 0, PrintError => 1}); if(!$db){ print "失敗\n"; exit; } # UPDATE文作成 $sql = "update test20090702 set agent='$agent',attend='$attend',name='$name',sex='$sex',remarks='$remarks' where name='$name'"; # SQL実行 $sth = $db->prepare($sql); if(!$sth->execute){ print "SQL-fail\n"; exit; } # ステートクリア $sth->finish; # DB切断 $db->disconnect; print "データを正常に更新しました。\n"; print <<"HTML"; HTML ========================================= ■開発環境:Fedora9 ■MySQL:mysql-5.0.77-1

    • ベストアンサー
    • CGI

専門家に質問してみよう