EXCEL Form モードレスでのデータ絞り込みフォームの最前面表示方法

このQ&Aのポイント
  • EXCELのFormモードレスで開いている際に、データ絞り込みフォームを常に最前面に表示する方法を教えてください。
  • ExcelのBookにはAとBの2つがあり、Book Bを起動するとAのシートと絞り込みフォームが表示されます。しかし、絞り込みフォームを使ってデータを絞り込む際に、フォームが最前面に表示されるようにしたいです。
  • WindowsのAPIを試してみましたが、うまく行きませんでした。他の方法や参考になる回答があれば教えてください。
回答を見る
  • ベストアンサー

EXCEL Form モードレスで開いて

BookがそれぞれAとBとあります。Book BにBook AとBのデータを絞り込むデータ入力フォームを開くようにしています。 Bを起動するとAのsheetを開き、絞り込みフォームが開きます。 画面上は最背面にB、次にA、最前面にフォームとなります。この状態でAを絞り込む場合には、このままでいいのですが、Bを絞り込んだり、結果を表示すると、「B-フォーム-A」の順序になり、また絞り込むとき、Book Aを選択しなくてはなりません。 フォームを最前面に常に表示するにはどうすれば良いでしょうか? 他の質問で、WindowsのAPIを屈指してでないとだめですか? APIも試してみましたが、うまく行きません。 参考になる回答でもありましたら、お教えください。

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

  • ベストアンサー
回答No.2

>なにか良い方法はありませんか? ふたつの手段があると思います。 あくまでも、Excel の32bit 版を、Wow64で使用する。 http://technet.microsoft.com/ja-jp/library/ee681792.aspx 「ほとんどのユーザーには 32 ビット版 Office 2013 をお勧めしています。」 もうひとつは、古くからあるテクニックで、 小さなブックを作り、それをUserFormの代わりにする。そして、そこにボタンなどを置く。画面が切り替わっても、イベント・ドリブン型マクロで、Windows(1).Activateなどで、オーダーの先頭に置く。バージョンによって不可能なものもある中で、確か、Excel 2013では、そのようなことが可能だったと思います。 こういうことが考えられます。

k321201
質問者

補足

回答、有難うございます。 >画面が切り替わっても、イベント・ドリブン型マクロで、Windows(1).Activateなどで、オーダーの先頭に置く やはりDataとVBAとは別Bookに分けないと駄目ですか? 入力用フォームは、データを逐次入力するので、完全に分けましたが。 また、開くBookが変わるとユーザーが混乱しそうです。 現状の切り分けラジオボタンで様子を見ます。 また、別のアイディアが浮かびましたらお願いします。 また、他の方のご意見もお待ちします。 有難うございます。

その他の回答 (1)

回答No.1

こんにちは。 >絞り込んだり、結果を表示すると、「B-フォーム-A」の順序になり、また絞り込むとき、Book Aを選択しなくてはなりません。 最初に、再現性が取れませんでした。直接の回答ではありませんが、いろいろと試行錯誤してみました。 >APIも試してみましたが、うまく行きません。 googleで調べて、以下のような文面がありました。 http://dobon.net/vb/dotnet/process/appactivate.html 「MSDNの「SetForegroundWindow」の説明にあります)。そうならないのにはそれなりの理由があり、本来ならばそのようなOSのルールを尊重し、従うべきです。」とあります。 それでも、変える場合とありました。VB.Netですが、Win32 APIに関しては、内容的に、VBAとはほとんど変わりません。 再現性がないのは、ExcelのバージョンとOSの関係かもしれません。 こちらは、Excel 2010, OS Windows7 32bit です。 [Windows7 64bit、Excel2010だとユーザーフォームが最前面に出ない] とありますが、これでしょうか。 http://ninoha.com/?p=349

k321201
質問者

補足

早々の回答、有難うございます。 こちらのバージョンは、Excel 2013、OS Windows7 64bitです。 http://ninoha.com/?p=349 これもすでに試したのですが、 Book Aが表示されない。フォームが別窓扱いになります。タスクトレイのEXCELが 本来、Book AとBになるはずが、Book Aとフォームになってしまいます。 仕方がないので、今はフォームにBook AとBの切り替えラジオボタンを配置して 切り替えの度に切り替えたBookをアクティブにしてにフォームを開き直しています。 (これだとフィルターのデータをAとB用にメモってリロードしないといけない) なにか良い方法はありませんか?

関連するQ&A

  • EXCEL VBA 共有ファイルと入力フォーム

    データ入力を複数人で行うため、素のデータBook Aと入力フォームを持つBook Bがあります。 Book Bを開くと自動的にBook Aを開き、入力フォームでデータをBook Aにデータを入れていくVBAを作成しています。 EXCELのフォームはそのBook上での起動でPopUP的に表示されます。(Book Bのシート表示上でフォームが表示される) ユーザーからの要望で、Dataの入力状況を確認しながら、入力したい。つまり、Book Aのデータシートを背面に表示して、その上に入力フォームを表示したい。(入力フォームは常に手前に表示したい) 同じBooK内ならデータシートをセレクトしてフォームを開けばいいのですが、このような場合には、どうしたらいいでしょうか? お知恵をお貸しください。

  • エクセルでLOOKUPの使い方について

    エクセルでLOOKUPの使い方について教えてください。 画像にて、 Book1のB列にA列に紐づくデータをBook2のA列のデータより取り込みたいと思います。 =LOOKUP(A1,[Book2]Sheet1!$B:$B,[Book2]Sheet1!$A:$A) とすると全く異なるデータが入ってしまいます。 使い方が間違ってますでしょうか?

  • VB.NETからエクセルを起動して、エクセルでVBを閉じたい。

    こんにちは。 先日、エクセルのフォームを最前面に配置したいという 質問をさせて頂いたものでございます。 それで、SetWindowPosのAPIで設定する方法を教えて頂いたのですが、 最前面にする事は出来たのですが、フォームを動かすと ブックはその一つ下に現れてしまい、 ブックを最背面に配置するなどを試みてみたのですが、 どうもうまく行かないので、 エクセルから直に立ち上げることが出来ないようにして VB.NETのフォームを作ってエクセルにデータを送ろうかと思いました。 それで、データを送る方法は何とかなりそうなのですが、 VB.NETのフォームからエクセルを起動して、 次にエクセルからそのフォームを出したり、隠したりしたいのですが、 その場合、VB.NETのフォームのなんと言うハンドルを取得すればよいでしょうか? IDにも色々あるようで、どれを使えばよいのか分からなくなってしまいました。 そのIDはVBのフォームを起動した時に、エクセルと共有するiniファイルなどに、書き込んでおこうかと思っています。 よろしくお願いいたします。m(__)m

  • エクセルについての質問です。

    エクセルについての質問です。 BOOK1、BOOK2、BOOK3のエクセルデータがあり BOOK1をメインと考えて BOOK2、BOOK3のシートの指定したセル (たとえばシート1のA列1、2、3行B列1、2、3行C列1、2、3行) からデータをBOOK1のシート1にその部分のデータを 取り込む方法が知りたいです。 色々と調べてみましたがわかりません。 初心者ですのでご教授お願いします。 宜しくお願いします。

  • Excel2013で複数のブックの表示を切換たい

    Excel2013で複数のブックを開いている時、フォームのボタンで表示するブックを切り替えたいのですが・・・。 Excel2013で複数のブック1~5を開いているときにVBA(ブック5.Activate)を使って、ブック5を前面に持ってきたいのですがうまく行きません。 詳細は、ブック1~5が既に開いている状態で、「ブック1の作業を終了しますか?」というフォームの「終了」ボタンを押すと新しいフォーム(ブック5で行う作業内容や手順の書かれたもの)を最前面に表示し、その背面にブック5を表示したいのですが、現状は、新しいフォームは最前面に表示されるのですが、ブック5は、ちゃんと新しいフォームの背面に表示されるときもあれば、ブック1~4のさらに背面に表示されたり、ブック1の背面に表示されたりとランダムな位置に表示されてしまいます。何か良い方法がございましたら教えて頂きますようお願い致します。

  • Excelの複数の行番号の指定したセルを他のシートの

    特定のセルに表示させる方法はありますか? これだけではわかりづらいと思いますので…。 例えば、Book1のシート1のセルB3からD3をシート2のセルC4F6K6に表示(同じセルではない)させ、このシートを他の新しいブック(Book2)として保存(これは印刷するので無理なら必ずしも保存出来なくても良い)し、Book1のシート1のセルB3からD3に入力したデータはそのまま(変更しない)で、次に次の行のB4からD4をBook1のシート2のセルC4F6K6に表示させ、またこのシートを他の新しいブック(Book3)として保存する、というような作業を繰り返したいのです。 要するにBook1のシート1の行の上から下へ順番にデータを入力していき、常にシート2の特定セルにシート1の最新データが表示されるようにしたい、ということです。 要領はわかっていただけたでしょうか? よろしくお願いします。

  • MS Excelで、BOOK1でシート別にデータを格納し、BOOK2で

    MS Excelで、BOOK1でシート別にデータを格納し、BOOK2でBOOK1のシートのデータを読み込んで計算及び比較をする時の質問です。 BOOK1にA,B,Cという3つのシートを作りデータを格納したとします。 BOOK2のSheet1でBOOK1のAとBのデータを参照して比較をしました。 続いて、BOOK2のSheet1でBOOK1のAとCを比較する場合に、最初に使用したBのところにCのデータを入れて比較したいと思っています。(その後同シートでBとCの比較もしたい) 置換で参照シートをBからCに変えて、参照データをBからCに変える方法は思いつくのですが、その他で何か方法はありますでしょうか?

  • エクセル

    Book1 A1セルにBook2 A1,B1,C1(同一シート)いずれかに文字あるいは数値が入力された場合 Book1 A1にリンクするようにしたいのですが =[Book2.xls]Sheet1!A1&[Book2.xls]Sheet1!B1&[Book2.xls]Sheet1!C1 とすると今後D,E・・・・と続くとすごく長い式になってしまいます。 これをもっと簡単な式に出来ないものでしょうか。(エクセル2003使用) ヨロシクお願いします。

  • excel vba

    テーブル情報に基づきシートをコピーするVBAマクロを記述したい。 ExcelのBook111のSheet1に次のような データが入っています。 (1、2)セルにn=3という数字が入っているものとします。 その数値に合わせて、この場合は3なので Sub Sample01() Workbooks("Book3.xls").Worksheets("booksheet3").Copy After:=Workbooks("Book111.xls").Sheet(1) End Sub のようなつまり、booksheet3なるシートをBook111(固定なBOOK)にコピーしようとしています。 このようなことをVBAで書くにはどうすればいいのでしょうか。 ただしBook名とシート名はあくまでデータの値にもとづいたデータをもってくることになります。 要するに間接参照したデータに基づき処理するのをどのように記述するかという質問です。 A列 B列 1 回数 n=3 2     3     4 Book1.xls book1sheet ←n=1 5 Book2.xls book2sheet ←n=2 6 Book3.xls book3sheet ←n=3 7 Book4.xls book4sheet 8 Book5.xls book5sheet 9 Book6.xls book6sheet ←n=6 10 Abc,xls Defsheet ←n=7

  • エクセル VBA? 関数?

    book1(データ入力用)とbook2(送信用)で作業します。 必ずbook1→book2の順番で開きます。 book1には1ヵ月の日数分のsheetがあり(約30sheet)、作業中のsheetのA1の日付を、book2を開いたときにbook2のB4に自動的に表示される様にしたいです。 関数でも可能であればOKですが、できればVBAの文章をおしえてください。Private Sub Worksheet_Activate()で可能でしょうか??? よろしくお願いします。

専門家に質問してみよう