Excel VBA質問箱 IV

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

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


12008 / 76734 ←次へ | 前へ→

【70254】Re:ドロップダウンリスト
発言  ichinose  - 11/10/24(月) 7:28 -

引用なし
パスワード
   おはようございます。


>>>>>>'==================================================
>>>>>>Option Explicit
>>>>>>Sub test()
>>>>>>  With Sheets("Sheet2")
>>>>>>    .Range("a1:b5").Value = [{"a","f";"b","g";"c","h";"d","i";"e","j"}]
>>>>>>    .Range("c1:c2").Value = [{"甲";"乙"}]
>>>>>>    With Range("a1").Validation
>>>>>>      .Delete
>>>>>>      .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
>>>>>>                xlBetween, Formula1:="=indirect(""sheet2!c1:c2"")"
>>>>>>    End With
>>>>>>    With Range("B1").Validation
>>>>>>     .Delete
>>>>>>     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
>>>>>>               xlBetween, Formula1:= _
>>>>>>        "=if(a1=""甲"",indirect(""sheet2!a1:a5""),indirect(""sheet2!b1:b5""))"
>>>>>>    End With
>>>>>>  End With
>>>>>>End Sub

>気にはなっていましたが、
> With Range("a1").Validation
> With Range("B1").Validation
>では コード上、sheet1 を指定してませんが

私のミスです。

>これで 何故 sheet1の
>セルA1およびセルB1の入力規制の削除、設定が
>できるのでしょうか。

標準モジュールに上記コードがある場合、
シート名を省略すると、アクティブシートのセルだと認識します。
(Range("A1")と記述すると、Application.Range("A1")と同値)
Sheet1をアクティブにして、実行されれば正常に作動しますが、
他のシートをアクティブにすれば、別のシートに入力規則を設定してしまいます。

シートモジュールにコードがある場合は、
シート名を省略すると、コードを記述しているシートのセルだと認識します。
よって、シートの記述を省略しても、正常に作動しますが、
良い記述では、ないですね。


このように訂正してください。

Sub test()
  With Worksheets("Sheet2")
    .Range("a1:b5").Value = [{"a","f";"b","g";"c","h";"d","i";"e","j"}]
    .Range("c1:c2").Value = [{"甲";"乙"}]
  End With
  With Worksheets("sheet1")
    With .Range("a1").Validation
     .Delete
     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
               xlBetween, Formula1:="=indirect(""sheet2!c1:c2"")"
    End With
    With .Range("B1").Validation
     .Delete
     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
               xlBetween, Formula1:= _
        "=if(a1=""甲"",indirect(""sheet2!a1:a5""),indirect(""sheet2!b1:b5""))"
    End With
  End With
End Sub


上記の
>  With Worksheets("sheet1")

>  With Worksheets("sheet3")
にすれば、Sheet3に入力規則を設定します。


よく調べていただいているのですね!!
ミスを指摘して頂いて、感謝いたします。
3 hits

【70238】ドロップダウンリスト 悩める老人 11/10/22(土) 22:56 質問
【70239】Re:ドロップダウンリスト ichinose 11/10/22(土) 23:21 発言
【70241】Re:ドロップダウンリスト 悩める老人 11/10/23(日) 6:13 質問
【70243】Re:ドロップダウンリスト ichinose 11/10/23(日) 10:14 発言
【70248】Re:ドロップダウンリスト 悩める老人 11/10/23(日) 19:48 質問
【70249】Re:ドロップダウンリスト 悩める老人 11/10/23(日) 19:57 質問
【70251】Re:ドロップダウンリスト ichinose 11/10/23(日) 23:45 発言
【70252】Re:ドロップダウンリスト 悩める老人 11/10/24(月) 4:50 発言
【70253】Re:ドロップダウンリスト 悩める老人 11/10/24(月) 5:20 質問
【70254】Re:ドロップダウンリスト ichinose 11/10/24(月) 7:28 発言
【70266】Re:ドロップダウンリスト 悩める老人 11/10/24(月) 23:59 質問
【70267】Re:ドロップダウンリスト ichinose 11/10/25(火) 6:38 発言
【70269】Re:ドロップダウンリスト 悩める老人 11/10/26(水) 12:45 お礼

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