「みんな教えて! 選手権!!」開催のお知らせ

お世話になります。いつも助けられてます。エクセルVBAの質問です。個別のコーディングは
できるのですが,表題の件について,アドバイスいただければと思います。
やりたいことは,

1.ThsisWorkBookから他ブックを開く

2.開いたブックをみながら特定の行を選ぶ(← →キーか,マウスを使う)

3.選んだ行をThsisWorkBooに転記する

のようなことです。今までは,2の部分がは,あらかじめ読む行をテキストボックス等から
取得していましたが,視覚的に分かりやすくしたいので,2の部分をいれたいと考えていま
す。
キー入力の方法とうは,分かるのですが,流れとしてどんな手順を踏めばいいのか,また,
どのようなイベントを使用すればいいのか,アドバイスいただければありがたいです。

A 回答 (3件)

こんばんは



>(← →キーか,マウスを使う)
を完全にVBAで対応しようとすると、キー入力やマウス入力を取得して、内容を解析し、それに応じた表示を行うことが必要になります。
基本操作のUIとしてエクセルが有する機能ではありますが、VBAで全部を実装しようとするとそれなりに面倒かも知れません。

マウスやキーの操作を可能にするには、入力待ちループの中で、DoEvents等を実行することで可能にすることはできます。
また、「読む行」(?)を選択なり指定するなりしたら、それが終了したことを示す何らかの入力が必要になると思われます。
(Enterキー入力とか、なんらかのマウス操作などでしょうか。)

キー入力等をVBAで感知するには、WindowsのAPIを利用すれば可能になります。
https://liclog.net/getasynckeystate-function-vba …
https://vbabeginner.net/getasynckeystate/
これで必要な入力を判定し、それに応じた処理を行うという流れになるでしょう。
多少面倒とは思いますが、ルールをうまく決めておけば、実現することは可能と思います。


上記が面倒なら、もっと簡単そうな代案をいくつか・・
(いずれも、キー操作やマウス操作に関しては、エクセルの機能を利用する方法です)
◇開いたブックの固定セルをクリアし、
 そこに指定するセル範囲なり行番号等を記入するルールにしておく。
VBAでは、当該セルを監視して、セルの値が空でなくなったら、その値を利用して処理すれば実現できると思います。

◇選択終了用のボタンを設置したUserFormを作成しておき、
 ブックを開いたら Modeless でそのフォームを表示しておきます。
 (Modeless表示であれば、キー入力やマウス操作が有効になります)
 範囲指定が終わったら、ユーザはボタンを押し、VBAで残りの処理を行います。
 (ボタンクリックの処理に記述しておく)


思い付きレベルで申し訳ありませんが、こんなところでしょうか。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。ご教示いただいたHPを参考に,APIを使った方法でいろいろやってみたいと思います。
ThsisWorkBookから開くBookは,メールで,記入を依頼する
ものなので,マクロを置くのは,避けたいと思ってます。

お礼日時:2023/09/28 09:24

No1です。



>ThsisWorkBookから開くBookは,メールで,記入を依頼する
>ものなので,マクロを置くのは,避けたいと思ってます。
No1の回答は、ThisWorkbook(=転記先ブック)にのみマクロが記述されていることを想定しています。

代案での方法も同様で、マクロは自ブックのみで、転記元のブック(=開かれる他のブック)は .xlsx等 マクロのないブックで可能なはずです。
(個人的には、最後の案が一番よさそうに思いますが・・)
    • good
    • 0
この回答へのお礼

たびたびありがとうございます。
今回は,ご教示いただいた,
https://vbabeginner.net/getasynckeystate/
の例示のものを改変して,何とか思った動作ができるようになりました。
ありがとうございました。

お礼日時:2023/09/28 11:15

かっこ悪いですが。


キー入力プロセスが入るなら、 キー入力後にどのセルを選んだか決定する処理が入るですよね。
ThisWorkbookをまっさらなエクセルでなく、あらかじめ作ったボタン付きマクロシートを呼び出すことにし、セルを選んでボタンを押すと次のマクロが走る(前のマクロはThisWorkbookを開いて終わる)
など、2段構えのマクロにすれば、出来るのかなと。
最初のマクロ付きエクセルに、ボタン付きシートもテンプレートで用意し、マクロ途中で外にコピーし、それを使うとかで、ファイル自体は1つで済ませれるかもです。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。また,アイディアもあり
がとうございます。
This Workbookには,大本になるマスターのデータや,処理
本体のVBAを記述しています。
ThsisWorkBookから開くBookは,メールで記入を依頼する
もので,マクロ等を設置するのは,さけたいと思ってます。

お礼日時:2023/09/28 09:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報