『F2⇒エンターのみをするマクロ』(お願いマン)
ネットで見つけたのですが
これをB列〜AC列まで
開始行を5行目から
最終行はF列の最終行までという風にできないでしょうか?
完全に神頼みの状態です…
Sub F2キー()
Dim C As Integer '列 A列だと a or 1 、C列だと c or 3
Dim FR As Integer '開始行
Dim LR As Integer '最終行
C = InputBox("列は?", "確認", "")
FR = InputBox("開始行目は?", "確認", "")
LR = InputBox("終了行目は?", "確認", "")
Dim R As Variant
ActiveSheet.Select
Cells(1, 1).Activate
For R = FR To LR
Cells(FR, C).Select
SendKeys "{F2}", True
SendKeys "{ENTER}", True
Next R
End Sub
< 使用 Excel:Microsoft365、使用 OS:Windows11 >
試してないけどこういうことかな?
https://www.relief.jp/docs/003676.html
(MK) 2023/09/29(金) 17:54:26
参考。
https://swnokoneta.com/excel-f2key-enterkey-send/
(MK) 2023/09/29(金) 18:15:35
こんなのありました。参考まで。
https://oshiete.goo.ne.jp/qa/9611678.html
(MK) 2023/09/29(金) 18:21:24
[[20220831162118]]
(MK) 2023/10/01(日) 01:16:16
そもそも、どういう事象に対応するため、F2 + Enterを実行したいのか、 改めて説明されたほうがよいと思います。 そのSendKeysメソッドを使った方法は不安定ですから、 できれば別の方法が望ましいと思います。
コードで、 Cells(R, C).Select ではなく、 Cells(FR, C).Select としているのも謎。 SendKeysの非同期性が結果オーライをもたらしている感じですね。
# 元記事では、コメント記号も妙な記号(コンパイルエラーになる)だし、インデントしていないのも気になる。 (xyz) 2023/10/01(日) 13:10:27
さきほど投稿しましたが内容に一部誤りがありましたので、出直します。 (xyz) 2023/10/07(土) 09:59:21
繰り返しになりますが、質問への回答としては、 「Sendkeysを回避する方法を推奨する」というものです。 理由は、SendKeys命令の発出と実際の動作に遅延があり、動作が不安定になるためです。 手段を決め打ちするのではなく、本来されたいことを書かれるのが、 こうした質問掲示板でのうまい利用の仕方と言えます。
SendKeysを使用する場合の研究材料とみて、少し検討してみました。 以下の点が私の気づきです。閲覧者の参考になれば幸いです。
■参考となると思われるTips (1) Application.SendKeysには、NumLockキーが外れてしまったり、 その他のキーにも影響を及ぼすことがあるというバグがあるようです。 "WScript.Shell"のSendKeyで代替するのが適当です。 (2) 各列ごとの処理を Application.OnTimeを使って予約して遅延実行する方法があります。 これでSendKeysの不安定さを緩和することができます。(完全ではないようです) (3) ただし、実行時間を Application.OnTime Now + TimeValue("0:0:1")方式でやると 秒未満の指定ができません。そこで Timerを使うことで細かい処理時刻指定ができます。 (4) Application.OnTimeの予約のタスクに引数を渡す方法にも注意が必要。 Rangeのようなオブジェクトを渡すことはできないようで、 数値、文字列に限定されます。
■留意事項 ★なお、下記のコードは実験版なので、汎用性はありません。注意ください。 ・一回の処理時間を0.6と想定 ・対象範囲も特定のものに決め打ち ・最初の予約時刻(現在の2秒後)も、上記を受けて決め打ちしています。
■参考コード Public Sub wshSendKeys(Keys As String, Optional wait As Boolean = False) Static wshShell As Object If wshShell Is Nothing Then Set wshShell = CreateObject("WScript.Shell") Call wshShell.SendKeys(Keys, wait) End Sub
Sub F2キー() Dim myRange As Range Dim kaisu As Long Dim t As Double Dim startTime As Double Dim args As String Dim col As Range Dim r As Range
Set myRange = [B2:AC5] '' for debug only 'Set myRange = Application.InputBox("対象範囲を選択", Type:=8)
kaisu = myRange.Rows.Count '1列の行数 startTime = Timer + 2 '■予約処理だけで2秒かかるものとし, '最初の処理実行は現在より2秒後と設定 '各列ごとの処理を予約 For Each col In myRange.Columns t = Date + startTime / 24 / 60 / 60 '想定スタート時刻(日付単位) Set r = col.Cells(1) '列のスタートセル args = "'do_task " & r.Row & "," & r.Column & "," & kaisu & "'" 'do_taskと、それに渡す引数 Application.OnTime t, args '処理予約 startTime = startTime + 0.6 '■一回の処理で0.6秒かかると想定 Next Application.ScreenUpdating = True End Sub
Sub do_task(r As Long, C As Long, kaisu As Long) Dim wait As Boolean Dim k As Long wait = True Cells(r, C).Select For k = 1 To kaisu wshSendKeys "{F2}", wait wshSendKeys "~", wait Next End Sub
(xyz) 2023/10/07(土) 10:16:04
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.