• ベストアンサー

エクセル・マクロでIf Thenの使い方

このような質問は、ルール(エチケット、マナー)違反になるでしょうか? もしそうならお許し下さい。 名前ボックスに表示される名前を、マクロで非表示にし、元に戻す、という操作を次の二つのボタンで実行するように作りました。エクセル2003です。 Private Sub CommandButton1_Click() Dim tname As Name For Each tname In ThisWorkbook.Names tname.Visible = False Next End Sub Private Sub CommandButton2_Click() Dim tname As Name For Each tname In ThisWorkbook.Names tname.Visible = True Next End Sub これを一つのボタンで、If Then Elseを使い実行できるようにしたいのですが If ・・・ Then の間の書き方が分からずうまくいきません。   If Names.Visible = False Then   If ThisWorkbook.Names.Visible = False Then If ThisWorkbook.tname.Visible = False Then Private Sub CommandButton3_Click() Dim tname As Name If Names.Visible = False Then 'これでは駄目 For Each tname In ThisWorkbook.Names tname.Visible = False Next Else For Each tname In ThisWorkbook.Names tname.Visible = True Next End If End Sub 苦し紛れにこんなことをやってごまかそうとしているのですがこれって邪道ですしかっこうわるいですよね。 Private Sub CommandButton3_Click() Dim tname As Name If Range("g1").Value = " " Then   For Each tname In ThisWorkbook.Names   tname.Visible = False   Next Range("g1").Value = "1" Else   For Each tname In ThisWorkbook.Names   tname.Visible = True   Next Range("g1").Value = " " End If End Sub ど素人ですがよろしくご教導ください。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 Names は、コレクション名ですから、Visible プロパティは存在しないはずです。 こうすれば、トグルになります。 Private Sub CommandButton1_Click() Dim tName As Name For Each tName In ThisWorkbook.Names  tName.Visible = Not tName.Visible Next End Sub Private Sub CommandButton3_Click() >Dim tname As Name >If Range("g1").Value = " " Then     ↓ Private Sub CommandButton3_Click() Dim tName As Name Dim flg As Boolean For Each tName In ThisWorkbook.Names  tName.Visible = Not tName.Visible  flg = Not tName.Visible '最後のフラグで決定 Next CommandButton3.Caption = IIf(flg, "非表示", "表示") End Sub

ksrnt
質問者

お礼

内容を理解するのに時間がかかりお礼がおくれました。 いつもながら適切なご教示感謝します。 ますますのめり込みそうです。

その他の回答 (1)

  • kuma3f
  • ベストアンサー率63% (28/44)
回答No.1

思われていることと違っていましたらすみませんが、名前ボックスの表示・非表示は、 数式バーの表示・非表示のことではないのでしょうか。 数式バーを非表示にしたら名前ボックスも無くなり、表示にしたら現われます。 Private Sub CommandButton3_Click() If Application.DisplayFormulaBar = False Then Application.DisplayFormulaBar = True Else Application.DisplayFormulaBar = False End If End Sub

ksrnt
質問者

お礼

やりたいことはバーそのものを非表示にするものではありませんでしたがこ れはこれで大変勉強になりました。今後ともよろしくお願いします。

関連するQ&A