質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • VBA

    1802questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Excel

    1539questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

Excel VBA Googleデスクトップ検索のようなショートカットキーの設定

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 372

zorac

score 34

Googleデスクトップ検索で使われていた下記ショートカットキーでフォームを表示する設定を行いたいと考えています。
{Ctrlキーを1秒以内に2度連続で押す}

現状 ショートカットキー{F1}の場合

F1キーを押す度にフォームを表示・非表示する

Private Sub Workbook_Open()
   Application.OnKey "{F1}", "toggleForm"
End Sub

Public Sub toggleForm()
    If UserForm1.Visible Then
        Unload UserForm1
    Else
        UserForm1.Show
    End If
End Sub

実現したいこと ショートカットキー{Ctrlキーを1秒以内に2度連続で押す}

Ctrlキーを1秒以内に2度連続で押す度にフォームを表示・非表示する

試したこと

とりあえずイメージが伝わるようにと、フォームコントロール上で実装してみました。

Dim doublePressingFlag As Integer
Dim previousKey As Integer
Dim t As Single
Private Sub CheckBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = previousKey Then        '前回と同じキーが押された場合
        If Timer() - t <= 1 Then          '1回目と2回目の押下時刻の差が1秒以内
            doublePressingFlag = True     '2度押しフラグを立てる
        Else
            previousKey = 0               '時間制限を超過したので、前回押下キーを初期化
        End If
    Else                                 '前回と違うキーが押された場合
        previousKey = KeyCode             '前回押下キーを初期化
    End If
    t = Timer()                           'キーが押された時刻を記録

    If doublePressingFlag Then
        Call toggleForm                  '制限時間内にキーが2度押しされた場合はフォームを表示・非表示
    End If
End Sub

発生している問題・エラーメッセージ

フォームコントロールのkeyDownイベントでは問題なく実現できたのですが、
これと同じ機能をワークシート上で行う方法が分かりません。
キーの2度押しを拾うとなるとAPIを使う事になるのでしょうか。

補足情報(言語/FW/ツール等のバージョンなど)

Excel 2010

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

ご質問の内容に合致しそうなものがStack Overflowで回答されていました。
抜粋ははばかられたので、リンクだけ示します。

Can I capture and emulate a KeyDown event in Excel VBA?

コードを見ると、Windows APIのPeekMessage() でキー押下をキャプチャーし、
あらかじめFindWindow() で見つけておいたExcelのウィンドウ("XLMAIN"ウィンドウ)へ
SendKeys() でキー押下をシミュレートしています。
Excel 2013でも"XLMAIN"だったので、共通と思ってもよさそうです。

これを参考にさせてもらって、タイマー監視とフォームの表示/非表示のトグルをうまく組み合わせれば、
目的の機能が実現できる気がします。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/24 23:52

    ありがとうございます。明日試してみたいと思います。

    キャンセル

  • 2017/09/27 12:12

    遅くなりましたが無事目的を達成できました。
    ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    VBA タイマー機能をつける

    文字の意味とフォントの色が一致しないようなテスト(ストループカラーワードテスト;例 あかという文字が緑色で書かれている)を作りたいです. 現在,問題は画像で表示して,その回答が下

  • 解決済

    Excel VBA のe-learningに関する質問

    Windows7(32ビット) の環境でExcel2010 VBAを使って下記のような e-learningの問題を作りたいと思っていますので、どなたかお分かりになる方、 ご教

  • 受付中

    マクロ実行中のセル入力について

    excelvbaでマクロ実行中に セルに入力をするとマクロがとまってしまいます。 マクロの内容としては、セルの順番にアクティベートにして、 そのセルに入力を出来るようにしたい

  • 解決済

    Excel VBA 特定範囲の重複している列に空白を設定する

    お世話になっております EXCELのVBAや関数を使用し、下記の様な表を編集したいと思っております。 置換前 グループ 項目1* 項目2 項目3 項目X 項目Y

  • 解決済

    VBA ユーザーフォーム内でコマンドボタン等を移動させる方法

    PowerPointのVBAでユーザーフォームを作成しています。 そこで以下のようなプログラムを作成しています。 ①フォーム内のコマンドボタンをクリックすると新たなコマンドボタンを

  • 受付中

    【EXCEL/VBA】条件に合う行を別シートに参照したい

    《楽天シート》のD列に1~3が入力されたとき、 《クレジット詳細シート》の5行目の(1)(2)(3)に対応するところに 黄:利用日 緑:商品名 青:利用金額 がそれぞれ参照さ

  • 解決済

    VBAの引数の括弧について

    失礼します Excel VBA のクラスについて調べていたらこのサイトを見つかって読んでいたのですが はてなID t-hom さん http://thom.hateblo.

  • 解決済

    vbaにおける可視セルの選択(複数行の場合)

    質問させていただきます。 Excelでデータベースを作成中です。(来店記録のようなものです) 現在、A列に名前、B列に住所が入っており、C列には日付、D列には○か☓が必ず入る予定の

同じタグがついた質問を見る

  • VBA

    1802questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Excel

    1539questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。