質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

3回答

2404閲覧

VBAにおいて、表示、非表示を切り替えるボタンの作成

soft.soft

総合スコア7

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

1クリップ

投稿2018/04/08 06:32

初めまして。
現在VBAを勉強し始めましたが、できない操作があります。
お力を貸していただけたら助かります。

現在試行錯誤している動作は、
エクセルシート上に設置した「表示/非表示」ボタンを押すたびに、このシートに存在する注釈の表示/非表示を切り替えられるようなマクロを作成することです。

わからないことは、
1.注釈の名前がわからないため、どのように選択し、動作を付け加えていったらよいのか
2.「表示/非表示」ボタンは押下するたびにラベルが切り替わる方法
(二つボタンを作成し、選択したら片方が消え、片方が現れる、という方法ではうまくいきませんでした)
3.ifとhiddeプロパティを使うというイメージであっているのか
ということです。

この場合はどうしたら良いのでしょうか。
どうぞ、よろしくお願いします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

Application.DisplayCommentIndicator はExcel自体の設定が変わってしまいます。

つまり、他のブック、他のシートのコメントまで非表示になってしまい、
場合によってはトラブルになる可能性が考えられるので注意が必要です。

なので、シート上のコメントに対して、表示/非表示を変えるのが適当かと。
※解説はしませんので悪しからず。

VBA

1 Dim Sheet As Worksheet 2 Set Sheet = ActiveSheet 3 4 Dim Com As Comment 5 For Each Com In Sheet.Comments 6 If Com.Visible = False Then 7 Dim Visible As Boolean 8 Visible = True 9 End If 10 Exit For 11 Next 12 13 For Each Com In Sheet.Comments 14 Com.Visible = Visible 15 Next

投稿2018/04/09 03:36

ExcelVBAer

総合スコア1175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

私も注釈=コメントのことと思いましたので、これでアドバイスさせていただきます。


Excelにはコメントを一括で表示/非表示する機能があります。
シート上の操作では「校閲」タブの「全てのコメントの表示」ボタンで切り替えられます。

これをググったりマクロの記録をすればわかりますが、VBAのコードでは
Application.DisplayCommentIndicator
というプロパティで制御できます。

コメント一括ON
Application.DisplayCommentIndicator = xlCommentIndicatorOnly
コメント一括OFF
Application.DisplayCommentIndicator = xlCommentAndIndicator

今回はボタンを押すたびにこれを切り替えたいのだと思います。

こういったスイッチングは、IF文を使えば簡単にできます。
・もしAが①なら、Aに②を代入する。
・それ以外なら(Aが①でなければ)、Aに①を代入する。

今回の場合でいうと、
・コメント一括ONの状態なら、コメント一括OFFにする。
・それ以外の場合は、コメント一括ONにする。
となります。

あとはこれをVBA上でコードにするだけです。
がんばってみてください。


コメントひとつひとつに対して表示/非表示する場合には、segavvyさんのアドバイスのようにRangeオブジェクトのComment.Visibleプロパティで制御できます。

ちなみにRangeオブジェクトはセル範囲を指定することができるオブジェクトですが、このプロパティは複数セルをまとめて操作できません。
単一セルを指定したRangeオブジェクトでないとエラーが発生しますのでご注意ください。
※segavvyさんのサンプルコードではループ処理で単一セルを繰り返し取得しているので問題ありません。

VisibleプロパティのようなBoolean型(True/False)の値はスイッチングが簡単です。
もしAがTrueならFalse、FalseならTrueにするという式は、IF文を使わなくても
A = Not A
という代入式で実現できるからです。

参考になれば幸いです。

投稿2018/04/09 01:52

jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

注釈=コメントでよろしいでしょうか。以下、その想定で回答します。
Excel 2013で確認しました。

1.注釈の名前がわからないため、どのように選択し、動作を付け加えていったらよいのか

Excelの検索機能で、コメントが付いているセルだけを一気に選択できます。
「ホーム」タブの「検索と選択」で「条件を選択してジャンプ…」を選び、「コメント」を選んで「OK」すると、コメントのあるセルだけが選択されるはずです。
この操作を記録すれば、VBAのコードが確認できます。

2.「表示/非表示」ボタンは押下するたびにラベルが切り替わる方法

ラベルの変え方も、操作を記録すれば確認できます。
目的のボタンを右クリックして「テキストの編集」を選び、編集できます。この操作を記録してみてください。
(少し余計なコードが生成されますが、ラベルを変えるのは記録された最初の1行で済みます)

3.ifとhiddeプロパティを使うというイメージであっているのか

これも記録して確認できます。
コメントの表示されているセルを選んで右クリックで「コメントを表示しない」を選ぶと隠せます。この操作を記録してみてください。

以下、コメントを非表示にするだけの一方通行ですが、VBAのサンプルです。
(ラベルは「コメントを表示」に切り替わりますが、常に非表示にしかなりません^^;)

VBA

1Sub Macro1() 2' 3' Macro1 Macro 4' 5 ' コメントが付いているセルを全選択 6 Selection.SpecialCells(xlCellTypeComments).Select 7 8 ' 総当たりでコメントを見えなくする 9 For Each CommentCell In Selection 10 CommentCell.Comment.Visible = False ' 表示する場合はTrue 11 Next 12 13 ' ボタンのラベルを変更 14 ' "Button 3"の部分は実行環境依存なので、記録して確認してください 15 ActiveSheet.Shapes.Range(Array("Button 3")).Select 16 Selection.Characters.Text = "コメントを表示" 17 18End Sub 19

投稿2018/04/08 08:49

segavvy

総合スコア958

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問