Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6990 / 13644 ツリー ←次へ | 前へ→

【41927】データを更新したときに実行するマクロ tom 06/8/26(土) 10:33 質問[未読]
【41933】Re:データを更新したときに実行するマクロ ichinose 06/8/26(土) 11:30 発言[未読]
【41935】Re:データを更新したときに実行するマクロ tom 06/8/26(土) 12:53 質問[未読]
【41937】Re:データを更新したときに実行するマクロ ビリー 06/8/26(土) 13:11 回答[未読]
【41938】Re:データを更新したときに実行するマクロ tom 06/8/26(土) 13:20 お礼[未読]

【41927】データを更新したときに実行するマクロ
質問  tom  - 06/8/26(土) 10:33 -

引用なし
パスワード
   VBA超初心者です。
B列に予め数値が入力されており、
A列に数値を入力したとき、その数値が
B列より30以上小さいときに、
msgboxでコメントを表示するようにしたいのですが
どのようにしたらよいのでしょうか

(例)A1に入力 ⇒ B1-A1>=30 の時実行
   A2に入力 ⇒ B2-A1>=30 の時実行
   続く…

A列は空白の時もあります。
実行は、A列に数値が入力されたときだけです。
よろしくお願いします。

【41933】Re:データを更新したときに実行するマクロ
発言  ichinose  - 06/8/26(土) 11:30 -

引用なし
パスワード
   ▼tom さん:
おはようございます。

>VBA超初心者です。
>B列に予め数値が入力されており、
>A列に数値を入力したとき、その数値が
>B列より30以上小さいときに、
>msgboxでコメントを表示するようにしたいのですが
>どのようにしたらよいのでしょうか
>
>(例)A1に入力 ⇒ B1-A1>=30 の時実行
>   A2に入力 ⇒ B2-A1>=30 の時実行
>   続く…
>
>A列は空白の時もあります。
>実行は、A列に数値が入力されたときだけです。

当該シートのシートモジュールに

'====================================================
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim tgt As Range
  If Not Application.Intersect(Range("a:a"), Target) Is Nothing Then
    For Each tgt In Application.Intersect(Range("a:a"), Target)
      tgt.NumberFormatLocal = "G/標準"
      If IsNumeric(tgt.Text) Then
       If Val(tgt.Offset(0, 1).Value) - tgt.Value >= 30 Then
         With tgt
          MsgBox .Address & " は、" & .Offset(0, 1).Address & " より30以上小さい"
          End With
         End If
       End If
      Next
    End If
End Sub

上記のイベントプロシジャーを記述してください。

これで当該シートのA列にデータを入力して試してみてください。
A列に入力された数値と同行のB列の値とを比較しています。
試してみてください。

【41935】Re:データを更新したときに実行するマクロ
質問  tom  - 06/8/26(土) 12:53 -

引用なし
パスワード
   ▼ichinose さん:
ありがとうございます!!
そのままコピーしてためしたところできました!
質問ですが、

Worksheet_Change(ByVal Target As Range)

とは、どういう意味でしょうか?
私は、本を読みながら Worksheet_Calculate() で試していたのですが、
どういう違いがあるのでしょうか?
本には、再計算するにはcalculateで、ファイルを開いた時に実行するのがopen
しか載っていなくて、helpを見てもよく分かりませんでした。

あと、他の構文についても私の持っている本では初心者向けのため
載っておらずhelpではちょっと理解できませんでした。
もしよければどういう処理をしているのか教えていただけませんでしょうか?
たびたび申し訳ございません。

【41937】Re:データを更新したときに実行するマクロ
回答  ビリー  - 06/8/26(土) 13:11 -

引用なし
パスワード
   >Worksheet_Change(ByVal Target As Range)
>
>とは、どういう意味でしょうか?

ヘルプ引用です。ちゃんと調べれば載っていますので、努力しましょう。

-------
ワークシートのセルが、ユーザーまたは外部リンクで変更されたときに発生します。

構文

Private Sub Worksheet_Change(ByVal Target As Range)

Target  変更された範囲が渡されます。複数のセルを渡すことができます。

解説

セルが再計算時で変更されないと、このイベントは発生しません。シートの再計算をトラップするには、Calculate イベントを使用します。

セルを削除する場合、このイベントは発生しません。

【41938】Re:データを更新したときに実行するマクロ
お礼  tom  - 06/8/26(土) 13:20 -

引用なし
パスワード
   ▼ビリー さん:
すみませんでした。

「ByVal Target As Range」で検索をかけたり、
他にもいろいろ検索したのですが、
ヒットしなかったので…
調べ方が悪かったのですね。
申し訳ございません。

6990 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free