[[20220812163434]] 『チェックボックスのオンオフで、特定セルへの文字』(ナイター) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『チェックボックスのオンオフで、特定セルへの文字列の表示を切り替える手法』(ナイター)

フォームコントロールのチェックボックスとVBAを用い、チェックボックスのオンオフに連動して特定のセルに特定の文字列を表示したり非表示にしたりする方法がどうしても掴めません。

下記のようなVBAを組んでみたのですが、うまくいきません。
Sub test()

 Dim month As String
 Dim cell As Range
 Dim cbx As Object

 month = "1月"
 Set cell = Worksheets(1).Range("A1")
 Set Object = "Check Box 1"

  If cbx.Value = True Then
   cell = month
  Else
   cell = ""
  End If

End Sub

恥ずかしながらVBAは初心者なもので、どれだけ調べてもうまく動かないのでご助力願いたいです。

A1に =If(チェックボックスのリンク先セル=true,”1月”,””)
みたいな数式を入れておけば簡単なのは理解しております。
今回はVBAを使用したい環境のため、どうかお力添えください。

< 使用 Excel:Office365、使用 OS:Windows10 >


 >Set Object = "Check Box 1"
 Object は cbx の間違いですよね。
(?) 2022/08/12(金) 17:49

>チェックボックスのオンオフに連動して

とのことなのでチェックボックスにマクロを登録します。
チェックボックスを右クリックして「マクロの登録」から「新規作成」をクリックします。
標準モジュールに下記のような雛型ができるので、

 Sub チェック1_Click()

 End Sub

これに下記のようなコードを挿入します。

 Sub チェック1_Click()
    Dim Month As String
    Dim cell As Range
    Dim cbx As Object

    Month = "1月"
    Set cell = ActiveSheet.Range("A1")
    Set cbx = ActiveSheet.CheckBoxes(Application.Caller)

    If cbx.Value = xlOn Then
        cell = Month
    Else
        cell = ""
    End If
 End Sub

これでチェックボックスのクリックに連動してセルの値が変更されます。

注意点としては、
フォームコントロールのチェックボックスの Value はBoolean型でなく、
定数 xlOn, xlOff で判断します。

フォームコントロールに登録したマクロ内では、
Application.Caller でクリックしたコントロールの名前を取得できます。
これで、チェックボックスを特定して取得できます。

(hatena) 2022/08/12(金) 17:52


横からですが、そのシート上に配置した、ActiveXコントロールのチェックボックスじゃダメですかね。
そちらならBoolean型ですから↓のようにできそうですが・・・
    Private Sub CheckBox1_Click()
        Range("A1").Value = IIf(CheckBox1, Month(Date), "")
    End Sub

(もこな2) 2022/08/12(金) 18:39


 参考です。

 Sub CheckOn()
    ActiveSheet.CheckBoxes(1).Value = xlOn
    Range("A1").Value = "1月"
 End Sub

 Sub CheckOff()
    ActiveSheet.CheckBoxes(1).Value = xlOff
    Range("A1").Value = ""
 End Sub

(?) 2022/08/12(金) 19:08


質問者のコードをなるべく尊重して回答したが、
下記のように1行で書くことも可能です。

 Sub チェック1_Click()
    Range("A1").Value = IIf(ActiveSheet.CheckBoxes(Application.Caller)=xlOn,"1月","")
 End Sub

フォームコントロールとActiveXコントロールの使い分けですが、
自分の場合は、
そのシートでしか使わないならActiveXコントロール、
複数のシートの複数のチェックボックスで共通する処理なら、フォームコントロール
としてます。
(hatena) 2022/08/12(金) 21:02


 Sub チェック1_Click()
     Range("A1").Value = IIf(ActiveSheet.CheckBoxes(1) = xlOn, "1月", "")
 End Sub

(?) 2022/08/12(金) 21:30


皆さま、暖かい回答ありがとうございます。

具体的なコードを何パターンか明示していただき、試しがいがあります。
いずれかも試行してみて、一番やりやすいものを実装してみようと思います。

ActiveXとフォームコントロールの使い分けについてはまだ何も考えておらず、上の段にあるからフォームコントロールを使っておりましたが,こちらはもう少し調べてみます。

作業環境的に月曜まで動かせないので、今この場ではうまくいったか返答できず申し訳ないところです。
引き続きご教授お願いいたします。
(ナイター) 2022/08/12(金) 23:43


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.