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

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

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

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

Q&A

解決済

3回答

4898閲覧

VBA/チェックボックス/行の表示・非表示

donguri7488

総合スコア15

VBA

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

0グッド

0クリップ

投稿2019/03/27 07:45

前提・実現したいこと

VBAを利用して、下記の作業をしたいです。
・チェックボックスへチェックを入れる:非表示になっている特定の行を再表示
・チェックボックスからチェックを外す:特定の行を非表示

エラーメッセージ

該当のソースコード

VBA

1Sub チェックボックス() 2 3' 4' チェックボックス Macro 5' 6 7 If CheckBox1.Value = True Then 8 Rows("27:31").Hidden = False 9 Rows("27:27").Hidden = True 10 Rows("31:31").Hidden = True 11 Range("B6:C6").Select 12 13 Else 14 Rows("28:30").Hidden = True 15 Range("B6:C6").Select 16 17 End If 18 19End Sub

試したこと

チェックボックスを「フォームコントロール」から「ActiveXコントロール」に変更したり、
一部のみで動作確認したりしました。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答3

0

自己解決

皆様
色々とコメントをいただきありがとうございます。
VBAど素人で1つ1つのコードの意味もわからず苦戦しましたが、何とか解決しました。
何がわからないのかも整理しないままの質問になってしまったこと、申し訳ございません。

<やりたかったこと>
27~31行目が非表示の状態から

27行目:タイトル1(表示不要)
28~30行目:表示したい項目
31行目:タイトル2(表示不要)

という状態にしたかったです。
================

しかし、マクロの記録をベースにしていたためコードに無駄がありました。
ざっくりとした理解で下記のとおりのコードを書き無事解決しました。

Private Sub CheckBox1_Change()
With Me
If .CheckBox1.Value = True Then
.Rows("28:30").Hidden = False
Else
.Rows("28:30").Hidden = True
End If
End With
End Sub

皆様の回答も少しずつ紐解き理解していきます。
より汎用性の高いものになるように引き続き試行錯誤していきますので、
取り急ぎ報告まで。
ありがとうございます。

投稿2019/03/29 02:33

donguri7488

総合スコア15

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

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

0

んと。。。

非表示になっている特定の行を再表示

既にマクロ実行時に決まっているなら、
日本語でちゃんと説明してください。

それから、
エクセルには、チェックボックスというものが、
1)シート上のフォームコントロールのチェックボックス
2)シート上のActiveXコントロールのチェックボックス
3)ユーザーフォーム上のActiveXコントロールのチェックボックス
とあるので、どのチェックボックスなのかを明示してください。
他にもセルにチェックボックスに見える文字を入力して、
それっぽく見せる方法もあるので、やりたいことと、
自分の技量と見映えのバランスでどれを使うか選ぶといいと思います。

いまの質問文を読むと、シート上のActiveXコントロールのチェックボックスを使うのがよさそうな気がします。

ActiveXコントロールのチェックボックスを配置した
シートのモジュールに以下を記入してチェックボックスを操作してみてください。

VBA

1Option Explicit 2 3Private Sub CheckBox1_Click() 4 Application.ScreenUpdating = False 5 6 With Me 7 .Rows("27:31").Hidden = False 8 9 If .CheckBox1.Value Then 10 .Rows("27,31").Hidden = True 11 Else 12 .Rows("28:30").Hidden = True 13 End If 14 15 .Range("B6:C6").Select 16 End With 17End Sub 18

昨日書いた後、帰宅中に車の中で思いつきました。

「チェックボックスの状態で行の表示・非表示を切り替える」のだから、
行毎に「その時の状態」を操作すればいいんじゃないかなと。

Option Explicit

VBA

1Private Sub CheckBox1_Click() 2 Dim flg As Boolean 3 4 flg = Me.CheckBox1.Value 5 6 With Me.Rows 7 .Item(27).Hidden = Not flg 8 .Item(28).Hidden = flg 9 .Item(29).Hidden = flg 10 .Item(30).Hidden = flg 11 .Item(31).Hidden = Not flg 12 End With 13End Sub

チェックボックスの値も、
行の表示・非表示もTrueかそうでなければFalseなので、
「チェックボックスがTrueならば、27行目は表示」としたければ、
表示の状態は、「チェックボックスの値ではない値(= Not True)」と表現できますね。

こっちの方が後で見て、読みやすい(=可読性が高い)のではないかなと思います。

演算子について
VBAのIf文でNot条件を指定する

投稿2019/03/28 11:58

編集2019/03/29 02:03
mattuwan

総合スコア2136

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

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

0

https://teratail.com/questions/134867
↑ここの
hatena19 さんの回答が分り易かったです。

ちなみに起動するのは
Sub チェックボックス()
で合ってますよね?

投稿2019/03/27 08:06

torisan

総合スコア678

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問