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

マクロ初心者の為、分かり難い質問でしたら、大変申し訳ございませんが
よろしくお願い致します。(エクセル2010)

A列に”完了”若しくは、”キャンセル”を入力した場合、当該行が保護され
AA列に”重複”が表示される(COUNTIF関数)場合に下記のマクロで
実行しようとした場合にエラー(実行時エラー’13’: 型が一致しません。)
が発生します。

---------------------------------------------------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

Dim r, rng As Range, Dependent As Range
Set rng = Intersect(Target, Columns(1))
If Not rng Is Nothing Then
If ActiveSheet.ProtectContents = True Then
ActiveSheet.Unprotect
End If
For Each r In rng
If r.Value = "完了" Or r.Value = "キャンセル" Then
r.Offset(0, 1).Resize(1, 26).Locked = True
Else
r.Offset(0, 1).Resize(1, 26).Locked = False
End If
Next r
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, AllowFiltering:=True
End If


If ActiveSheet.ProtectContents = True Then
ActiveSheet.Unprotect
End If

On Error Resume Next
Set Dependent = Intersect(Target.Dependents, Columns("AA"))
On Error GoTo 0

ActiveSheet.Protect DrawingObjects:=True, Contents:=True, AllowFiltering:=True

If Dependent Is Nothing Then Exit Sub

If ActiveSheet.ProtectContents = True Then
ActiveSheet.Unprotect

End If

If Dependent.Value = "重複" Then MsgBox "「項目1の重複」を確認して下さい!", 48

If ActiveSheet.ProtectContents = False Then
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, AllowFiltering:=True
End If

End Sub

----------------------------------------------------------------------------------------------------

「If Dependent.Value = "重複" Then」の部分が黄色になります。

また、異なる項目の重複のチェックを、AB列でも行っているのですが、異なる2列での
判定結果を、それぞれメッセージボックスで表示するには、どのようにしたらよろしいでしょうか?


以上、お手数をお掛けしますが、よろしくお願い致します。

A 回答 (1件)

> Set Dependent = Intersect(Target.Dependents, Columns("AA"))



> If Dependent.Value = "重複" Then

If文の条件はDependentが1個のセルであることを前提としていますが
Intersect( )の結果は複数のセルを返す場合もあります。

なので、プログラムの前半の様にFor Eachを使用してセルを1個ずつ確認すれば良いです。


> また、異なる項目の重複のチェックを、AB列でも行っているのですが、異なる2列での
> 判定結果を、それぞれメッセージボックスで表示するには、どのようにしたらよろしいでしょうか?

AA列に対して行ったことを、AB列に対しても行えば良いですね。
    • good
    • 0

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