No.110 | 2003/07/19 IE SELECTタグ OPTIONを選択する.Document.all(n).Selected=True |
[ページTOPへ戻る] |
<IE SELECTタグ OPTIONを選択する.Document.all(n).Selected=True>
どうも、三流プログラマーのKen3です。 今回は、 掲示板でもらった質問、 IEを起動してSELECTタグのoptionを選択 を少し、探ってみたいと思います。 いつものように、たいした解説、回答内容じゃないので、 暇つぶしに休み時間などに拾い読みしてください。 サンプルファイルは、 http://www.ken3.org/vba/lzh/vba110.lzh にtest110-book.xlsが保存されています。/* * 1.今回のキッカケ */
掲示板に下記の質問をもらいました。 ---- > すみません。どうしても分からなかったので質問します。 > AccessからIEを起動してフォームに値を入れるというのは > 前回のめるまがでとても参考になりました。ありがとうございます。 > で、そこからなんですが、ドロップダウンの値を直接指定して入力 > することはできるんでしょうか。 > 【ソース例】 > <SELECT name="ken"> > <option value="1">1</option> > <option value="2">2</option> > <option value="3">3</option> > </SELECT> > Htmlソースは上の感じなんですが、これを > objIE.document.all.ken.value = "3" > と指定するとエラーが出ます。 > 指定の仕方が違うと思うのですが、検索しても分からなかったのです。 > プロの人だと「当たり前じゃねえか」と思われるかも知れませんが > 宜しくお願い致します。 ---- なんで、 > プロの人だと「当たり前じゃねえか」 なんて私は、思ったりしないんだけど、 あと、ご教授くださいとか多いんだろう?・・・・ それだけお偉いプログラマー様の回答者が世の中多いんだろうけど。。。 そんな偉いシステム屋さんと私も、同じ扱いを受けて光栄です そこまでレベル上げたいよね、 じゃなくって、なんか悲しいよね(涙) ※全体に言っている独り言なので、質問者の人には言ってないので、 気にしないでね(聞いてほしい独り言が多いってば・・・) 文句を言いたいのは、お偉い回答者さん達とそれを支える熱狂的なご教授信者さん まぁ、そんなこと言っててもダメってのがツライよね。 また、ある掲示板へ戦いにじゃなくって宣伝に行くかな(ある掲示板って?どこ?) えっ、ハヤク解説始めろって? 質問の回答以外は聞きたくも無いって? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ それが三流作者のメルマガの特徴なので。 いつもの前置きが長かったですね(謎?)/* * 2.語学力無いので、かなり苦戦する(笑) */
そんなの「当たり前じゃねえか」とは、言えないぐらいに苦戦しました(笑) いろいろと試行錯誤するが私も出来なかった。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 一流読者の人に、私も、そんなの「当たり前じゃねえか」なんて言われてんだろうなぁ と思いつつ、調べ始めます。 ※なかなか最後まで行き着かないので、 先に回答の3.サンプルを見たほうがいいかも。 で、見てからこちらに戻ってきてください。 IE ドキュメントオブジェクトは、 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 私のパターンは、下記のリンクから探り始めてます。 http://msdn.microsoft.com/workshop/browser/webbrowser/reference/properties/document.asp を見ると、 Microsoft Visual Basic programs that early bind to the HTMLDocument object can reference it through the IHTMLDocument, IHTMLDocument2, and IHTMLDocument3 interfaces. HTMLDocument objectは、 IHTMLDocument IHTMLDocument2 IHTMLDocument3 なんて、インターフェース?を持ってんの?だからなに? ※ここから下も勝手な和訳が続くので適当に読んでね。 (Ken3の独り言が続く(笑)) IHTMLDocument2 に .allがあって http://msdn.microsoft.com/workshop/browser/mshtml/reference/ifaces/document2/get_all.asp を見ると、 You can use the IHTMLElementCollection::length property to determine the number of element objects in the collection, and the IHTMLElementCollection::item or IHTMLElementCollection::tags function to retrieve individual objects or collections of objects from the collection. You can 何いってんのか、わかんないよ。 日本に来たら、日本語話せよとコンビニ店長時代ならレジ打ったあと言ってたけど、 .comに来たら、英語ぐらい読めと言われそう・・・ なんて話は置いといて、 IHTMLElementCollection って、Elementのコレクションがあるんだってさ。 オブジェクトって階層構造になっていて、 コレクションが階層構造になっているのと、 一番下にプロパティやメソッドがあるので、 それをイメージしながら探ると、英語読めなくても探れると思う。 ※ExcelならExcelアプリの下にブックがあってシートにセル、 セルは値や書式を持っている(プロパティ)、 セルのクリアやコピーの動作(メソッド)がある なんてのが基本です。 *途中のブックにたいして、Saveなどのメソッドもあり、 一番下だけにプロパティ・メソッドがあるんじゃないことも注意かなぁ。 Document.All は、そんなコレクションからできてるんだってさ。 ^^^^^^^^^^^^^^^^^ だからなんだっつうの・・・オレは三流プログラマーだってばさ、 英語なんか読めないよ。 ハヤクサンプルソースまでたどり着きたい・・・ で、ここがDHTMLのオブジェクトだって・・・ http://msdn.microsoft.com/workshop/author/dhtml/reference/objects.asp おっ、ここに、HTMLでよく見かけるタグが存在する。 やっとたどり着いた? ※ここ、新たなブックマーク候補です。 ここから調べると、タグ単位で探りやすそうです。 相変わらず英語だけど、いろいろと出てきた。 input Creates a variety of form input controls. input type=button Creates a button control. input type=checkbox Creates a check box control. input type=hidden Transmits state information about client/server interaction. などなど、いろいろあるけど、 目的のオブジェクトは、 ~~~~~~~~~~~~~~~~~~~~~~ SELECT タグのOPTIONでしたね。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ option Denotes one choice in a SELECT element. http://msdn.microsoft.com/workshop/author/dhtml/reference/objects/option.asp にやっと書いてありました。 Syntax HTML <OPTION SELECTED ... > Scripting OPTION.selected [ = bSelected ] Possible Values bSelected Boolean that specifies or receives one of the following values.false Default. Item is not selected as the default. true Item is selected as the default. よくわかんないこと書きやがって、、、 えっと、 OPTION.selected = bSelected と代入しろだって? で、bSelected Booleanだって? だったら初めから、 OPTION.selected = True/Falseって書けよ、、と怒り出すぞオイ。/* * 3.サンプルを作成して、テストする */
http://www.ken3.org/vba/test110.html に、下記のテスト用HTMLを書きました。 <html> <head> <title>IE SELECT への セットをテストするためのHTML</title> </head> <body bgcolor=#ffffff text=#000000> <hr> <h1>IE SELECT への セットをテストするためのHTML</h1> <hr> <FORM ACTION="http://www.ken3.org/cgi-bin/test/test041-1.asp" METHOD="POST"> <font color="blue">TYPE=SELECT の入力テスト</font><br> <br> あなたの好きなセリーグの球団は? <SELECT name="ken"> <option value="1">阪神</option> <option value="2">中日</option> <option value="3">ヤクルト</option> <option value="4">巨人</option> <option value="5">広島</option> <option value="6">横浜</option> </SELECT><br> <br> 感想: <SELECT name="kansou"> <option value="3">IE最高</option> <option value="2">MSは日本語技術情報ハヤク作れ</option> <option value="1">イヤもっと英語力付けろ</option> <option value="0">メルマガふざけないで・・・まじめに書け</option> </SELECT> <br> <INPUT TYPE="submit" NAME="btn" VALUE="送信"> <INPUT TYPE="reset" VALUE="入力し直す"> </FORM> </body> </html> <SELECT name="ken"> と 項目名はkenにして6球団を選択 <option value="1">阪神</option> <option value="2">中日</option> <option value="3">ヤクルト</option> <option value="4">巨人</option> <option value="5">広島</option> <option value="6">横浜</option> </SELECT><br> <SELECT name="kansou"> と 項目名はkansouにして3〜0を選択 <option value="3">IE最高</option> <option value="2">MSは日本語技術情報ハヤク作れ</option> <option value="1">イヤもっと英語力付けろ</option> <option value="0">メルマガふざけないで・・・まじめに書け</option> </SELECT> Excelでテストルーチンを作成。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 6番の横浜を選択してみます。
Sub ie_test() Dim objIE As Object 'IEオブジェクト参照用 'インターネットエクスプローラーのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True '見えるようにする(お約束) '文字列で指定したURLに飛ぶ objIE.Navigate "http://www.ken3.org/vba/test110.html" '表示終了まで待つ Do While objIE.Busy = True '何もしないループ(笑) DoEvents Loop '項目名を探して、データをセットする Dim i As Integer '全ての項目を調べる For i = 0 To objIE.Document.all.Length - 1 'インプットのタグか?.tagnameを見る Debug.Print i & ":" & objIE.Document.all(i).tagname If objIE.Document.all(i).tagname = "OPTION" Then 'さらに、値が6(横浜)かチェックする If objIE.Document.all(i).Value = "6" Then 'ここまで調べて、チェックを付ける objIE.Document.all(i).Selected = True End If End If Next i End Sub |
No.111 | 2003/07/21 Access クエリーの作成画面で遊ぶ(項目別の集計) |
[ページTOPへ戻る] |
<Access クエリーの作成画面で遊ぶ(項目別の集計)>
どうも、三流プログラマーのKen3です。 今回は、 掲示板でもらった質問、 項目別に集計して金額 を探るついでに、クエリー画面で遊んでみたいと思います。 いつものように、たいした解説、回答内容じゃないので、 暇つぶしに休み時間などに拾い読みしてください。/* * 1.今回のキッカケ */
掲示板に下記の質問をもらいました。 ---- In message "[BBS :232] ACCESSについて質問します", >年月日:項目:金額 という表で > >項目別に検索して、金額を表示することはできますが、 >項目別に集計して金額を表示する方法がわかりません。 ---- いろいろとやり方はありそうですが、 今回は、クエリーの集計を使用してみます。 えっと、ポイントは、表示・集計で集計指示を入力可能として、 グループ化と合計で出来ると思います。 なんて、文章で書いても?ですよね。/* * 2.テストデータを作る */
ID 年月日 項目 金額 1 2003/01/01 あ \100 2 2003/01/05 い \50 3 2003/02/10 あ \250 4 2003/02/20 い \5 と、テーブルとテストデータを作成しました。 このデータから、 あ \350 い \55 と集計してみたいと思います。/* * 3.クエリーを作成する、表示・集計がポイントです。 */
クエリーで普通に項目と金額を選択して表示させます。 ↑作成過程と実行結果 項目 金額 あ \100 い \50 あ \250 い \5 ぜんぜん、集計されてナイジャン? まぁまぁ、あわてないでよ。 次が操作のポイントで、 ~~~~~~~~~~~~~~~~~~~~~~ メニューから、表示、集計をクリックします。 ↑表示・集計をメニューより選択する すると、 集計: ^^^^^^ って行が勝手に表示されます(勝手では無くて、私が選択したからです) グループ化 グループ化と表示されていると思います。 ↑集計指示行のイメージ 項目 金額 グループ化 グループ化 となっている指定を、 項目でグループ化したいので、項目はそのまま、金額を合計に修正します。 ↑金額の集計指示を合計に変更する。 これで完成したので、クエリーを実行します。 ↑実行結果 無事に、350と55と結果が集計されました。/* * 4.余談、SQLビュー */
ここからは、余談ですが、 よく掲示板で聞く、SQLビューで作成されたSQL文を見ろ、貼り付けろ? この意味なんですが、 クエリーの作成って、マウスでドラックしてフィールドを貼り付けたり、 並べ替えを選んでみたり、今回みたいに集計を指定してみたり、 簡単に作成してます。 私は、SQL文得意じゃないので、上記のように作成後、 表示・SQLビューで確認したりしてます。 ↑SQLビューの選択 選択すると、 SELECT DATA.項目, Sum(DATA.金額) AS 金額の合計 FROM DATA GROUP BY DATA.項目; と、SQL文を見ることが出来ます。 おっと、見るだけじゃなくて、ここで修正したりすることも出来ます。 SQL文からレコードセットを作る時など、 この手順を参考にすると、初めの頃は楽かもしれません。 質問とは関係なかったけど、 こんな便利なことも出来たんですね。 -【けんぞう!】--------------------------------------------------------- 三流君の、小金稼ぎ、お小遣い稼ぎシリーズ第2弾(稼げないだろコラ!!) http://www.ken3.org/etc/500yen/yosou.html キャンペーン参加で得たコインを予想問題に投票。正解するとコインが倍増、 それを換金という画期的“お得エンタメ”です。 運と実力で誰でも現金獲得のチャンスがあります。 思ったよりもあたらないけど、無料なのでチャレンジしてみては? ------------------------------------------------------------------------/* * 5.終わりの挨拶 */
今回は、 クエリーの作成画面で集計を表示させて遊んでみました。 何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。 ※評価は↓で投票してね。感想は掲示板かメールでくださいね。
No.112 | 2003/07/28 IE 操作 .ExecWB でコマンド実行(検索したかったけど) |
[ページTOPへ戻る] |
<IE 操作 .ExecWB でコマンド実行(検索したかったけど)>
どうも、三流プログラマーのKen3です。 今回は、 掲示板とメールでもらった質問を処理するために、 IEのコマンドボタンを使う.ExecWBをイタズラしたそんな話です。 結局、出来なかったんだけど、途中経過を楽しんでね。 ※事前調査でつまずく、そんな例です。/* * 1.今回のキッカケ */
掲示板に下記の質問をもらいました。 http://www.ken3.org/cgi-bin/bbs/vba/wforum.cgi ---- >タイトル:VBAからIEの検索を表示したい > >教えてください。 >環境(EXCEL2000) >EXCELからIEを立ち上げたときに「WEB ページの検索」を >常に表示させたいのですが? >ショートカットキーは、Ctrl + E ですが、 >同処理をVBAでは、どのようなコードになりますか。 >教えてください。 >宜しく、お願いします ---- IEでCtrl + Eを押した状態にする方法 と メールで、 ---- >アクセス2000の環境で、activeXにて、アクロバットリーダ >6 を挿入しました。(アクロバット直接ではなく、Ie6 >からPLUGINです) > >それで、WEBからPDFファイルを引っ張ってきていますが、 >このあと、そのPDFファイルを検索したいのです。 > >アクロバットの検索メニューからデータを入力すればOK >なのですが、これをAccessのフォームをクリックしてアク >ロバットに送り、自動的に検索したいのです。 > >アクロバットではJavaScriptがあると聞いていますが、 >VBAでなんとかいきませんか。 >何かヒントをいただければ幸いです。 ---- こっちは、検索のウインドウを自動ですね。/* * 2.事前調査、テスト */
どちらも共通しているのは、IEの機能(ボタン)なので、 そのあたりから探ってみます。 IE Command で検索すると、 http://msdn.microsoft.com/workshop/browser/webbrowser/reference/methods/execwb.asp が検索される。 object.ExecWB( _ cmdID As OLECMDID, _ cmdexecopt As OLECMDEXECOPT, _ [pvaIn As Variant,] _ [pvaOut As Variant]) Parameters cmdID Long that represents the identifier of the command to execute. For more information on command identifiers, see MSHTML Command Identifiers. cmdexecopt OLECMDEXECOPT value that specifies the command options. pvaIn Optional. A Variant used for specifying command input arguments. pvaOut Optional. A Variant used for specifying command output arguments. で、ここが使えるコマンドかぁ。 http://msdn.microsoft.com/library/en-us/com/htm/oen_a2z_22sk.asp うわ、いっぱいあるよ・・・ typedef enum { OLECMDID_OPEN = 1, OLECMDID_NEW = 2, OLECMDID_SAVE = 3, OLECMDID_SAVEAS = 4, OLECMDID_SAVECOPYAS = 5, OLECMDID_PRINT = 6, OLECMDID_PRINTPREVIEW = 7, OLECMDID_PAGESETUP = 8, OLECMDID_SPELL = 9, OLECMDID_PROPERTIES = 10, OLECMDID_CUT = 11, OLECMDID_COPY = 12, OLECMDID_PASTE = 13, OLECMDID_PASTESPECIAL = 14, OLECMDID_UNDO = 15, OLECMDID_REDO = 16, OLECMDID_SELECTALL = 17, OLECMDID_CLEARSELECTION = 18, OLECMDID_ZOOM = 19, OLECMDID_GETZOOMRANGE = 20, OLECMDID_UPDATECOMMANDS = 21, OLECMDID_REFRESH = 22, OLECMDID_STOP = 23, OLECMDID_HIDETOOLBARS = 24, OLECMDID_SETPROGRESSMAX = 25, OLECMDID_SETPROGRESSPOS = 26, OLECMDID_SETPROGRESSTEXT = 27, OLECMDID_SETTITLE = 28, OLECMDID_SETDOWNLOADSTATE = 29, OLECMDID_STOPDOWNLOAD = 30, OLECMDID_ONTOOLBARACTIVATED = 31, OLECMDID_FIND = 32, OLECMDID_DELETE = 33, OLECMDID_HTTPEQUIV = 34, OLECMDID_HTTPEQUIV_DONE = 35, OLECMDID_ENABLE_INTERACTION = 36, OLECMDID_ONUNLOAD = 37, OLECMDID_PROPERTYBAG2 = 38, OLECMDID_PREREFRESH = 39, OLECMDID_SHOWSCRIPTERROR = 40, OLECMDID_SHOWMESSAGE = 41, OLECMDID_SHOWFIND = 42, OLECMDID_SHOWPAGESETUP = 43, OLECMDID_SHOWPRINT = 44, OLECMDID_CLOSE = 45, OLECMDID_ALLOWUILESSSAVEAS = 46, OLECMDID_DONTDOWNLOADCSS = 47, OLECMDID_UPDATEPAGESTATUS = 48, OLECMDID_PRINT2 = 49, OLECMDID_PRINTPREVIEW2 = 50, OLECMDID_SETPRINTTEMPLATE = 51, OLECMDID_GETPRINTTEMPLATE = 52 } OLECMDID; OLECMDEXECOPTのパラメータはここ、 http://msdn.microsoft.com/library/en-us/com/htm/oen_a2z_5k38.asp を参照すると typedef enum { OLECMDEXECOPT_DODEFAULT = 0, OLECMDEXECOPT_PROMPTUSER = 1, LECMDEXECOPT_DONTPROMPTUSER = 2, OLECMDEXECOPT_SHOWHELP = 3 } OLECMDEXECOPT; と、書いてある。 ※なんとなくわかりそうな英単語のような、違う意味のような・・・ 危なく無さそうな、印刷プレビューのコマンドで実験してみます。
Sub ie_test() Const OLECMDID_PRINTPREVIEW = 7 '参照設定している場合は不要です Const OLECMDEXECOPT_DODEFAULT = 0 'テストなので、 Dim objIE As Object 'IEオブジェクト参照用 Dim a, b 'ダミー変数 'インターネットエクスプローラーのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True '見えるようにする(お約束) objIE.GoHome '表示終了まで待つ(ビジーの間ループする) Do While objIE.Busy = True DoEvents '何もしないループ(笑) Loop 'IEのメニューコマンドを実行する(7番のコマンド) objIE.ExecWB OLECMDID_PRINTPREVIEW, OLECMDEXECOPT_DODEFAULT End Sub |
Sub ie_test_検索() Const OLECMDID_SHOWFIND = 42 '参照設定している場合は不要です Const OLECMDEXECOPT_DODEFAULT = 0 'テストなので、 Dim objIE As Object 'IEオブジェクト参照用 Dim a, b 'ダミー変数 'インターネットエクスプローラーのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True '見えるようにする(お約束) objIE.GoHome '表示終了まで待つ(ビジーの間ループする) Do While objIE.Busy = True DoEvents '何もしないループ(笑) Loop 'IEをアクティブにする。 AppActivate "Microsoft Internet Explorer" SendKeys "^f", True 'Ctrl+Fをアクティブなアプリへ送る End Sub |
No.113 | 2003/07/29 Access クエリー 2つのテーブル結合して集計したい |
[ページTOPへ戻る] |
<Access クエリー 2つのテーブル結合して集計したい>
どうも、三流プログラマーのKen3です。 今回は、 メールでもらった質問を処理するために、 Accessのクエリーで表を結合して集計してみたいと思います。/* * 1.今回のキッカケ */
メールで下記の質問をもらいました ---- >ACCESSでのクエリで分からないことがあります。 > >下記のような表1、表2があった場合どうしても、思うような結合がされません。 >よい方法がないでしょうか。 表1 ID 項目 単位 入り数量 1 春 コ 5 2 夏 コ 6 3 秋 コ 7 4 冬 コ 8 5 冬至 m 5 6 夏至 m 6 7 春分 m 7 8 秋分 m 8 9 冬至 m 1 10 夏至 m 2 11 夏 コ 3 12 秋 コ 4 13 冬 コ 5 14 冬至 m 6 15 冬 コ 7 表2 ID 項目 単位 出力数量 1 春 コ 7 2 春 コ 8 3 春 コ 5 4 夏 コ 6 5 秋 コ 7 6 冬 コ 8 7 春 コ 1 8 春 コ 2 9 春 コ 3 10 春 コ 4 11 夏 コ 5 12 秋 コ 5 13 冬 コ 6 表まとめ 項目 単位 入り数量 出力数量 差(入り−出力) 春 コ 夏 コ 秋 コ 冬 コ 春分 秋分 の部分がどうしても出てこない 冬至 また、数量も集計されたものとなっていない 夏至 ---- 表をつなげて、集計してみるかぁ、、、 いろいろとありそうだけど、やってみますか。/* * 2.結合方法の調査、テスト */
テーブルの結合方法を探ってみます。 えっ、なんで?ただ?線でつなげるだけじゃないの? 質問で、 春分 秋分 の部分がどうしても出てこない 冬至 また、数量も集計されたものとなっていない 夏至 入りのテーブルにあって、出力のテーブルに無いデータ、 春分 秋分 冬至 夏至 が出てきていないので、結合をまずは、探ってみます。 クエリーでテーブルを2つ表示させ、 まずは、項目でデータをつなげます。 その後、表示・集計を出し 項目をグループ化、単位を先頭、入り数量と出力数量は合計で クエリーを作成すると、 項目 単位の先頭 入り数量の合計 出力数量の合計 夏 コ 18 22 秋 コ 22 24 春 コ 35 30 冬 コ 40 42 と集計される。 ほんとだ、春分 秋分 冬至 夏至が集計されない。 なんでだろう?ってギャグはやめといて、 両方の項目が一致しないと、結合されないみたいですね。 これを防止したいので、表1の入り数量のテーブルを基準に結合してみます。 指定は簡単で、 ^^^^^^^^^^^^^^ 結合の線をクリック後、右ボタンを押すと、結合プロパティが表示されます。 2番の、表1の全レコードと表2の同じ結合フィールド を選択します。 実行すると、 項目 単位の先頭 入り数量の合計 出力数量の合計 夏 コ 18 22 夏至 m 8 秋 コ 22 24 秋分 m 8 春 コ 35 30 春分 m 7 冬 コ 40 42 冬至 m 12 となります。 なんか、集計値がおかしくない? えっ、どこが? 夏の入り数の合計ってさ、 18になっているけど、データ見ると、 ID 項目 単位 入り数量 2 夏 コ 6 11 夏 コ 3 で9じゃないの? 同様に、春ってさ35になっているけど、 ID 項目 単位 入り数量 1 春 コ 5 の5しか、データ無いんだけど(笑) あらら、ホントだ、なんで? 表1と表2をつなげてグループ化してるけど、 表1と表2って1対1じゃないから、 レコード数がn*n作成されるんですね、 そのレコード群に対してグループ化の集計をかけてるからねぇ。 表2の夏は、 ID 項目 単位 出力数量 4 夏 コ 6 11 夏 コ 5 と、2レコード 表2の春は、 ID 項目 単位 出力数量 1 春 コ 7 2 春 コ 8 3 春 コ 5 7 春 コ 1 8 春 コ 2 9 春 コ 3 10 春 コ 4 と、7レコードあったんですね。/* * 3.スマートに出来なかったのでドロドロした方法 */
なんだよ、画面コピーしながら説明文作ってたけど、ダメだったってことジャン。 もったいないから、上の2章で意味無い失敗として使ってるけど(笑) さてと、気を取り直して、ドロドロした処理を作成しますか。 直接つなげられないなら(方法あるかもしれないが、今はわからないので) データをキレイにしてから、つなげますか。 キレイにする? えっと、データ料理の下準備じゃないけど、 先に表1と表2を集計するクエリー集計1と集計2を作成します。 表1のデータ ---- ID 項目 単位 入り数量 1 春 コ 5 2 夏 コ 6 3 秋 コ 7 4 冬 コ 8 5 冬至 m 5 6 夏至 m 6 7 春分 m 7 8 秋分 m 8 9 冬至 m 1 10 夏至 m 2 11 夏 コ 3 12 秋 コ 4 13 冬 コ 5 14 冬至 m 6 15 冬 コ 7 ---- を集計して、下記のようなクエリーを作成する。 集計1 ---- 項目 単位 入り数量の合計 夏 コ 9 夏至 m 8 秋 コ 11 秋分 m 8 春 コ 5 春分 m 7 冬 コ 20 冬至 m 12 ---- と、表1を元に集計を行うクエリーを作成する。 ↑作成イメージ 表2のデータ ---- ID 項目 単位 出力数量 1 春 コ 7 2 春 コ 8 3 春 コ 5 4 夏 コ 6 5 秋 コ 7 6 冬 コ 8 7 春 コ 1 8 春 コ 2 9 春 コ 3 10 春 コ 4 11 夏 コ 5 12 秋 コ 5 13 冬 コ 6 ---- を集計して、下記のようなクエリーを作成する。 集計2 ---- 項目 単位 出力数量の合計 夏 コ 11 秋 コ 12 春 コ 30 冬 コ 14 ---- と、表2を元に集計を行うクエリーを作成する。 ↑作成イメージ これで、双方、先に集計を行い、データがキレイにまとまってます。 この、集計1と集計2をつなげるクエリー、結合12を作成します。 テーブル選択でクエリーを選択します。 あとは、項目で結合して、それぞれの項目を表示します。 実行結果は、下記のようになります。 ---- 項目 単位 入り数量の合計 出力数量の合計 夏 コ 9 11 夏至 m 8 秋 コ 11 12 秋分 m 8 春 コ 5 30 春分 m 7 冬 コ 20 14 冬至 m 12 ---- やっと、完成しました。 オイオイ、何か、忘れてない? えっ?何? ボケんなよ、 表まとめ 項目 単位 入り数量 出力数量 差(入り−出力) 春 コ 夏 コ 秋 コ 冬 コ よく見ろよ、差って書いてあるでしょ・・・ あっ、ホントだぁ。/* * 4.演算フィールドで差を計算する */
差を計算したいので、クエリーのフィールドに演算フィールドを作成します。 差:入り数量の合計 - 出力数量の合計 と空いているフィールドに入力します。(コロンは:と半角でお願いします) 入力すると、 差: [入り数量の合計]-[出力数量の合計] みたいに、[]が付くが、気にしないでね。 ↑入力位置 結果 ---- 項目 単位 入り数量の合計 出力数量の合計 差 夏 コ 9 11 -2 夏至 m 8 秋 コ 11 12 -1 秋分 m 8 春 コ 5 30 -25 春分 m 7 冬 コ 20 14 6 冬至 m 12 ---- よし、完成。と思ったが、出力が無いと、差が出てこない(計算されない) う〜ん、困った。 よし、NZ関数を使用して逃げてみます。 差: [入り数量の合計]-nz([出力数量の合計],0) と、NZ関数を使用して、NULLの時は0、それ以外は元の値を返すように細工して、 結果 ----- 項目 単位 入り数量の合計 出力数量の合計 差 夏 コ 9 11 -2 夏至 m 8 8 秋 コ 11 12 -1 秋分 m 8 8 春 コ 5 30 -25 春分 m 7 7 冬 コ 20 14 6 冬至 m 12 12 ---- やっと、完成したのかなぁ。 -【けんぞう!】--------------------------------------------------------- 三流君の、小金稼ぎ、お小遣い稼ぎシリーズ第2弾(稼げないだろコラ!!) http://www.ken3.org/etc/500yen/yosou.html キャンペーン参加で得たコインを予想問題に投票。正解するとコインが倍増、 それを換金という画期的“お得エンタメ”です。 運と実力で誰でも現金獲得のチャンスがあります。 思ったよりもあたらないけど、無料なのでチャレンジしてみては? ------------------------------------------------------------------------/* * 5.終わりの挨拶 */
う〜ん、1つのクエリーで出来なかったので、 スッキリしないが、 こんな感じで、データを整理しながら集計する方法もある。 と 結合プロパティの使い方やデータが増えてしまう、 そんな感覚がわかってくれれば・・と思います。 私の失敗が、何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。
No.114 | 2003/07/30 VBA で WScript.ShellのSpecialFoldersプロパティを使ってみた |
[ページTOPへ戻る] |
<VBA で WScript.ShellのSpecialFoldersプロパティを使ってみた>
どうも、三流プログラマーのKen3です。 今回は、 CreateObject("WScript.Shell") と、スクリプトのシェルを作成して、 SpecialFoldersプロパティを使って、 デスクトップの位置を取得してみたいと思います/* * 1.今回のキッカケ */
フォルダーの選択処理を前に作成しました。 詳細は、フォルダーを選択してファイルリストを作成する http://www.ken3.org/vba/vba-folder.html を見てください。 'フォルダー選択ダイアログを表示して、リターン値で選択場所を返す 'キャンセルの時は文字列キャンセル、 'デスクトップの時は文字列を返す
Function getFOLDER() As String Dim objShell As Object 'Shell Dim objFolder As Object 'Shell32.Folder Const strTitle = "フォルダを選択してください。" 'シェルのオブジェクトを作成する Set objShell = CreateObject("Shell.Application") 'フォルダー参照に設定 Const lngRef = &H1 'ルートフォルダーをデスクトップに設定 '5でMy Documents、6でFavoritesなど Const fldRoot = &H0 Set objFolder = _ objShell.BrowseForFolder(0, _ strTitle, lngRef, fldRoot) 'フォルダー名を取出し、リターン値をセット If objFolder Is Nothing Then 'キャンセルチェック getFOLDER = "キャンセル" 'リターン値にキャンセルをセット Else If objFolder.ParentFolder Is Nothing Then getFOLDER = "デスクトップ" Else getFOLDER = objFolder.Items.Item.Path 'パスをセットする End If End If Set objFolder = Nothing Set objShell = Nothing End Function |
Sub test() Dim objWShell As Object 'WScript.Shell Dim strDesktopPath As String 'デスクトップの場所 'Windows Script Hostのオブジェクトを作成する Set objWShell = CreateObject("WScript.Shell") 'スペシャルフォルダ(特殊フォルダ)の場所を返す strDesktopPath = objWShell.SpecialFolders("Desktop") '確認メッセージの表示 MsgBox "DesktopのPathは[" & strDesktopPath & "]です" End Sub |
Function getFOLDER() As String Dim objShell As Object 'Shell Dim objFolder As Object 'Shell32.Folder Const strTitle = "フォルダを選択してください。" 'シェルのオブジェクトを作成する Set objShell = CreateObject("Shell.Application") 'フォルダー参照に設定 Const lngRef = &H1 'ルートフォルダーをデスクトップに設定 '5でMy Documents、6でFavoritesなど Const fldRoot = &H0 Set objFolder = _ objShell.BrowseForFolder(0, _ strTitle, lngRef, fldRoot) 'フォルダー名を取出し、リターン値をセット If objFolder Is Nothing Then 'キャンセルチェック getFOLDER = "" 'リターン値に""空文字列をセット Else If objFolder.ParentFolder Is Nothing Then '下位を未選択デスクトップ? Dim objWShell As Object 'WScript.Shell 'シェルのオブジェクトを作成する Set objWShell = CreateObject("WScript.Shell") 'デスクトップの場所を返す getFOLDER = objWShell.SpecialFolders("Desktop") 'オブジェクトの開放 Set objWShell = Nothing Else getFOLDER = objFolder.Items.Item.Path 'パスをセットする End If End If Set objFolder = Nothing Set objShell = Nothing End Function |
Sub 選択テスト() Dim strWORK As String strWORK = getFOLDER() 'フォルダーの選択関数を呼ぶ If strWORK = "" Then '空文字””でキャンセルのチェック MsgBox "キャンセル押されたよ" Else MsgBox "選択されたのは" & strWORK & "です" End If End Sub |
目的の情報を探すには、最近はググれとよく聞きます。なので、検索ボックスを付けました。
いろいろなキーワードを入れて、検索してみてください。
ここまで、読んでいただきどうもです。ここから下は、三流君宛のメッセージ送信や 三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、※質問や感想は、気軽に送ってくださいね。
質問や要望など連絡方法でお互い確認が取りやすく、便利なのが掲示板なのですが、私の対応のまずさから不定期で荒れてしまい、掲示板は現在封鎖中です。(反省しなきゃ)
感想や質問・要望・苦情など 三流君へメッセージを送る。 時間的余裕のある要望・質問・苦情の場合は、下記のフォームからメッセージを送ることができます。 |
項目別に↓に人気の記事をまとめてみました。お探しのジャンルを選択してください。
人気記事(来場者が多いTOP3):
[VBAでIE,WebBrowserを操作]・・・VBAでIE,WebBrowserを操作する サンプルです
[Access から Excel 連携 CreateObject("Excel.Application")]・・・AccessからExcelを操作したりデータの書き出しなどです
[VBAでOutlookの操作 CreateObject("Outlook.Application" )]・・・VBAからOutlookを使い、メール関係を処理するサンプルです
↑上記3つみたいなCreateObjectで他のアプリケーションを操作するサンプルが人気です。
開発時の操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [ウォッチ式とSTOP]/ [参照設定を行う]
仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力]
Excel関係:
[Excel UserFormを操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
[ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
[Excel関係 関数、その他]・・・その他Excel関係です
Access関係:
[Access UserForm/サブフォーム 操作]・・・アクセスでフォームを使ったサンプルです
[Access レポート操作]・・・レポートを操作してみました
[Access クエリーやその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です
その他:VBAの共通関数やテキストファイルの操作など
[VBAでテキストファイル(TextFile)の操作]・・・普通のテキストファイルを使ったサンプルです
[VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます
Blog:[三流君の作業日記]/
[サンプルコードのゴミ箱]/
広告-[通販人気商品の足跡]