• 締切済み

AccessDBからExcelへ難題

お世話になります データーベースはAccessで、保存先はExcelとなります おそらくADOだなとまでは分かるのですが 素人なので構築方法がわかりません 注文日たとえば2007/09/25~2007/10/25までの必要な行(お客様名、金額、注文内容など)をB10より以下に貼り付けさせたいのですが 又、ExcelフォームにTextboxを2個配置から、までを入力し実行ボタンを押すとAccessから値がジャンプしてくる方法がりそうです。 分かる方A級の難題ですがよろしくお願いします

みんなの回答

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

質問の表現が判りにくい。 「アクセスのテーブルにあるデータを対象に、エクセル側で期間(日付)を指定し、該当データを、エクセルの所定のセル以下の行に貼り付けたい」 が良い表現とおもう。 ーー >分かる方A級の難題ですがよろしくお願いします 初心者が難易度を判定するのは危険がある。大恥をさらすこともあるよ。 例えば下記などはエクセルの機能として用意されているのだよ。 知らないだろうから、難題というだけ。 質問者には荷の思い課題で、丸投げになっており、回答も生かせない恐れが多い。勉強のこと。 ーー 以下エクセル2002の例。 アクセスのテーブルで注文明細 ID 注文日 注文者 金額 注文品名 1 2007/10/01 山田 1000 A 2 2007/10/04 小島 2000 BB 3 2007/10/12 田中 10000 C 4 2007/10/15 木村 4000 DDD 5 2007/10/24 津田 15000 EE 6 2007/10/26 木下 4000 F 7 2007/10/30 植田 9000 GG3 を作った。質問者には既に存在するもののはず。 ーー エクセルの データー外部データの取り込みー新しいデータベースー新しいデータベースクエリーデータソースの選択で Ms Access DatabaseーOK データベース指定 *mdbーOK テーブル名「注文明細」選択 「>」をクリックして、全項目を対象とする 次へ (条件を指定する)注文日 >(大なりを選択) 2007/10/10 AND  (次行に下記条件を追加) < (小なりを選択) 2007/10/25 次へ ソートキー関係 注文日 次へ エクセルにデータを返す データのインポート、で 既存のワークシート A8を指定 OK ID 注文日 注文者 金額 注文品名 3 2007/10/12 0:00 田中 10000 C 4 2007/10/15 0:00 木村 4000 DDD 5 2007/10/24 0:00 津田 15000 EE 6 2007/10/26 0:00 木下 4000 F ーー 残る問題は (A)条件指定(日付)をプログラムから行う (B)インポートするセルの開始行のプログラムから指定 ーー マクロの記録をとって、上記(A)(B)がコードのどの場所に当たるか調べる。 そして自分のプログラムの中でそれらの変数に値をセットし(指定を行い)マクロを実行する。 (A)はDestination:=Range("A17")) のところ (B)は、そのコード行を実行前までのコード行で、SQL文の中の文字列を作り直す。 SQLの文字列を、切った、繋いだの問題だけ。慣れは必要だが。 (マクロの記録は質問者もやれば出るので略します。 ーー 参考 http://wiz2.blog16.fc2.com/blog-category-3.html#entry164 メニューに出ないときは

  • pauNed
  • ベストアンサー率74% (129/173)
回答No.2

こんにちは。 ExcelにAccessのデータを取り込むなら一般操作だけでも可能です。 [外部データの取り込み] http://www.asahi-net.or.jp/~ef2o-inue/kihon/sub01_05_22.html この『「データベースクエリ」を使う方法』以下を参考にしてください。 OfficeやExcelのCD-ROMからMicrosoft Queryがインストールされている必要があります。 例はExcelファイルですが、パラメータの設定については以下を参考にしてください。 [41-1 外部データの取り込み(パラメータークエリの利用)] http://www11.plala.or.jp/koma_Excel/contents6/mame6041/mame604101.html 抽出条件をセルに入力すれば『セルの値が変わる時に自動的に更新する』ことも可能で、 マクロ不要です。 >素人なので構築方法がわかりません との事なので、まずはこの辺りから始めてみられたらいかがでしょう。

noname#140971
noname#140971
回答No.1

注文履歴: ID__注文日_________お客様名____金額____注文内容 01__2007/11/11__鈴木 一郎__\1,000__商品A 02__2007/11/12__中村 主水__\2,000__商品B 03__2007/11/13__田中 五郎__\3,000__商品C [イミディエイト] ? DBSelect("SELECT * FROM 注文履歴",,vbcrlf) 1;2007/11/11;鈴木 一郎;1000;商品A; 2;2007/11/12;中村 主水;2000;商品B; 3;2007/11/13;田中 五郎;3000;商品C; ? DBSelect("SELECT * FROM 注文履歴 WHERE 注文日 BETWEEN #2007/11/12# AND #2007/11/13#",,vbcrlf) 2;2007/11/12;中村 主水;2000;商品B; 3;2007/11/13;田中 五郎;3000;商品C; 先ずは、このようにExcel のイミディエイトウインドウでAccessからのデータ取得に成功することかと。 <参照設定> レ Microsoft ActiveX Data Objects 2.8 Library と、参照設定に以上を追加する必要がありますが、ここはお判りのことと・・・。 そうなると、問題は、ADOを利用したデータの取得手順かと推察します。 それ自体は、さして難しいものではありません。 実際の手順は、以下のDBSelect関数を手掛かりにされて下さい。 ? DBSelect("SELECT * FROM 注文履歴 WHERE 注文日 BETWEEN #2007/11/12# AND #2007/11/13#","||","__") 2||2007/11/12||中村 主水||2000||商品B||__3||2007/11/13||田中 五郎||3000||商品C||__ DBSelect関数は、このように取得したデータは列区切り記号とレコード区切り記号とで連結して返します。 これをエクセルに表示するには Split関数でバラせば容易かと思います。 Option Explicit Const conConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Temp\db1.mdb" Public Function DBSelect(ByVal strQuerySQL As String, _              Optional ByVal strSeparator1 As String = ";", _              Optional ByVal strSeparator2 As String = "") As String On Error GoTo Err_DBSelect   Dim I   As Integer   Dim J   As Integer   Dim R   As Integer   Dim C   As Integer   Dim M   As Integer   Dim N   As Integer   Dim rst  As ADODB.Recordset   Dim fld  As ADODB.Field   Dim Datas As String      Set rst = New ADODB.Recordset   ' =================   ' Begin With: rst   ' -----------------   With rst      .Open strQuerySQL, _         conConnection, _         adOpenStatic, _         adLockReadOnly      If Not .BOF Then       M = .RecordCount - 1       N = .Fields.Count - 1       .MoveFirst       For R = 0 To M         For C = 0 To N           Datas = Datas & .Fields(C) & strSeparator1         Next C         If Len(strSeparator2) Then           Datas = Datas & strSeparator2         End If         .MoveNext       Next R      End If   End With   ' ---------------   ' End With: rst   ' =============== Exit_DBSelect:   DBSelect = Datas & ""   Exit Function Err_DBSelect:   MsgBox "SELECT 文の実行時にエラーが発生しました。(DBSelect)" & Chr$(13) & Chr$(13) & _       "・Err.Description=" & Err.Description & Chr$(13) & _       "・SQL Text=" & strQuerySQL, _       vbExclamation, " 関数エラーメッセージ"   Resume Exit_DBSelect End Function

関連するQ&A

  • テキストボックスの値を スプレッドシートへ表示するには?

    Excel2003 VBA ユーザーフォームへ Textbox1 Textbox2 Textbox3 と スプレッドシートを配置しています。 Textboxの値を スプレッドシートの指定した位置に表示したいのですが コードはどの様に書いたらいいのですか? 例えば… Textbox1 スプレッドシートの A1 Textbox2 スプレッドシートの B1 Textbox3 スプレッドシートの C1 VBAまだ初心者です。 

  • 複数条件ADO接続

    お世話になります ■概要 ExcelからAccessに接続し値を取り出し貼り付ける ■詳細 ExcelマクロフォームにTextbox1、Textbox2、実行ボタン ■動作 Textbox1に、発注日ここからの日付 Textbox2に発注日ここまで日付 を入力実行ボタンを押すとExcelファイル内セルB10より貼り付け ■AccessDB ID|お客様名|発注日|記事|取消CK ■その他 1、DB内には不要な列もある 2、取消CKはYes,No型で、チェックがあるレコードだけは抜き出さない でExcel側ではその行は空白ではなく詰めて落とし込みをしたい 難しいですが分かる方宜しくお願いします。 当方初心者ですコードでお願いします

  • ExcelのvbaでAccessMDBのテーブル「説明」欄を更新したい

    Excel2002マクロでAccessMDBにADOで接続しています Accessのデータベースウィンドウに表示されている テーブルの「説明」欄を更新しようとしています OpenSchemaメソッドで「説明」欄を取得することはできたのですが 更新する方法がわからず困っています よろしくお願いします

  • データベースへの値の取得の仕方

    よろしくお願いします。 AccessをデータベースにしてVB2005でフォームを作っています。 DataSet1の中に<テーブル1>と<テーブル2>があります。 <テーブル1>には、「商品コード」、「商品名」、「値段」があります。 <テーブル2>には、「注文日」、「商品コード」、「注文個数」があります。 フォーム上のTextBox1に入力された値(商品コード)を<テーブル2>の「商品コード」欄に蓄積したいのですが、どのようにすれば良いですか? フォームには、 ComboBox1(テーブル1の商品名をリストにしたもの、ユーザー選択用) TextBox1(ComboBox1に対応した商品コードを表示、入力不可・表示のみ) ComboBox1とTextBox1を連動させるために、<テーブル1>からデータを呼んだのはいいのですが、肝心の<テーブル2>にどうやってデータを蓄積したらよいのかわからなくなってしまいました。 すみませんがプロパティウィンドウでの設定の仕方、またはコードなど教えてください。

  • 以前にも同じような質問があったと思いますが、検索しても見つけることがで

    以前にも同じような質問があったと思いますが、検索しても見つけることができなかったので質問させていただきます。 VisualWebDeveloper2008のWebアプリケーションで言語はVBで開発中です。。 TextBoxを縦20行横5列(IDはTextBox1…TextBox100)に配置した入力フォームで、TextBoxに入力された値を行ごとに取得していくやり方がわかりません。 さらに値を取得したら、TextBox5、TextBox10…………TextBox95、TextBox100は"あ"という文字を、それ以外のTextBoxには"い"という文字も付け加えたいです。 VBAでは For~NextとSelect Case を使いTextBox番号を指定してうまくできたがASP.NETではエラーとなってしまいます。 二次元配列やコントロール配列なども参考にしてみましたが、エラーが上がりうまくいきません。 http://okwave.jp/qa/q3457688.html 初心者で分かりづらい質問ですがよろしくお願いします。

  • エクセルのユーザーフォーム上のテキストボックスと外部データ取込機能につ

    エクセルのユーザーフォーム上のテキストボックスと外部データ取込機能について 前提条件)1つのフォームにComboboxとTextboxが5列15行に整列して配置してあります。 例えば、TextBox1~3にそれぞれ入力し、その条件から外部データ取込機能で抽出される値をTextbox4へ表示させる試みを行っています。処理としては、TextBox1~3に入力した値は特定シートのセルA1~C1にセットします。 セルA1~C1にセットされることにより、外部データ取込のパラメータ設定で「セルの値が変わる時に自動的に更新する」としてあるため、3つの条件よりある値が特定シートのセルA2に抽出され、そのセルの値をTextbox4へ返すことをしようと挑戦中です。そこでつまづいてしまい質問させて頂きます。フォームを起動しTextboxから入力した内容が特定シートのセルにセットされることは確認できたのですが、外部データ取込機能で値は抽出はされているようなんですが、特定シートのセルA2には表示されていません。フォームを閉じるとセルA2に呼び出されてきた値が確認できます。フォームが開いているとシートをActiveにしても(VBAの記述にて)更新されないんでしょうか?フォームが起動されたまま、シートで展開している動きをそのままフォームの別texeboxへ戻り値として利用する方法を教えて下さい。waitやActiveなどいろいろ試してみました。下記にはActiveの記述はありませんが、色々試してみて上手くいきません。 (参考) Private Sub TextBox23_Exit(ByVal Cancel As MSForms.ReturnBoolean) Sheets("Meisai").Range("F1") = TextBox23.Value waitTime = Now + TimeValue("0:00:02") Application.Wait waitTime Sheets("Hijyu").Select TextBox27.Value = Sheets("Hijyu").Range("A2").Value End Sub よろしくお願いします。

  • エクセルVBAのテキストボックス

    VBA初心者で調べても分からなかったので質問をします。 TextBox1とTextBox2の合計をTextBox3に表示する方法を教えてください。 TextBox1と2は、直接入力するのではなく、同じフォーム内の別のTextBoxに数字を入力するとそれに関連した値がTextBox1と2に入力されるようにしてあります。 分かりにくい説明ですが宜しくお願いします。

  • Excelデータの最終行判別について

    VBでExcelデータ(Excel97)をAccessデータベース(Access97)に落とし込む処理をしたいのですが、空白行を含むExcelデータのレコードカウントを取得するにはどうしたら良いでしょうか?アドバイスよろしくお願いします。

  • Excel VBA リストボックスのクリア(Win2000、Office2000)

    Worksheets("Sheet1")に60個程度のTextBoxとComboBoxが並んでいます。(ユーザーフォーム上ではなく、シート上に配置) この各ボックスに入力された値を、ファイルを開いた時(OpenEvent)で入力されている値を消したいのですが、どうしたらよいでしょうか?(終了時でも構いません) 宜しくお願い致します。

  • excel VBA 色をセルに自動的に付ける

    エクセル2000を使用していて、VBA初心者で勉強中の者です。 タイムテーブルを作っています。 入力はユーザーフォームを使っています。 コマンドボタンを押すとtextboxにある値を判断してセルに色を付けるマクロを教えてください。 タイムテーブルは列は15分で1列使い、1時間で4列です。 1曜日は4行分使い、4行目に予定時間(textbox2)が入ります。 15分なら0.25 30分なら0.5 1時間は1 ・・・ ユーザーフォームの登録ボタンをクリックした時4行目に入力される値で 判断して、例えば0.15ならセルを1つ塗りつぶし、1時間なら4列分塗りつぶすマクロを教えてください。 塗りつぶすセルの値が入っているのはtextbox2 色は ColorIndex = 33 textbox2の値が0.01~0.25は1列分塗りつぶし        0.26~0.5は2列分塗りつぶし        0.51~0.75は3列分塗りつぶし        0.76~1は4列分塗りつぶし        1.01~0.25は5列分塗りつぶし        ・・・        4.76~5は20列分塗りつぶし よろしくお願いします。 以下はユーザーフォームの登録ボタンを押す時のコードです。 Private Sub CommandButton1_Click() '未入力なら中止 If ComboBox2.Value = "" Then MsgBox "時間を入力" Cancel = True Exit Sub ElseIf ComboBox3.Value = "" Then MsgBox "時間を入力" Cancel = True Exit Sub End If Call Macro登録 End Sub Sub Macro登録()     With ActiveSheet .Cells(行, 列).Value = ComboBox1.Text'1行目の値 .Cells(行 + 1, 列).Value = TextBox1.Text'2行目の値 .Cells(行 + 2, 列).Value = ComboBox2.Text & "~" & ComboBox3.Text'3行目の値 .Cells(行 + 3, 列).Value = TextBox2.Value'4行目の値     End With End Sub

専門家に質問してみよう