Excel VBA質問箱 IV

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

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


2405 / 13645 ツリー ←次へ | 前へ→

【68226】EventMacroで、反応が指定外になる理由は 江々 11/2/16(水) 7:35 質問[未読]
【68227】Re:EventMacroで、反応が指定外... Jaka 11/2/16(水) 9:45 発言[未読]
【68231】Re:EventMacroで、反応が指定外... 江々 11/2/16(水) 20:01 質問[未読]
【68228】Re:EventMacroで、反応が指定外... UO3 11/2/16(水) 9:51 回答[未読]
【68229】Re:EventMacroで、反応が指定外... UO3 11/2/16(水) 10:02 発言[未読]
【68230】Re:EventMacroで、反応が指定外... Jaka 11/2/16(水) 10:21 発言[未読]

【68226】EventMacroで、反応が指定外に...
質問  江々  - 11/2/16(水) 7:35 -

引用なし
パスワード
   以下のマクロを組んで、A2が数字であれば、A1:A3のセルに
色をつけるとしましたが
なぜかA2:A4に反応する理由が分かりません。理由を教えてください。
また数字に反応をIsnumetricにする方法が分かりません。教えていただければ幸いです。

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim i As Integer
If Application.Intersect(Target, Range("A2")) Is Nothing Then Exit Sub
If Range("A2") = "" Then Exit Sub
With Target
On Error Resume Next
Select Case .Value
Case i = 1 To 1000
.Range("A1:A3").Interior.ColorIndex = 43
Case Else
.Range("A1:A3").Interior.ColorIndex = xlNone
End Select
On Error GoTo 0
End With
End Sub

【68227】Re:EventMacroで、反応が指定...
発言  Jaka  - 11/2/16(水) 9:45 -

引用なし
パスワード
   ターゲットは、○○を含んでいるか。
もしくは、
ターゲットの中に○○が含まれているか。
みたいな。

実験君
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Rg As Range
Set Rg = Application.Intersect(Target, Range("e10"))
If Rg Is Nothing Then

Else
  MsgBox Rg.Address
End If
End Sub

ヘルプには共有セルと書いてあるけどね。

使用例
次の使用例は、シート 1 にある 2 つの名前付きセル範囲 rg1 と rg2 の共有セル範囲を選択します。共有セル範囲がない場合は、メッセージを表示します。

Worksheets("Sheet1").Activate
Set isect = Application.Intersect(Range("rg1"), Range("rg2"))
If isect Is Nothing Then
  MsgBox "共通部分がありません。"
Else
  isect.Select
End If

【68228】Re:EventMacroで、反応が指定...
回答  UO3  - 11/2/16(水) 9:51 -

引用なし
パスワード
   ▼江々 さん:


おはようございます。

まず、コードにインデントを付けましょう。
そうしますと、見やすくなって、お困りの原因が何か、判断しやすくなります。

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  Dim i As Integer
  If Application.Intersect(Target, Range("A2")) Is Nothing Then Exit Sub
  If Range("A2") = "" Then Exit Sub
  With Target
    On Error Resume Next
    Select Case .Value
      Case i = 1 To 1000
        .Range("A1:A3").Interior.ColorIndex = 43
      Case Else
        .Range("A1:A3").Interior.ColorIndex = xlNone
    End Select
    On Error GoTo 0
  End With
End Sub

上記をよく見ますと With Target がありますね。
で、実際にはTargetがA2の場合にのみ、この処理をするわけですが、
たとえば .Range("A1:A3").Interior.ColorIndex = 43
.Range("A1:A3") は何に修飾されているかというと Targetです。
従って、これは Target.Range("A1:A3") つまり Range("A2").Range("A1:A3")
ということになります。

A2を起点にしたA1は、実際のA2。A2を起点にしたA3は実際のA4。
おわかりでしょうか。

シートモジュールのイベントルーティンですから、常に処理時は、このシートが
アクティベーと担っています。従ってここは
(アップされているコードが正常に動いているとして)

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  Dim i As Integer
  If Application.Intersect(Target, Range("A2")) Is Nothing Then Exit Sub
  If Range("A2") = "" Then Exit Sub
  Select Case Target.Value
    Case i = 1 To 1000
      Range("A1:A3").Interior.ColorIndex = 43
    Case Else
      Range("A1:A3").Interior.ColorIndex = xlNone
  End Select
End Sub

【68229】Re:EventMacroで、反応が指定...
発言  UO3  - 11/2/16(水) 10:02 -

引用なし
パスワード
   ▼江々 さん:

上で(アップされているコードが正常に動いているとして)
なんて意味深(?)なコメントしますたが、そこも書いておきますね。

実は正常には動いていないはずです。
Case文が間違っています。Select判定にはなんの関係もない i なる変数が
登場してますね。

正しくは

Case 1 To 1000

モジュールの先頭に Option Explicit を記述し、変数宣言を必須にしておかれるべきです。
そうしておくとコンパイル段階で、この間違いに気がついたはずです。

VBE画面のツール->オプションで 変数の宣言を必須にする にティックをつけて
おくと、自動的に記述されますので。

【68230】Re:EventMacroで、反応が指定...
発言  Jaka  - 11/2/16(水) 10:21 -

引用なし
パスワード
   ああ、そうかほとんど見ていなかった。

>With Target
>.Range("A1:A3").Interior

これじゃーTarget範囲のA1:A3にあたる部分。

【68231】Re:EventMacroで、反応が指定...
質問  江々  - 11/2/16(水) 20:01 -

引用なし
パスワード
   ▼Jaka さん:
お世話になります。
ありがとうございます。
解説に対して、ちょっと質問させていただきます、よろしくお願いします。

>ターゲットは、○○を含んでいるか。
>もしくは、
>ターゲットの中に○○が含まれているか。
>みたいな。
>
>実験君
>Private Sub Worksheet_SelectionChange(ByVal Target As Range)
>Dim Rg As Range
>Set Rg = Application.Intersect(Target, Range("e10"))
>If Rg Is Nothing Then
>
>Else
>  MsgBox Rg.Address
>End If
>End Sub

これはどのように理解すると良いのでしょう?
E10に何も無ければ・・・
あれば・・・MsgBoxにRg?Sddressが表示されると
理解すると良いのでしょうか?

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