こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Sendkeyが上手く動作しない。

いつもお世話になっております。また助けて頂きたく質問しました。

数式を値で貼り付けし、再計算させるのに
起点のセルを選択し、F2キーで入力モードにしてからTab(またはEnter)で抜けて数式を計算させる。という方法を取っています。

これをマクロでやろうと以下のマクロを組みました。

Sub 更新()
Dim i As Integer, j As Integer
Sheets("データ").Select
Range("C6").Activate
  For i = 1 To 8
     For j = 1 To 42
       SendKeys "{F2}"
       SendKeys "{TAB}"
     Next j
     SendKeys "{ENTER}"
Next i
~~~
中略
~~~
End Sub

データシートのセルC6を起点に
右に42回更新を掛けた後、エンターで次の行に行き、また42回を8回繰り返す。
というマクロのはずなんです...。

ですが実際に動かしてみると
「中略」のマクロが先に実行された後にForの中のマクロが実行されたり、
ステップインでもないのに、VBAのウィンドウがアクティブになってそこでTabとF2が繰り返されたりします。

データシートをアクティベートにしたり、セレクトにしたり、
セルをアクティベートしたり、指定しているはずなんですが、なんとも上手くいきません・・・。

どこが間違っているのでしょうか?
また別に、値で貼り付けた数式の再計算にいい方法があれば教えてほしいです。

よろしくお願いします。

投稿日時 - 2018-10-31 15:23:09

QNo.9553150

困ってます

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

With Range("C6:AR13")
  .Value = .Value
End With
では

投稿日時 - 2018-10-31 16:50:12

お礼

・・・こ、これは。

これはなんですか、太古の昔に失われた超文明が遺したオーパーツか何かですか?こんな素敵なマクロがあったなんて驚きです。
マクロを使わない場合は1列ずつ「区切り位置」を起動して即完了で数式の再計算をしていたのですが、マクロでも似たような、いえ範囲指定して一括でできるなんて....

ありがとうございました。助かりました。これで仕事が捗ります!

投稿日時 - 2018-11-01 10:29:14

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

SendKeysは非同期に動作してしまいます。

提示のコードは必要な回数分SendKeysが繰り返されたのち
後続の処理が行われているようにコーディングされてはありますが、

実際には、
OSに対してSendKeysが必要回数送り終われば
実際にキー操作が行われたかどうかを問わず
後続のコードの実行に制御が移ってしまいます。

そのため、
あたかも後続のコードが先に実行されているように見えてしまいます。

>VBAのウィンドウがアクティブになってそこで
VBE側にsendkeysが送られている可能性もあります。
それはおそらく、
VBEの画面を閉じ、
スプレッドシート側の開発タブ、マクロから実行するとか
シート上にボタンを配置して実行することで改善されるだろうと思います。

https://blog.goo.ne.jp/40vq77a80/e/d3be7689d47c674e2e39c7cd4c5ec2f2
この辺りがわかりやすいと思います。

>値で貼り付けた数式の再計算にいい方法
Application.Calculate
このコードで再計算を指示できます。

投稿日時 - 2018-10-31 23:58:31

お礼

はっはーん...なるほど...Sendkeysはそういう動きをするやつなんですね...
回答ありがとうございました。
とても分かりやすい解説、本当に助かりました。
参考URLも読ませていただきます。

投稿日時 - 2018-11-01 09:11:08

あなたにオススメの質問