アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になっております
よろしくお願いします

ネットで見つけたマクロなのですが、どなたか解説していただけないでしょうか

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim R As Range

For Each R In Target
With R

条件判断と処理

End With
Next R

End Sub

A 回答 (2件)

Worksheet_Change:シートに変更があったら



For Each R In Target:選択されているセル範囲を順番に

With R:順番に回っている現在のセルに対して

条件判断と処理を実行

End With:Withの終了

Next R:次のセルへ、全て回り終えたら終了

End Sub:終了
    • good
    • 1
この回答へのお礼

親切にまた丁寧に教えていただきましてありがとうございます
お陰様で、よく理解できました
ありがとうございました

お礼日時:2015/01/15 22:20

こんにちは。



#1様の回答で十分なのですが、「For Each R In Target」は、一種の予防策で、
前回、私が書いた、
If Target.Count >1 Then Exit Sub 'セルをを2個以上選択した時はマクロは不可
の代わりというか、逆の発想をするものです。

普通は、単一のセルを対象にして、イベント・ドリブン型にするのが一般的です。複数のセルを処理するとエラーになることがあります。しかし、このマクロは、複数セルを処理するというものです。主に、複数のセルを貼り付けた時や複数のセルを消去した時に、処理するようにできています。

この回答への補足

WindFallerさん、こんばんは
先日もお世話になりました

だめです、私の脳味噌では理解不可能です

確かに、今のマクロでは、想定外のことをやるとエラーになって
そこで、安易に、On Error Resume Next を変数宣言のすぐ後に書いています

もう一度、On Error Resume Next を外してチェックしてみます

Private Sub Worksheet_Change(ByVal Target As Range)内で
セル範囲(1列50行)が1つ指定してあって、その範囲内なら
For Each R In Target
With R

で処理しているのですが
あと2つセル範囲を指定して処理したいことがあるのですが
For Each R In Target
With R
が分からなかったので質問しました

このマクロは安易に行数を増やすと処理が遅くなりそうです

Target.CountもDebug.Printでチェックしてみます
ありがとうございました

補足日時:2015/01/15 23:19
    • good
    • 0
この回答へのお礼

わかりました
'On Error Resume Next として

Target.CountをDebug.Printで見てみると
必ずしも1以上でエラーになるのではなくて

複数のセルをコピーした時
一つのセルを複数コピーした時
に「型が一致しません」のエラーになります

複数のセルをマウスで選んでDeleteした時はエラーになりません

お礼日時:2015/01/16 01:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A