VBA初心者ですが、よろしくお願いします。
エクセルで入力したいシートタブを右クリック、コードの表示で、
VBAに以下のスクリプトを入力しました。
ネットに紹介されていたスクリプトに自分で一部書き足したものです。
U列に値が入っていれば、その行のT列をダブルクリックするとチェックマークがつくようにし、
それをU列の最終行までループしたいのですが、エラーなどはなくチェックマークが出現しません。
どこが間違っているのでしょうか?ご教授お願いします。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
MaxRow = Range("U65536").End(xlUp).Row
For i = 1 To MaxRow Step 1
If Range("U" & i) <> Null Then
If Intersect(Target, Range("T" & i)) Is Nothing = False Then
Cancel = True
If Target.Value = ChrW(10003) Then
Target.ClearContents
Else
Target.Value = ChrW(10003)
End If
End If
End If
Next i
End Sub
まぁ,今のマクロでも先に回答した箇所以外特段間違いは無いので構わないと思いますし,あくまで余計なお世話ですが,もしご質問が間違いの直し以上にマクロ全体をもうちょっとどうにかしたいという事だったのなら,ワタシならこんなカンジにします
private sub worksheet_beforedoubleclick(byval Target as excel.range, cancel as boolean)
if application.intersect(target, range("T:T")) is nothing then exit sub
cancel = true
if range("U" & target.row) ="" then exit sub
if target <> chrw(10003) then
target = chrW(10003)
else
target.clearcontents
end if
end sub
既に回答済みですので参考です。
U列のループ処理は不要ではないでしょうか。
T列の任意のセルをダブルクリックでT列全体にマーキングする事が前提ならば、
このコードでは期待通りに動作しませんのでご検討下さい。
しかし、ダブルクリックセルのみマーキングならば、以下のサンプルは如何でしょうか。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, Range("T:T")) Is Nothing Then Exit Sub
Cancel = True
If Target.Offset(0, 1).Value <> "" Then
If Target.Value = ChrW(10003) Then
Target.ClearContents
Else
Target.Value = ChrW(10003)
End If
End If
End Sub
お礼
お早いご回答ありがとうございます。説明も簡潔で分かりやすかったです。