• ベストアンサー

EXCEL VBA? 関数?

お世話になります EXCELからアクセスを見に行き必要な値を必要な位置に設置するにはどうしたらいいですか? アクセス.mdb ID|管理番号|使用者番号|数量|日付| 01|12E22100|12 |1 |2008/01/01 02|12345678|01 |5 |2008/01/01 03|12E22100|12 |1 |2008/01/01 04|12Y22100|12 |1 |2008/01/01 05|001234T7|015 |4 |2008/01/01 06|12E22100|12 |1 |2008/01/01 エクセル.xls 管理番号|01|2|3|4|12|015| 12E22100| | | | |3 | | 001234T7| | | | | |4 | 12345678|1 | | | | | | エクセルがアクセスを見に行った実行結果です VBAでこんなことって可能ですか? そか一度一覧をエクセルのどこかに格納してから関数? ご存知で詳しく説明できる方よろしくお願いします できるならVBAユーザーフォームで日付での絞り込みが理想です

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

  • ベストアンサー
noname#140971
noname#140971
回答No.6

補足: csv に一旦出力も・・・。 まったくエクセルは操作したこともない門外漢ですが・・・。 [イミディエイト] ? DBSelect("SELECT * FROM tab1",",",vbCrLf) ID,管理番号,使用者番号 1,1000,10 2,1001,20 3,1002;30 このデータを cvs ファイルで出力しシートに呼び込むなんてこともしたことがあります。 まあ、エクセルに整形表示する手順を省けないかと思ってやったこと。 FileWrite "XXX.csv", DBSelect("SELECT * FROM tab1",",",vbCrLf) といった感じで出力し、シートに"XXX.csv"を呼び込むという手順。 シートに"XXX.csv"を呼び込むところはヘルプをみながら作成しました。 そう難しいことではなかったです。

P3mania
質問者

補足

お返事ありがとうございます なるほど一度アクセスからCSVに吐き出しそれをエクセル側で拾う方法があるのですね 勉強になります しかしCSVを吸い上げたところで計算させるのはどこでどのように実行させるのかがなぞです やはりVLOOKUP系の関数ですかね~?

その他の回答 (5)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。 私は、あながち丸投げというものを否定してはいませんが、今回は、手数が多いような感じがしてくるので、「超初心者」という方には、ADOで構築するのは、VBAでは、完成までは行かないような気がしてくるのです。 >それか一度一覧をエクセルのどこかに格納してから関数? それなら、改めて、関数で検索すればよいです。 Excelに移してしまえば、概ね、簡単に出来ます。ただし、Excel上では、やはり、データベース関数でないと、ちょっと、重くなってしまうのではないかと思います。 なお、一応、ADOでのVBAのポイントだけを書いておきます。しかし、VBAのレベルとしては、中級以上の人でないと、Excel VBAでは難しいと思います。人によっては、そのレベルを「プロのワザ」といいますが、それほどのこともないと思います。Excelだけをやっている人には、なじみが薄いです。 例: ADOの参照設定をしておいて、  myDBFname ="C:\test1.mdb" '←ファイル名  myTable = "Table1" '←テーブル    mySQL = "SELECT * FROM " & myTable & " WHERE "   Set cnADO = New ADODB.Connection   Connstring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _   myDBFname & ";Jet OLEDB:Database" & ";" と、ADO で開いておいて、後は、以下のようなSQL で検索すればよいと思いますね。 param1 に管理番号 param2 に開始の日付 '(ここが日付型が文字型か) param3 に終了の日付 で絞り込みます。 Set rsADO = New ADODB.Recordset 'インスタンスを起こし、 rsADO.Open mySQL &"管理番号 =" & param1 & "AND 日付 Between #" & param2 &"# And #" & param3 &"#; " としていけば、取れると思います。 それから、確かに、imogasiさんのご指摘の、MSクエリは一理ありますね。Excelさえあれば、MSクエリは使えます。基本的には、VBAは必要ありません。SQL は、MS式に書く必要がありますが、構文自体は、実際に、パラメータクエリにしてしまえばよいわけです。 検索するときに、QueryTable オブジェクトを使っていたはずですから、それを応用すれば、VBAに換えられます。記録マクロでも残りますので、QueryTable を既存のものを、再利用すればよいです。 Microsoft Help http://office.microsoft.com/ja-jp/excel/HP102161131041.aspx#1 Excel豆知識41: エクセル:外部データの取り込み(パラメータクエリの利用) http://www11.plala.or.jp/koma_Excel/contents6/mame6041/mame604101.html

P3mania
質問者

補足

お返事ありがとうございます ADOについては自分で生成したものではないですが 使用可能です 一度どこかのシートに落とし込みをしてまでは可能です しかしどのような関数を使えば良いかわかりません MSクエリは試しましたがADOで値をDLできる以上必要はないですね 関数での検索方法あればご教授願います 当方としてはセルに関数を入力していくしかないと思い始めています

noname#79209
noname#79209
回答No.4

> あなたのスキルでは回答できない代物です。 と言われそうでコワイのですが、 むしろ、アクセス側のフォームで日付で絞り込んで、クロス集計クエリを作成し これをエクセルファイルとしてエクスポートしたほうが楽なように思えますが...

P3mania
質問者

補足

お返事ありがとうございます そうですねAccess側でならできそうなのですが フォーマットが決まっていますので・・・ 逆にフォーマットに関数を入れたらいけそうなのですがその関数もわからず・・・・ やはりピボットなのですかね~

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

>エクセルがアクセスを見に行った実行結果です 通常ではエクセルではこういうことは出来ないはず。何も書いてないが、MSクエリを手操作したということですか。 データー外部データの取り込みー・・・ ーー もしそれなら、エクセルのマクロの記録をとると、コードがわかるので、そのコードを適当に修正したら。 ーー MSクセス(ソフト)があれば、クエリで絞って、それをエクセルにエクスポートしたほうが(エクセルを通じて何でもやるより)簡単では無いですか。 ーーー >VBAでこんなことって可能ですか? アクセスのモジュールや、エクセルVBAの仕様経験あるのかな。 なければ現段階では質問は丸投げです。

P3mania
質問者

補足

imogasiさんお返事ありがとうございます imogasiさんの現状はADO接続での関数が筋になるのかな? ありがとうございました。 VBA等の作成はしたことありますが 超初心者です 参考HPをみながら作れる程度です

noname#140971
noname#140971
回答No.2

tab1: ID__管理番号__使用者番号 _1______1000__10 _2______1001__20 _3______1002__30 エクセル: 1000__10 1001__20 1002__30 A列=DBLookup("管理番号", "tab1", "ID=" & 1) A列=DBLookup("管理番号", "tab1", "ID=" & 2) A列=DBLookup("管理番号", "tab1", "ID=" & 3) B列=DBLookup("使用者番号", "tab1", "ID=" & 1) B列=DBLookup("使用者番号", "tab1", "ID=" & 2) B列=DBLookup("使用者番号", "tab1", "ID=" & 3) と、エクセルの各セルに参照する式を書くという方法もあります。 こんな方法でよかったら DBLookup関数を補足します。 ただ、 DBLookup関数は、単にSQL文の実行結果を一つだけ戻すシンプルな関数です。 だから、補足するまでもないかもです。 [イミディエイト] ? DBSelect("SELECT * FROM tab1",,vbCrLf) 1;1000;10; 2;1001;20; 3;1002;30; なお、このように各レコード毎のデータを列単位で区切って取得するのも手です。 この場合は、これらを For-Next等でエクセルの所定の位置にシコシコと表示します。

P3mania
質問者

補足

ん~ なんかむずかしいですね いってることが半分ぐらいしかりかいできませんが・・・

  • FEX2053
  • ベストアンサー率37% (7987/21354)
回答No.1

Excelのピボットテーブルを使えば一発ではないでしょうか? http://hp.vector.co.jp/authors/VA014071/tips/xl_pvt1.html

P3mania
質問者

補足

お返事ありがとうございます PVTではだめです 決められたフォーマットでの仕様となります

関連するQ&A

  • エクセル関数

    お世話になります データシートから 集計シートに集計させる関数あれば関数をお教えください *フォーマットが決められているためPVT等は使用できません データシート1 ID|管理番号|使用者番号|数量|日付 01|12E22100|12 |1 |2008/01/01 02|12345678|01 |5 |2008/01/01 03|12E22100|12 |1 |2008/01/01 04|12Y22100|12 |1 |2008/01/01 05|001234T7|015 |4 |2008/01/01 06|12E22100|12 |1 |2008/01/01 集計シート2.xls 管理番号|01|2|3|4|12|015| 12E22100| | | |3 |  | 001234T7| | | | |4 | 12345678|5 | | | | | 上記が結果です 管理番号に対して使用者番号ごとに合計数量を出したいのですが かのうですか? わかるかたよろしくお願いします

  • VBAでエクセルからエクセルのファイルを開くには?

    D:\に db1.mdb Book1.xls があります。 db1.mdbのフォームのコマンドボタンをクリックして Book1.xlsを開きたいのですが VBAコードをご教授いただけますか? (マクロではなくVBAコードが知りたいです) エクセルからエクセルのファイルを開くなら Workbooks.Open ファイルのフルパス で出来ました。 ご回答よろしくお願いします。

  • Excel VBA

    お世話になります。 概要 Excelで入力した値をExcelへ転送させたいのですが 管理簿.xls 社員名|社員番号|記事|販売数値| 太郎 |00120142|  |140 | 花子 |12333457|  |    | 山田 |0123443 | | | エクセル側では販売数値はランダムに入力されています 入力フォーム.xls 社員番号|販売数値| 12333457|200 | 0123443 |10E  | 入力フォーム側では社員番号及び販売数を入力します 入力フォーム内で社員番号を入力するときにエクセル側と社員番号が一致しない 又は、重複していればエラーでそのつど返したい。 入力が終わると実行ボタンで 管理簿に販売数値を入力させたい 管理簿.xls(結果) 社員名|社員番号|記事|販売数値| 太郎 |00120142|  |140 | 花子 |12333457|  |200   | 山田 |0123443 | |10E | 管理簿側はブックの共有をしており数名が開いている場合があります 複雑ですがわか方お願い致します。

  • エクセルの自動更新

    1・現在、エクセルの「会員名簿.xls」を開きますと、アクセスの「顧客管理.mdb]の最新データーで、エクセルの「会員名簿.xls」が自動的に更新されるように設定してあります。 2・出来れば、その都度エクセルの「会員名簿.xls」を開かないで、下記のような時点で、エクセルの「会員名簿.xls」を、マクロなどで更新(「会員名簿.xls」を開いた時と同じ状態)出来ないかと考えております。 (A).アクセスの「顧客管理.mdb]を閉じる時点。 (B).アクセスの「顧客管理.mdb]は、閉じる前に必ず初期化ボタンをクリックする設定になっていますのでその時点。 アクセスの知識は皆無ですので、宜しく御願いいたします。

  • アクセスVBAでエクセルを操作するのは不可能でしょうか?

    アクセスVBAでエクセルを操作するのは不可能でしょうか? テスト.xlsのシート1の1行目コピーして テーブルに追加するということがしたいのですがどういうコードを書けばいいのか分かりません。 テスト.xlsは開いている状態です。 アクセス側のユーザーフォーム上のコマンドボタンをクリックしたらこの動作を実行するコード。。。 というのは不可能でしょうか?よろしくお願い致します。

  • ExcelからAccessのフォームを開くVBA

    VBAをあまり理解出来ていない初心者です。 ExcelからAccessのフォームを開く為に解説サイトを参考にしました。 Accessはテーブルだけのバックエンドと、それ以外のフロントエンドに分かれています。 Sub OPEN顧客管理番号検索() Dim objACCESS As Object Set objACCESS = CreateObject("Access.Application") objACCESS.OpenCurrentDatabase ActiveWorkbook.Path & "C:\....\FE.mdb" objACCESS.DoCmd.OpenForm "F_顧客管理番号検索", acNormal objACCESS.Visible = True objACCESS.UserControl = True Set objACCESS = Nothing End Sub Excelマクロ有効テンプレートからですと動作するのですが、マクロ有効ブックで保存すると以下のエラーが表示され動きません。 実行時エラー’7866’ このデータベースを開くことができません。データベースファイルが存在しないか、他のユーザーが排他モードで開いているか、ADPファイルではないことが原因です。 Accessを終了して試したり、Excelファイルの保存場所を変更してみたりしたのですが解決出来ません。 また、今回開いているフォームとは管理番号による検索クエリを元にしたフォームなのですがExcelのセルに入力されている管理番号をパラメーターに自動で入力することはできるのでしょうか? ご指導よろしくお願いします。 通報する

  • Excel vbaでなんとかできますか?

    現在働き方改革の一貫で個人でも出勤退勤、実働時間、残業時間を管理しなくてはいけなくなりExcelであれこれ試してるのですが上司がとにかくExcel苦手の為、vbaから入力フォームを作ろうとしてるのですが上手くいきません。 やりたいことは入力フォームにて名前、出勤退勤時間の入力、日付。そしたらExcelに自動で入力。こんなことできるでしょうか?お力をお貸しください。

  • Accessの出荷管理DBで製造番号を管理したい

    Accessの出荷管理DBで製造番号を管理したい 自社が出荷する製品全てに製造番号を割り当てて、品質管理をしたいと思います。 商品名 えんぴつ 数量  50本 製造番号 E001,...,E050 商品名 消しゴム 数量  100個 製造番号 K001,...,K100 このとき、製造番号フィールドは複数の数値を格納(あるいは参照)する必要があります。 そこで、出荷管理フォーム上で製造番号のリストを表示したいのですが、どのような手を使えば良いでしょうか。 手元にAccessの参考書があるので、アイデアさえいただければ試行錯誤してみます。

  • Excel → Access データをインポート

    OS WinXP Pro SP2 Office 2000 SP3 はじめまして。 マクロ(Excel VBA)を記述しているExcelファイル(Xls_Macro.xls)とインポート用データのExcelファイル(Xls_Data.xls)は別々のファイルになっていて、マクロを実行するとExcelファイルとインポート用データのExcelファイルのデータをAccessファイル(Access.mdb)にインポートする仕組みを開発しています。 インポート用データのExcelファイル(Xls_Data.xls)をADOで接続しレコードセットでデータを取得し、Accessファイル(Access.mdb)もADOで接続しレコードセットの「.AddNew」でAccessファイル(Access.mdb)に更新しようと考えています。 この考え方で問題ないのでしょうか!? もっと簡単な方法があるという方や、何か良い方法をお持ちの方 いらっしゃいましたら、よろしくお願いいたします。

  • AccessのクエリをEXCELのVBAを使用して置き換える方法をご教

    AccessのクエリをEXCELのVBAを使用して置き換える方法をご教示願います。 AccessデータはE:¥生産管理¥生産.mdbで現状データ内 受注残とゆうクエリ (受注NO 品番 品名 納期 受注残で並んでいます)を Office Links→Excelの出力処理にてExcelデータに変換しこのデータを 元データにし品番を縦ならび、納期を横並びにしてどの日付に何個受注が残っているかが わかるようにVBAで処理するようにしております。 横並びにする理由は資材発注などで結構先の受注を確認して自動計算するためです。 上記のように自動化されていない Office Links→Excelの出力処理をVBAでやる方法が 検索方法が悪いせいかわかりません。 Office Links→Excelの出力処理もしくは クエリから直接データを引き込む方法をご教授お願いいたします。

専門家に質問してみよう