プロが教える店舗&オフィスのセキュリティ対策術

エクセルで商品管理のシートを作成しています。

10店舗ほど支店があるので、取扱店舗をチェックボックスで
選択できるようにしていますが、全店取扱の商品がかなり有るので
一括で10個のチェックボックスにチェック出来る様にしたいのです。

最初はコマンドボタンのLINKEDCELLにチェックボックスで参照している
セルが連動するように数式を入れていたのですが、このやり方だと
ボタンを使わずにチェックボックスを使うと参照セルの数式が
「TRUE/FALSE」に上書きされてしまい、以後ボタンと連動しなくなってしまいます。

出来ればコマンドボタンのLINKEDCELLプロパティを複数セルに指定したいのですが、可能でしょうか?
※「A1:G1」等と設定してみたのですが、連動するのは「A1」のみでした…

VBAを使用すれば良いのでしょうが、まったく知識が無いので時間的に厳しい状況です。

どなたかお分かりの方がいらっしゃればご助言お願いいたします。

A 回答 (4件)

こんにちは。


#2 です。二人が回答して、それぞれ別の教え方をしているようでは、混乱してしまいますが、私は、あくまでも CommnadButton(コマンドボタン)で書かせていただきます。

>どこの記述を変えれば狙ったチェックボックスのグループを
>反転できるのかが判らず八方塞です。

「一括で10個」 という意味が、任意のグループというのは、今、分かりました。

Array(2, 4, 5, 6, 7, 8) ←ここに、連動させる番号を「,(コンマ)」区切りで、入れてあげます。存在しない番号はいれないでくださいね。エラーになってしまいますから。

この中自体は、順番でなくてもよいです。なお、番号は、コントロールツールの青い三角のアイコンをオンにして、マウスを当てれば、チェックボックスの名称を変更していなければ、出てくるはずです。

'-------------------------------------------------------

Private Sub CommandButton1_Click()
Dim i As Variant
Dim bln As Boolean
Dim nums As Variant
nums = Array(2, 4, 5, 6, 7, 8) 'チェックボックスの番号を入れる

bln = Me.OLEObjects("CheckBox" & nums(0)).Object.Value '最初のチェックボックスにしたがって反転にさせます。True <-> False

For Each i In nums
  Me.OLEObjects("CheckBox" & i).Object.Value = Not bln
Next i
End Sub

なお、今から、マクロを勉強しても、このレベルになるのは、半年先ぐらいになってしまいますから、もうお任せしたほうが早いと思います。(^^;
    • good
    • 0
この回答へのお礼

ありがとうございます!
無事出来ました!!!

ようやくチェックボックスを使い始めたばかりで
マクロは初めて触りました~

半年後にもう少し理解できるように勉強しようと思います。
ご助言ありがとうございました。

お礼日時:2007/05/16 20:04

1、グループ別にトグルボタンを用意する。


2、または VBA で以下のようなコードを書く。

Option Explicit

Private Sub ComboBox1_Change()
  Dim G    As Integer
  Dim obj   As Object
  Dim ObjName As String
   
  G = Val(Me.ComboBox1.Value)
  For Each obj In Me.OLEObjects
    ObjName = obj.Name
    If Left(ObjName, 8) = "CheckBox" Then
      obj.Object.Value = CBool(Mid(ObjName, 9, 1) = G)
    End If
  Next obj
End Sub

Private Sub CommandButton1_Click()
  Me.ComboBox1.AddItem "1:a"
  Me.ComboBox1.AddItem "2:b"
  Me.ComboBox1.AddItem "3:c"
End Sub

コマンドボタンでグループを選択します。
ComboBox1_Change() のコードは、対応するチェックボックスのみをONにするコードです。
コンボボックスの先頭の数字とチェックボックスの対応は次のようにしたらいいです。

CheckBox101
CheckBox102
CheckBox103
CheckBox201
CheckBox202
CheckBox203

これでグループ毎にオン、オフできます。

この回答への補足

ご回答ありがとうございます。

> ComboBox1_Change() のコードは、対応するチェックボックスのみを> ONにするコードです。
> コンボボックスの先頭の数字とチェックボックスの対応は次のように> したらいいです。
>
> CheckBox101
> CheckBox102
> CheckBox103
> CheckBox201
> CheckBox202
> CheckBox203

すみません。この部分がいまひとつ理解できないのですが、
どこの数字をどのように変えるのか具体的に教えていただけませんでしょうか?

何しろマクロはチンプンカンプンなので恐縮です・・・

補足日時:2007/05/16 17:47
    • good
    • 0
この回答へのお礼

マクロまで教えていただいてありがとうございます。

#2の方の方法を使わせていただきましたが、
同じ目的でもこんなに記述が違うなんて
マクロって奥深いですね~

本当にありがとうございました。

お礼日時:2007/05/16 20:06

こんにちは。



結論から言うと、

「マクロを使わずに複数のチェックボックスに一括チェックするコマンドボタン」というのは、不可能ですね。

それで、マクロですが、コマンドボタンに取り付けてありますが、機能は、トグルになっています。LinkedCell は、すべて外してください。


Private Sub CommandButton1_Click()
Dim i As Integer
Dim bln As Boolean

bln = Me.CheckBox1.Value '一番目のチェックボックスにしたがって反転にさせます。

For i = 1 To 10
  Me.OLEObjects("CheckBox" & i).Object.Value = Not bln
Next i
End Sub

この回答への補足

ご回答ありがとうございます。
判らないながらも記述していただいたマクロを入れてみました。

確かにチェックはされるのですが、今度はチェックしたくない取扱店舗以外のチェックボックスも全て連動してしまいます…

どこの記述を変えれば狙ったチェックボックスのグループを
反転できるのかが判らず八方塞です。

やはりマクロを勉強しなくてはならないのでしょうか…

補足日時:2007/05/16 16:48
    • good
    • 0

一度も Excel は操作したことがない門外漢ですが・・・。



ToggleButton1.LinkedCell=A1
CheckBox1.LinkedCell=A1
CheckBox2.LinkedCell=A1
CheckBox3.LinkedCell=A1

という仕掛けであれば、トグルボタンのオン、オフで複数のチェックボックスの値の操作が可。
コマンドボタンでは難しいのでは・・・。

この回答への補足

すみませんコマンドボタン→トグルボタンの間違いでした…

ご回答いただいた方法だと全てのチェックボックスが連動してしまうため全店取扱の場合は問題ないのですが、個別にチェックを入れても全て連動してしまいます。

補足日時:2007/05/16 15:47
    • good
    • 0
この回答へのお礼

アドバイスありがとうございました。
無事解決いたしました。

お礼日時:2007/05/16 20:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!