Excel VBA質問箱 IV

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

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


2310 / 13646 ツリー ←次へ | 前へ→

【68705】EventMacroで以外はの処理をお聞かせください。 Yoshi 11/4/9(土) 11:08 質問[未読]
【68706】Re:EventMacroで以外はの処理をお聞かせく... kanabun 11/4/9(土) 11:16 発言[未読]
【68712】Re:EventMacroで以外はの処理をお聞かせく... UO3 11/4/9(土) 15:10 発言[未読]
【68715】Re:EventMacroで以外はの処理をお聞かせく... kanabun 11/4/9(土) 17:51 発言[未読]
【68787】Re:EventMacroで以外はの処理をお聞かせく... Yoshi 11/4/17(日) 20:17 質問[未読]
【68788】Re:EventMacroで以外はの処理をお聞かせく... kanabun 11/4/17(日) 21:14 発言[未読]
【68789】Re:EventMacroで以外はの処理をお聞かせく... kanabun 11/4/17(日) 21:16 発言[未読]
【68800】Re:EventMacroで以外はの処理をお聞かせく... Yoshi 11/4/18(月) 20:58 お礼[未読]

【68705】EventMacroで以外はの処理をお聞かせくだ...
質問  Yoshi  - 11/4/9(土) 11:08 -

引用なし
パスワード
   このコードで
数字7以上の大きい数字は反応無しにしたいのですが、
Case Is > 7
  .Value = ""
では全てが反応しません。対応方法をお願いします。


Private Sub Worksheet_Change(ByVal Target As Range)
If Application.Intersect(Target, Range("A1:A100")) Is Nothing Then Exit Sub
With Target
Select Case .Value
Case Is = 1
  .Value = "◎"
Case Is = 2
  .Value = "○"
Case Is = 3
  .Value = "△"
Case Is = 4
  .Value = "▲"
Case Is = 5
  .Value = "*"
Case Is = 6
  .Value = "×"
' Case Is > 7
'  .Value = ""
' Case Else
'  .Value = ""
End Select
End With
End Sub

【68706】Re:EventMacroで以外はの処理をお聞かせ...
発言  kanabun  - 11/4/9(土) 11:16 -

引用なし
パスワード
   ▼Yoshi さん:
>このコードで
>数字7以上の大きい数字は反応無しにしたいのですが、
> Case Is > 7
>  .Value = ""
>では全てが反応しません。

「反応しません」の意味がよく分からないのですが、
単に
> Case Else
>  .Value = ""

または
  Case Else
   .clearcontents

ではだめなのですか?

あと、Changeイベントプロシージャのなかでセルの値を変更すると
また Changeイベントが発生してますよ。

値を変更する直前で
application.EnableEvents プロパティを False にして
変更後、True に戻す
処理を入れておくといいですよ。

【68712】Re:EventMacroで以外はの処理をお聞かせ...
発言  UO3  - 11/4/9(土) 15:10 -

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

kanabunさんからもコメントありますが、1〜6以外はクリアするなら
Case Else
 .ClearContents
でしょうし、1〜6以外は何もしないのであれば
Case Is = 6
  .Value = "×"
End Select
でしょうね。

あと、留意点としてはkanabunさんからのアドバイスのイベントの連鎖のほかに
たとえばコピペで複数のセルに値が転記されたとき等、Targetは複数のセル領域に
なります。このときに、Target.Value という参照はエラーになりますので気をつけてください。
>

【68715】Re:EventMacroで以外はの処理をお聞かせ...
発言  kanabun  - 11/4/9(土) 17:51 -

引用なし
パスワード
   > 1〜6以外は何もしないのであれば
case else も不要ですか?

Private Sub Worksheet_Change(ByVal Target As Range)
  If Intersect(Target, Range("A1:A100")) Is Nothing Then Exit Sub
  
  Application.EnableEvents = False
  With Target(1)
    Select Case .Value
     Case 1 To 6
       .Value = Mid$("◎○△▲*×", .Value, 1)
     Case Else 
       .ClearContents
    End Select
  End With
  Application.EnableEvents = True
End Sub

【68787】Re:EventMacroで以外はの処理をお聞かせ...
質問  Yoshi  - 11/4/17(日) 20:17 -

引用なし
パスワード
   ▼kanabun さん:
ありがとうございます。
最終のコードでは正しく動作します。
Case 1 To 6
  .Value = Mid$("◎○△▲*×", .Value, 1)
の理解が出来ません。
どのように理解すると良いのでしょうか?


それから元に戻りますが、
前のコードで
コメントいただいています、1〜6以外はクリアするなら
Case Else
 .ClearContents
を入れると、1を入れても2を入れてもクリアされます。
7以上は空白のまま残したいのですが、良い方法がありましたら
よろしくお願いします。

【68788】Re:EventMacroで以外はの処理をお聞かせ...
発言  kanabun  - 11/4/17(日) 21:14 -

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

>最終のコードでは正しく動作します。

前後しますが、
-------------------------------
>Case Else
> .ClearContents
>を入れると、1を入れても2を入れてもクリアされます。
>7以上は空白のまま残したいのですが、

この件は、UO3 さんからコメントのあるように、
「1〜6 以外何もしない」なら、下記の Case Else部分を全部削除すればいい
と思います。
>  With Target(1)
>    Select Case .Value
>     Case 1 To 6
>       .Value = Mid$("◎○△▲*×", .Value, 1)
     'Case Else
     '  .ClearContents
>    End Select
>  End With
のように。

そうすると、残るのは
>  With Target(1)
>    Select Case .Value
>     Case 1 To 6
>       .Value = Mid$("◎○△▲*×", .Value, 1)
>    End Select
>  End With
となりなす。

-----------------------------
>  .Value = Mid$("◎○△▲*×", .Value, 1)
>の理解が出来ません。
>どのように理解すると良いのでしょうか?

>  With Target(1)
   ↑ Target(1) というのは
     変更のあったセル範囲のうちの最初のセルのことです。

     ↓このセルの値(.Value) が 1〜6の範囲にあったら、
>    Select Case .Value
>     Case 1 To 6

        ↓そのセルの値を "◎○△▲*×"という文字列のうち
         元の値の位置の1文字だけとりだしたものに変更する
         という処理をしています。
>       .Value = Mid$("◎○△▲*×", .Value, 1)
>    End Select
>  End With

具体的には、
変更のあったセルの値が 1 なら、
>       .Value = Mid$("◎○△▲*×", .Value, 1)

       .Value = Mid$("◎○△▲*×", 1, 1)
ということですから、
"◎○△▲*×" の最初の1文字 "◎" がそのセルに代入されます。

変更のあったセルの値が 2 なら、"◎○△▲*×"の2番目の文字"○"が
元のセルに代入されます。
以下同様にして、
変更のあったセルの値が 6 なら、"◎○△▲*×"の2番目の文字"×"が
元のセルに代入されます。

ということです。

【68789】Re:EventMacroで以外はの処理をお聞かせ...
発言  kanabun  - 11/4/17(日) 21:16 -

引用なし
パスワード
   ↑最後の文、訂正です

変更のあったセルの値が 6 なら、"◎○△▲*×"の 6 番目の文字"×"が
元のセルに代入されます。

ということです。

【68800】Re:EventMacroで以外はの処理をお聞かせ...
お礼  Yoshi  - 11/4/18(月) 20:58 -

引用なし
パスワード
   ▼kanabun さん:
 UO3さん

ありがとうござました。
理解できました。
今後とも、よろしくご指導のほどお願いいたします。

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