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

解決済みの質問

エクセル2000:決まったセルに数値が入力されたらマクロを起動させたい

エクセル2000:決まったセルに数値が入力されたらマクロを起動させたい。

たとえばセルA1に、1以上の数値が入力されたときに、セルA2に今日の日付を入力させる
マクロの記述はどうすれば宜しいでしょうか?

以下の記述で、セルA2に日付は入力させられるのですが、
セルA1に1以上の数値が入力された場合に起動させる方法が分かりません。

Range("A2").Select
SendKeys "^(;){ENTER}"

ご教授の程、宜しくお願い申し上げます。

投稿日時 - 2010-10-26 16:56:50

QNo.6276951

困ってます

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

セルA1に1以上の数値が入力されたら、A2に現在日付をセットする、で良いのかな。
Sheet1のシートモジュールに
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
If Target.Value > 1 Then
Range("A2").Value = Date
End If
End If
End Sub

>起動させる方法が分かりません
SendKeys "^(;){ENTER}"
に拘らずにA2に日付が入れば良いのでしょう。
Sendkeyなど最後の手段で、こんなコードなどはまねしないほうが良いと思う。

投稿日時 - 2010-10-27 00:14:40

お礼

ありがとうございます。

丸写しさせて頂きました。バッチリです。

会社のパソコンは、OSはXPまで何とか上がってますが、
Officeは2000のまま。

なるほど、Sendkeysはバグるんですね。
今後、使わないようにします。
Dateが簡単ですね。

投稿日時 - 2010-10-27 09:33:56

ANo.6

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

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

回答(6)

ANo.5

>起動じゃなくて実行ですね。


そうですね  質問者の表現に合わせました。

Sendkeysは つい最近エラーで悩みました

作成したマシンは WinXP+Excel2002 これで問題ありませんでしたが
ノートはWin Vista+Excel2002 これでエラーが出ました
複数の環境で運用するので困りました。
MSのサイトにこのケースが報告されていてVista+Excel2002での不具合うんうん
とありました 2003以降では解消されているみたいですが・・。

結局コードを修正しました。 SendKeysは使わないことにしました


OSの違いによるトラブルは結構経験しています
OS側へ依存するコードがあるとかなりの確率でひっかかってきました

Win98、2000のころユーザーフォーム上にスクリーンキーボードを作成したりもしましたが
Xpになってから 正常に動作しません

過去の作品がことごとく使えなくなっていくのは本当に困りものです

投稿日時 - 2010-10-26 19:31:50

お礼

ありがとうございました。
Sendkeysの使用は控えたいと思います。

投稿日時 - 2010-10-27 11:51:09

ANo.4

> それを判断する時点で既にマクロは起動しているからです
確かに^^;
起動じゃなくて実行ですね。でもまぁ、厳密に言い出すと
マクロの意味の定義によっては「起動している」という表現も
微妙になりそうな気もするけどね。

Worksheet_Change イベント等については既に十分情報が揃ってる
ようなので、
> 以下の記述で、セルA2に日付は入力させられるのですが、
日付を入れるだけで SendKeys は使わない方がいいです。
SendKeys はその仕様上、誤動作を引き起こす可能性を持って
いますから、使わないで済むなら使わないようにする事を
お勧めします。
  Dim ws As Excel.Worksheet
  Set ws = ThisWorkbook.Worksheets("Sheet1")
  ws.Range("$A$2").Value = Date
ただし「地域と言語のオプション」の影響を受けます。
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/function/vba_date.html#date

投稿日時 - 2010-10-26 18:50:01

お礼

ありがとうございます。
Sendkeysの使用は控えたいと思います。

投稿日時 - 2010-10-27 11:52:19

ANo.3

決まったセルに数値が入力されたらマクロを起動させたいとの事ですが

回答1番の方の、ワークシートモジュールのChangeイベントで似たような事が出来ます。

Changeイベントはシートのいずれかのセルが変更されたら動作しますので、これを応用します。

Private Sub Worksheet_Change(ByVal Target As Range)

;Target.Addressに変更されたセルのアドレスが格納されます、この場合はA1のセルが変更された時に処理を行う様にしてます。どのセルが変更されてもこのイベントが発生しますがA1以外は何も処理をしていないので、見かけ上はA1に変更が有ったときにマクロが動作している様に見えます。

If Target.Address = "$A$1" Then
If Target > 1 Then
Range("A2").Select
SendKeys "^(;){ENTER}"
End If
End If

End Sub

投稿日時 - 2010-10-26 18:42:35

お礼

ありがとうございます。

Sendkeysは将来的にバグりそうなので、回答1さんを使わせて頂きました。

投稿日時 - 2010-10-27 09:37:30

ANo.2

OSを書きましょう

SendKeysはOSの制約を受けます!

ちなみに 

決まったセルに数値が入力されたらマクロを起動させたい というのは不可能です

それを判断する時点で既にマクロは起動しているからです

投稿日時 - 2010-10-26 17:57:31

お礼

失礼しました。
OSはWinXPです。
以後、気を付けます。

皆さんの回答よりChangeイベントで解決出来ることが分かりました。

投稿日時 - 2010-10-27 11:50:15

ANo.1

ワークシートモジュールのChangeイベントを利用しましょう。
詳しくはこちら↓を参考にしてください。
http://www9.plala.or.jp/siouxsie/date06.html

投稿日時 - 2010-10-26 17:48:14

お礼

ありがとうございます。
回答1さんを参考にさせて頂きました。

教えて頂いたサイトは分かりやすいので、じっくり勉強したいと思います。

投稿日時 - 2010-10-27 09:39:11

あなたにオススメの質問