- ベストアンサー
Access→エクセルへ転送 VLOOKUP?
お世話になります。 概要 Accessで入力した値をエクセルへ転送させたいのですが A.xls 社員名|社員番号|記事|販売数値| 太郎 |00120142| |140 | 花子 |12333457| | | 山田 |0123443 | | | エクセル側では販売数値はランダムに入力されています B.mdb 社員番号|販売数値| 12333457|200 | 0123443 |10 | Access側では社員番号及び販売数を入力します 入力フォーム内で社員番号を入力するときにエクセル側と社員番号が一致しない 又は、重複していればエラーで返し再入力ヒットすれば販売数に値を入れます。 *重複とはエクセル内に同じ社員番号が存在する場合 追記 Access側で社員番号を入力したときエクセル側の販売数値に値があればエラーでかえしたい 入力が終わると実行ボタンで 開かずにエクセルに販売数値を入力させたい A.xls(結果) 社員名|社員番号|記事|販売数値| 太郎 |00120142| |140 | 花子 |12333457| |200 | 山田 |0123443 | |100 | エクセル側はブックの共有をしており数名が開いている場合があります 複雑ですがわか方お願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
セルの位置とかMDBの名前とかテーブル名が不明なので適当に変更してください。 ちなみに >Access側で社員番号を入力したときエクセル側の販売数値に値があればエラーでかえしたい これは、ACCESS側を修正しないといけないので、こちらでは対応できません。 アクセスからデータをとってきたとき、EXCELの社員番号の販売数値に値が入っていたら、警告メッセージを出すようにしてます。 これを修正したらそれなりに使えるかと、、、、 Private Sub Workbook_Open() Dim mySql As String Dim myCon Dim myRs Set myCon = CreateObject("ADODB.Connection") Set myRs = CreateObject("ADODB.Recordset") Dim wRow As Long Dim conStr As String conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\ttmp\db1.mdb;Persist Security Info=False" myCon.Open conStr With Worksheets(1) wRow = 2 Do Until .Cells(wRow, 2) = "" '社員番号を全部調べる mySql = "" mySql = mySql & " select 販売数値 from TBL" mySql = mySql & " where" mySql = mySql & " 社員番号 = " & .Cells(wRow, 2) myRs.Open mySql, myCon If myRs.EOF Then MsgBox ("社員番号【" & .Cells(wRow, 2) & "】が見つかりません ") Else If .Cells(wRow, 4) = "" Then .Cells(wRow, 4) = myRs.Fields("販売数値").Value Else MsgBox ("既にエクセルに販売数値が入力されています" & vbCrLf & _ "社員番号 :" & .Cells(wRow, 2) & vbCrLf & _ "エクセル値:" & .Cells(wRow, 4) & vbCrLf & _ "アクセス値:" & myRs.Fields("販売数値").Value) End If End If myRs.Close wRow = wRow + 1 Loop End With myCon.Close End Sub
その他の回答 (2)
- nekotaru
- ベストアンサー率50% (22/44)
>開かずにエクセルに販売数値を入力させたい >エクセル側はブックの共有をしており数名が開いている場合があります エクセルを開くのをきっかけ(イベント)にACCESSからデータを取得し反映させることができます。 ACCESSのデータが変更されても、その時点で既に開いているEXCELにデータ反映はされませんが、次に開いた時にその時点の最新のACCESSデータを取得することができます。
- venzou
- ベストアンサー率71% (311/435)
質問の内容は、恐らく不可能です。 特に下記の部分が不可能だと思います。 >開かずにエクセルに販売数値を入力させたい >エクセル側はブックの共有をしており数名が開いている場合があります ------------------------------------------------------------ >Accessで入力した値をエクセルへ転送させたいのですが データをエクセルへ集め、エクセルで管理する方向になっていますが、データの管理はデータベースが行うべき仕事です。発想を逆転した方が良いと思います。 「エクセルで入力したデータを、Accessへ転送する」なら可能だと思います。複数のユーザが同時に処理した場合でも、Accessならうまく処理してくれます。 しかし、難易度は高めですよ。(^^; ExcelのVBA、及び、DAO(又はADO)の知識が必要となります。 Excel側の処理 ・Excelのブックを開いた時、Accessから最新のデータを読み込みます。 ・Excelに入力したデータは、随時Accessへ登録します。 この際に重複のチェック、エラー表示なども可能です。 ・定期的に、Accessから最新のデータを読み込みます。 「更新」ボタンを作る方が良いかも。 Access側の処理 ・最新のデータはAccessに集まってくるので、特別な処理は必要なし この回答欄で全ては説明できないので、具体的な内容は、下記など参考にして下さい。 http://members.at.infoseek.co.jp/kenchan_h/index14.html
補足
>「エクセルで入力したデータを、Accessへ転送する」なら可能だと思います。複数のユーザが同時に処理した場合でも、Accessならうまく処理してくれます。 はい当方の部署は大体Access又は.NET(WEB)で運営していますが 他の部門はexcel管理でイライラしています 会議の場で対案、改善案を定義したのですが管理しているのがおじいちゃんで頑固ものです。 使いやすければOKなのですが^^; やはり不可能ですか エラーは入力時が理想です
補足
当方初心者で具体的なコード等ありましたらお願いします Access側でVBを書かない場合 入力時点でのエラー処理はどうなるかなど疑問です