• ベストアンサー

Withの使い方

 VBAに関する質問です。Excel2000を使っています。 Sub test() With Rows("1:2") .Hidden = Not .Hidden End With End Sub これで「1~2行目の表示・非表示」が行えるのですが、 Sub test() Rows("1:2").Hidden = Not .Hidden End Sub にするとエラーになります。    本来、Hidden=Trueで非表示、Hidden=Falseで表示するものなのですが、Withを使えばそれが省略されているということなのでしょうか?  表示・非表示の切り替えを考えていたのですがWithを使うのが一番シンプル行えます。  これまでWithは「オブジェクトの省略」のために使うものだと思っていたのですが、そう単純なものではないようです。これは、まれなケースなのでしょうか?  他の活用法、皆様のWithの使い方等あれば回答お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.3

Withはオブジェクト名の記述を省略するためだけのものでそれ以上のものでもそれ以下のものでもありません。 TextBox.Value="hoge" TextBox.Name="テキスト" と With TextBox  .Value="hoge" .Name="テキスト" End With が同じ(記述が省略できる)というだけの意味しかありません。 で [オブジェクト名].Hidden というプロパティにはTrue/Falseしか入りません。 よって Not [オブジェクト名].Hidden というのは Not True あるいはNot False ということですので [オブジェクト名].HiddenがTrueだったらFalse、FalseだったらTrueの値ということになります。 つまり if Rows("1:2").Hidden = True Then Rows("1:2").Hidden = False else Rows("1:2").Hidden = True End if というような構文を一行にまとめる工夫ではありますが、Withは全く関係がありません。

s1979
質問者

お礼

 とても参考になりました。もっと勉強してから質問するように気をつけたいです。ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

Sub test() [オブジェクト名].Hidden = Not [オブジェクト名].Hidden End Sub Sub test() With [オブジェクト名] .Hidden = Not .Hidden End With End Sub が、正しい使い方になります。 Withで囲まれる事で、省略が有効になります。 > 表示・非表示の切り替えを考えていたのですが シート上のボタン操作などでユーザーが切り替える程度なら問題ありませんが、マクロ実行中に行う場合だと、単純なトグル動作では無理(思わぬトラブル)が出る場合もあります。 きちんと表示を切り替えるには、状態の取得が不可欠です。

s1979
質問者

お礼

どうも勘違いしていたみたいで、恥ずかしい限りです。分かりやすい説明ありがとうございます。

すると、全ての回答が全文表示されます。
  • iiikkk
  • ベストアンサー率37% (92/247)
回答No.1

単純に Sub test() Rows("1:2").Hidden = Not Rows("1:2").Hidden End Sub なのでは。

s1979
質問者

お礼

 なるほど。一つ抜けてるだけでエラーになるので分かりませんでした。ありがとうございます。

すると、全ての回答が全文表示されます。

関連するQ&A