こんにちは、自身で調べてはみたのですが、特定のキーを押すというマクロは見つかったのですが、押しっぱなしというものが見つからず質問させて頂きました。
エクセルを操作する時に、離れたセルを選択する時やグループ化の際の選択にはCtrlキー+クリックを用いますが、この動作を再現するようなもの、もしくはCtrlキーを押している、押していないというスイッチのようなものを作ることは可能でしょうか?
ミスタイプでよく選択が解除されたりするため、スイッチなどがあれば確実だなーと思いました。
A 回答 (7件)
- 最新から表示
- 回答順に表示
No.7
- 回答日時:
#5の補足の補足的情報としては、元の私のコードは、ある種のマクロは、keyboard 上の NumLock を外してしまうので、取り付けたものです。
そのマクロのNum Lock版は、本体のマクロとセットで使っていますから、そちらは、何千回と使われているものです。
昨日今日できたものではないのですが、Control キーは事情が違いますので、AsyncKeyコマンドで、Control キーを監視する方法が考えられます。
そこで、押した・押さないは感知できますから、まだ、もう少し工夫の余地はあります。
もう一つは、こちらは、32bit だからですが、64bit では、
Declare の後に、PtrSafe を加える必要があります。
その技術を応用すれば、完全な形にはなるとは思いますが、質問者さんの多くの中からどれがよいという恣意的な選択肢の中で終わってしまうだけでは、このコードは内容的に重すぎますから、深追いはやめておきます。もう少し、工夫の必要はあるのは知っています。
しかし、個人的な興味もあり、改良を加えてみると、結局、Windowsの設定の固定キーと考え方が近寄っていくわけで、そのぐらいなら、物理的にキーボードのコントロールキーにテープを貼り付けてしまってもよいかとも思えてくるのです。実際、この前から、キーボードが調子が悪くて、左シフトキーを中心として、押した状態が戻らなくなり、ついにこの開発の最中にキーボードを交替させました。
また、一頃は流行ったキーボードSwapで、シフトとCtrl キーを入れ替えても良いのではないかと思います。方法はいくつもありますから、ここの質疑の中だけでなく、適当なものを選べばよいと思います。
No.6
- 回答日時:
Ctrlキーを押しっぱなしにしなくても、離れたセルを連続して選択できれば良いのですよね?
マクロ、トグルボタン等のキーワードが出ているのでユーザフォームとかでも大丈夫ですよね?
まず、ユーザフォームを作って、その上にトグルボタンを配置します。とりあえず、名前はデフォルトのままとします。
その上で、次のVBAを書いてください。
使い方ですが、まず、標準モジュールの sample を起動します。すると、ユーザフォームが表示されます。
トグルボタンをオンにすると、連続してセルが選択できるようになります。トグルボタンをオフにすると解除されます。
【Sheetモジュール】
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If myRng = "" Then Exit Sub
Application.EnableEvents = False
myRng = Target.Address & "," & myRng
Range(myRng).Select
Application.EnableEvents = True
End Sub
【UserForm1モジュール】
Private Sub ToggleButton1_Click()
If ToggleButton1.Value Then
myRng = Selection.Address
Else
myRng = ""
End If
End Sub
【標準モジュール】
Public myRng As String
Sub sample()
UserForm1.Show vbModeless
End Sub
No.5
- 回答日時:
こんばんは。
一般的には、Windows の設定-簡単操作-[キーボード]クリック
Windows 10 ですが、他のバージョンでも似た機能があります。
「Ctrl、Alt、Shift、Windowsロゴキーを2回続けて押すとそのキーをロックする」
ここを[オン]にします。(今のところは、指はちゃんと動いているようですが、近いうちには、私もお世話にならなければならないキーかもしれません。これは、障がい者用のキーです。)
たぶん、フリーソフトウェアも出ているかと思います。中身は、大した違いはないでしょうけれども、VBAでは反応が鈍いのです。
もし、マクロで、それをしようとすると以下のようになります。
「君子危うきに近寄らず」と思うなら、以下のようなものは使わないほうが懸命かもしれません。昔、使っていたものを見直して設定しなおしました。もう、今の私の能力では、以下のようなコード自体は書けません。
トグルが上手くいかないので、行き着いたものが、CommandButton なのでした。つまり、コントロールキーを押し続けていることになるので、通常では、Off状態には戻らないのです。
>チェックボックスかトグルボタン
Ctrl キーに反応するオブジェクトでないといけません。
シートにActive X のコマンドボタンを付けます。
Private Sub CommandButton1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Shift = 0 Then
Call Command_ControlKey(True)
Else
Call Command_ControlKey(False)
End If
End Sub
'----------------
標準モジュール
Option Explicit
'API declarations:
Public Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long
Public Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Public Declare Function GetKeyboardState Lib "user32" (pbKeyState As Byte) As Long
Public Declare Function SetKeyboardState Lib "user32" (lppbKeyState As Byte) As Long
'Constant declarations:
Public Const VK_CONTROL = &H11
Public Const KEYEVENTF_EXTENDEDKEY = &H1
Public Const KEYEVENTF_KEYUP = &H2
Public Const VER_PLATFORM_WIN32_WINDOWS = 1
Public Const VER_PLATFORM_WIN32_NT = 2
Public Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
'Maintenance string for PSS usage
szCSDVersion As String * 128
End Type
Public Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Public Declare Function MessageBoxTimeoutA Lib "user32" (ByVal hWnd As Long, _
ByVal lpText As String, ByVal lpCaption As String, ByVal uType As Long, ByVal _
wLanguageId As Long, ByVal dlliseconds As Long) As Long
Public Sub Command_ControlKey(ctrlFlg)
'''キーを監視
Dim OsVer As OSVERSIONINFO
Dim ControlKeyState As Boolean
OsVer.dwOSVersionInfoSize = Len(OsVer)
GetVersionEx OsVer
Dim keys(0 To 255) As Byte
Sleep 1000
GetKeyboardState keys(0)
ControlKeyState = keys(VK_CONTROL)
If OsVer.dwPlatformId = VER_PLATFORM_WIN32_NT Then
'If Not ControlKeyState = False Then
If ctrlFlg = False Then
'Simulate Key Release
keybd_event VK_CONTROL, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
MessageBoxTimeoutA 0&, "解除されました。", "messagebox", vbMsgBoxSetForeground, 0, 1000
Else
'Simulate Key Press
keybd_event VK_CONTROL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
MessageBoxTimeoutA 0&, "設定されました。", "messagebox", vbMsgBoxSetForeground, 0, 1000
End If
Else
MsgBox "現在旧OSについてはコードを示しません。", vbExclamation
End If
End Sub
No.4
- 回答日時:
Windowsパソコンなら「コンピュータの簡単操作センター」から「固定キー機能を有効にする」ことで対応できませんか。
・・・
てか、Ctrlキーって普通はキーボードの一番左下(と一番右下)にあるので Shiftキーよりも操作しやすいはずですよ。
・・・余談・・・
自分ならゲーム用の左手キーボードに「Ctrl+マウスクリック」を割り当てて、そのボタンを押している間はクリック状態を保持する設定にします。
ゲームだけでなく各種ソフトでショートカットキーなどの設定を割り当てて便利に使っています。
No.3
- 回答日時:
ミスタイプで選択が解除されるという意味が分かりません。
>離れたセルを選択する時やグループ化の際の選択にはCtrlキー+クリックを用いますが、
>この動作を再現するようなもの
[Shift]+[F8]キーで「選択範囲に追加」ということができます。
[Esc]キーまたは[Shift]+[F8]キーで解除されます
また、セル範囲を選択しておいて名前を定義すれば、
名前ボックスからの選択でセルが選択されます
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- マウス・キーボード キーボード設定で困っています。長文です。 2 2022/12/10 12:44
- その他(パソコン・周辺機器) PCの操作中に画面がフリーズしましたマウスを動かしても反応しないし「Ctrl」キーと「Alt」キーと 2 2022/04/17 10:09
- その他(IT・Webサービス) Google日本語入力の操作方法 一度確定した後の訂正方法 1 2023/06/17 16:03
- その他(IT・Webサービス) AutoHotKeyで、キーボードにマウスの右クリックを割り当てられる? 1 2023/03/30 00:23
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Visual Basic(VBA) エクセルのマクロについて教えてください マクロを実行すると メッセージボックスが表示されて okをク 4 2023/07/05 19:32
- Word(ワード) IMEパッドがショートカットキーで開かないのですが。。。 5 2023/06/11 09:23
- Gmail GmailではメールをDelキーで削除可能でしょうか? 1 2022/08/17 10:43
- Excel(エクセル) エクセルでの行列の選択について 1 2022/06/01 17:01
- Excel(エクセル) Excel フィルタ後のコピー貼付けと可視セルの関係について 3 2023/02/07 16:42
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パワーポイントのデザインの移...
-
ワードの文章の前後にカギカッ...
-
F10が効きません・・・
-
文字列の選択範囲が勝手に広が...
-
ご質問です。エクセルの表で、...
-
Excelで指定行以降を非表示にす...
-
文字の色を変えるショートカッ...
-
エクセルのカーソルの移動速度...
-
カーソルキーで文字間を移動し...
-
ペイント用法 白紙にもどすには?
-
社内専用システムへエクセルの...
-
OpenOffice Calcで数式を表示(E...
-
wordで円を3つ書き、バランス...
-
WORDの塗りつぶし ショートカット
-
カーソルが左に移動しないんです?
-
アイコンを選択してDeleteキー...
-
キーワード選択につき、ちょっ...
-
スマホでの文字削除方法で
-
Hotmailでコピペが出来なくなり...
-
エクセルでツールバーが消えている
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字の色を変えるショートカッ...
-
パワーポイントのデザインの移...
-
ご質問です。エクセルの表で、...
-
カーソルキーで文字間を移動し...
-
スマホでの文字削除方法で
-
wordで円を3つ書き、バランス...
-
文字列の選択範囲が勝手に広が...
-
Excelで指定行以降を非表示にす...
-
ワードの文章の前後にカギカッ...
-
F10が効きません・・・
-
フォルダ内のファイルを自由に...
-
移動するとコピーしてしまう
-
カーソルが左に移動しないんです?
-
エクセルのカーソルの移動速度...
-
フォントの色をしょっちゅう変...
-
カーソルが『|』ではなく『■』...
-
エクセルでEnterキーで下のセル...
-
WORDの塗りつぶし ショートカット
-
選択が上手くできない
-
【エクセル】 スクロールバー...
おすすめ情報