Excel_VBAでキーバッファへのデータの転送

このQ&Aのポイント
  • ExcelのVBAで実行したマクロにおいて、エクセルの戻る操作ができない状況に困っています。キーバッファを利用して戻る機能を実現する方法について教えてください。
  • VBAやVBの知識がある方に質問です。エクセルのVBAで実行したマクロにおいて、戻る操作を有効にする方法はありますか?キーバッファを使用してデータを転送することで戻る機能を実現できるのではないかと考えています。具体的な手順について教えていただけると助かります。
  • ExcelのVBAでマクロを実行した場合、戻る操作ができない問題に直面しています。キーバッファを利用してデータを転送することで、戻る機能を実現できるのではないかと考えています。VBAやVBに詳しい方に教えていただきたいです。マクロを実行した後でも戻る機能を有効にする方法を教えてください。
回答を見る
  • ベストアンサー

Excel_VBAでキーバッファへのデータの転送?

ExcelのVBAで、実行したマクロは、エクセルの戻る操作が出来ないように思います!!少なくとも私のスキルでは・・!! で、考えたのですが、エクセルの機能の内、キー入力だけで実行できる操作であれば、キーバッファ(はるか昔にはこのように呼んでいたとおもいます。具体的には、キーボードで入力した情報を一時的に溜める部分)に模擬的にキー情報を転送すれば、エクセルの戻る機能が使えると思いました。で、どうすれば、いいのでしょうか?思いついたもののどのようにすればいいのか?解りません! VBAもしくは、VBに詳しい方教えて頂けないでしょうか?宜しくお願い致します。できれば、マクロで、戻る操作が有効になる方法を教えて頂くと嬉しいです。よろしくお願いいたします。

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

あまり、難しいことを考えない方がいいのではないですか? 恐らく SendKeys とかkeybd_event API、または SendInput、 SendMessage、PostMessage あたりの API のことでしょう。 API はとりあえず横に置いておくとして、SendKeys について 書きます。Excel アプリケーションにとって、  ・直接キーで入力された  ・SendKeys で送信されたキー の両者に違いはありません。したがって、SendKeys でキー (ショートカットキー)を送信し、コマンドを実行する形 ならば、理屈上は Undo できるでしょう。。。 ' // 下記コードも高い確率で Undo できます。 Sub sample()   Range("A1").Copy   Range("C5").Select   SendKeys "^v" End Sub でも、せいぜい1回~2回のコマンド実行分までです。実用途に は耐えないでしょうね。SendKeys は「失敗するもの」ですしね。 ご自身でいろいろと試してみると良いと思います。 なお、マクロの Undo を実現したいなら、マクロによる操作を全て 記録することです。例えば、 記録:A1セルの背景色 = 変更前 インデックス3 実行:A1セルの背景色 = インデックス5に変更 記録:B1セルの値 = 変更前 100 実行:B1セルの値 = 150 に更新 ・・・・・・・・ などのように、操作前の状態を何らかの手法を用いて(ワークシート などへ)記録していけば、Undo はその逆方向を実行すれば良いこと になります。 しかしながら、今まで完全な Undo を実装したマクロを見たことは 残念ながらありませんが。。

wan_wan
質問者

お礼

御回答ありがとうございます。 マクロで操作を全て記録することは、思いついていました。しかし、折角エクセル本体にその機能があり、また、戻る確率も高い環境があるので、間接的にでも使えないものかと思い質問してみました。 とりあえずSendKeysで試行錯誤しながら確認してみます。ありがとうございました。

その他の回答 (1)

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

こんにちは。 「元に戻る」ということは、必要な状態を保存していることに他ならないと思います。 だから、Excel VBAに限りることですが、それは、キーバッファやキーロガーというようなものではなく、VBAの実行前と実行後の元に戻すための、最小限のデータをどこかに確保すればよいのです。 例えば、数値を書き換えるなら、その数値を事前に、ファイル、または、テンポラリシート、または、グローバル変数等に保存してしまい、そして、マクロを実行します。 必要に応じて、元に戻す、というマクロを別に実行して、その保存したデータを取り戻せばよいわけです。そして、ブックを終了する前などに不要になったデータは、破棄するようにすればよいです。

関連するQ&A

  • Excel2007のVBAについて

    Excel2007のVBAについて Excel2007以前では「マクロの記録」を実行して罫線や図形の描写を行って、「記録終了」を行うと作業していたコードが記述され、それを加工したりして使っていましたが、Excel2007で同じように行ってもコードが記述されてませんでした。 セルの操作等はコードが記述されていました。 どこか、私の操作方法が間違っているのでしょうか。また2003のようにコードを記述させる方法が別途あるのでしょうか、よろしくお願いします。 関係ないとおもいますが、 「Excelのオプション」で「開発タブをリボンに表示する」はチェック入れてあります。 「マクロの設定」では「すべてのマクロを有効にする」にチェックしています。

  • エクセルVBAでタイマーコントロールは使えますか

    エクセルVBAでタイマーコントロールは使えますか。 エクセルVBAで、ある時刻になったらマクロを実行させたいと思っています。 無限ループの中にTIME関数で時刻を呼び出し、それをIF文で判定して、 一定時刻にマクロを実行させるものは作りましたが、CPU負荷が高く、24時間 連続で動作させることに不安を感じています。 この他に、VBのタイマーコントロールのような機能を持つオブジェクトや 便利機能等があったら教えていただけませんか。 (一応、VBで時刻管理をするプログラムを作ってそこからエクセルVBAを呼 び出す方法やタスクスケジューラでエクセルVBAを呼び出す方法、ATコマンド 等も考えていますが、可能ならエクセルVBAで閉じて処理をしたい)。 尚、私はWindowsMe+エクセル2000でVBAを作成しています。 実際にVBAを動かすのは、WinsowNT4.0サーバー+エクセル2000を予定してい ます。

  • Excel2000とExcel2002のVBAの違いについて。

     以前、このカテゴリーにて、Excel2000におけるVBAのマクロを教えてもらったのですが、そのマクロ入力済みエクセルファイルをExcel2002へ移植したら、上手くVBAが働きません。  具体的にいうと、シート1に入力したデータの履歴を、シート2にて保存していくマクロなのですが、Excel2002では履歴のシートに上書きしていくことがあります。(たまに発生する)  Excel2000ではキチンと履歴のセルが全て残ります。  どなたか、この不具合を認識しておられる方。もしくは、対策をご存知の方がいらっしゃいましたら、教えてください。  

  • EXCEL2000 VBA マクロ実行中に他の作業ができないか

    いつもお世話になっております。 EXCEL2000 VBAでマクロ実行中にEXCELで別の作業(表計算したり、別のマクロを実行したり)がやりたいんですが、可能でしょうか。 よろしくお願いいたします。

  • エクセルVBAでの外部トリガ

    エクセルでマクロの記憶などを使い簡単な動作を実現しています。 マクロの実行に「ボタン」のクリックなどを設定したりしています。 そんな状態で質問です。 エクセルを立ち上げておいて外部トリガでマクロを起動させることはできないのでしょうか? マウス操作やキー入力は無しで起動させたいです。 アドバイスお願いします。

  • Excel2003 VBA WebBrowser

    Excel2003のVBAでWebBrowserを使用してサーバのHTMLを取得しています。 (結構長いコードです。OSはXPです) 実行後、セルに半角英数字が入力できなくなります。 (キーボードを押しても反応しないような感じ) 日本語入力ならできるのですが、Excel本体を再起動すると元に戻ります。 (Altを押しっぱのような状態になっているのでしょうか?) またExcelを落とす時に砂時計が出てきてExcelが消えるまでにやたらと時間がかかります。 会社の情報があるのでここでコードを表示する事はできませんが、 何が原因で、どうすれば不具合解消させる事ができるでしょうか? ご存知の方、どうかご教授の程よろしくお願いします。

  • エクセルVBAの、「元に戻す」ボタンについて

    エクセルVBAの、「元に戻す」ボタンについて エクセル2007を使用しています。 そこで、マクロを書いているのですが、 マクロを実行すると、エクセル画面上の「元に戻す」ボタンが効かなくなってしまいます。 マクロで変更したセル内容等が元に戻せないなら納得できるのですが、 エクセル上で、手入力で変更した、マクロ実行直前の状態にも戻せません。 (手入力で変更した内容と、マクロで実行した内容は、別の物です) しかも、「Worksheet_SelectionChange」を設定しているため、手入力で何か変更し、 他のセルをクリックしたらもう、手入力した内容を元に戻ないため、 事実上エクセル画面上の「元に戻す」ボタンはないに等しいです。 このようなものなのでしょうか? もし回避策とうあれば、 情報いただけますとありがたいです。よろしくお願いいたします。

  • Excel2002でマクロやVBAが使えない

    ファイルNO230881にExcel97で作ったマクロがExcel2000で使えないという質問がありましたが、私の場合Excel2000で作ったマクロがExcel2002で使えません。 ファイルNO230881の方は自動修復で直ったそうですが、自動修復のリストにExcel が乗ってきていないので困っています。 起きている症状は、 Excel2000で作成したマクロを、Excel2002で実行しようとしたら、***はマクロを含んでいますとメッセージが出て、マクロを有効にすると、オブジェクトライブラリは登録されていませんというメッセージが出てきたので、OKにし、もう一度マクロを有効にしたら、「***の修復   ***にエラーが検出されましたがMicrosoftExcelは次の修復を行うことによってファイルを開くことができました。修復を保持するにはこのファイルを保存してください。  VisualBasicプロジェクトが失われました。 ActiveXコントロールが失われました。」というエラーメッセージが出てきて、マクロがなくなってしまい、また新しくマクロを記録しようとしても、記録できません、というエラーメッセージが出てきてマクロが作れなくなってしまいました。 尚、セキュリティは中にしてありますが、低でもマクロの記録ができないです。なぜでしょう? VBAプロジェクトのライブラリファイル参照がうまくいっていないということはわかるんですが、VBエディタの[ツール]>[参照設定]がグレーで開くことができません。 みなさんのお知恵をお貸しください。

  • Excel2007でのVBAについて

    Excel2007でのVBAについて お世話になります。稚拙な質問になると思いますがよろしくお願いします。 VBやマクロにつきましてはまったくの初心者なのですが、 「セルをランダム色で塗る」というコードを自分なりに考え、 ボタンに付着させてみました。以下の通りです。 With Selection.Interior .Pattern = xlSolid .Color = RGB((255 * Rnd), (255 * Rnd), (255 * Rnd)) .PatternTintAndShade = 0 End With しかしボタンを押し実行してみますと、塗りつぶしはされるのですが、 Excelを起動してから最初の実行は必ず同じ色になります(小倉色のような)。 ポチポチとクリックしていっても、ランダムにはならず 毎回同じ順番で色が変化していきます。 1,600万色の中からランダム色で塗りつぶされないのは、何が問題でしょうか? ご指摘と、解決の方法をご教示お願いいたします。

  • VB6とVBAのマクロのアクセス方法を教えてください。

    VB6とVBAのマクロのアクセス方法を教えてください。 用途は、 (1)VB6からVBAマクロを起動する。 (2)VBAマクロの途中経過をVB6のオブジェクトへ通知する。 VBAはPC外部接続機器をコントロールします。 VB6での実装サンプルが用意されていない為、VBAを使用しております。) (3)VB6は通知結果を、拾って別ルーチンの処理を実行する。 (1)では、下記の様な方法にてマクロ実行を考えていたのですが、 マクロが終了するまで、次コードへ移らない為、 シェル関数の様な形でマクロをキックしたい。 xlApp.run ("VBA_TEST(" & Chr(&H22) & strarg & Chr(&H22) & " )") (2)では、VBAとVB6と平行に実行したい為、フラグをやり取りするのに、 VB6のオブジェクトを使用したい。

専門家に質問してみよう