こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルでチェックボックスをクリックしたらセルに数値を入力&消去

下記のような表を作成しています。
□はチェックボックス(コントロールツールボックスから作成したもの)で、
A1のチェックボックスにチェックするとD1とE1に○印が入り、
チェックを消すと○印も消えるようにしたいのです。
(B,Cのチェックボックスは違うセルに○印を入れるのですが、
他のチェックボックスと○を付ける項目が重複している所もあります)
 ABCDEFG
1□□□
2□□□

コードはこのようなものを書きました。
Private Sub CheckBox1_Click()
Dim teiban As Integer
teiban = ActiveSheet.CheckBox1.Value
Select Case teiban
Case True
Range("D1,E1").Value = "○"
Case False
Range("D1,E1").Value = ""
Case Else
Range("D1,E1").Value = ""
End Select
End Sub

同じ列にあるチェックボックスは違う行で同じ列に○印が入るのですが、
コードはいちいちチェックボックスごとに書かなければいけないでしょうか?

それと、行数を増やす場合があるのですが、1行目をコピーして3行目に
貼り付けてもチェックボックスはコピーされません。
何か方法がありますでしょうか?

もしチェックボックスではこのような事ができないのであれば
他にやり方などあれば教えていただけたらと思います。

使用しているのはWINDOWS98,EXCEL97です。
ご存知の方、よろしくお願いします。

投稿日時 - 2002-12-02 13:04:05

QNo.418297

すぐに回答ほしいです

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

もう回答してもいいんでしょうか・・・?

コントロールツールボックスのチェックボックスはデザインモードならコピーできるはずです。
ただし、この場合は各チェックボックス毎にコードを書く必要があります。共通ルーチンを呼ぶようにできますが、イベントをまとめてつかまえられないので、コントロールの数分イベントを書く必要があるでしょう。VBAには、VBのようにコントロール配列がないからです。(ユーザーフォーム上ではコントロール配列風な書き方もできますが、シート上では行ったことがありません。余りその気ももおきませんが・・・)

フォームのチェックボックスを使えば、チェックボックスを貼り付けるだけで、コードを追加しなくても(1つのコードで)対応可能です。下はその例です。1つのマクロしかありませんが、理屈では何個のチェックボックスがあってももかまいません。必要な分だけチェックボックスをコピーしてください。(何個まで可能かは確認できていません)
フォームとコントロールツールボックスのコントロールの特性の違いを理解して使うべきでしょう。


作り方
0.下のコードを標準モジュールに貼り付けます。
   ※A、B、C列にチェックボックスがある例です。
   ※登録したマクロ内で、チェックボックスの位置を調べています。
   ※位置が決れば、チェックボックスの値で処理が決定できる理屈です。

1.フォームのチェックボックスを使い、セルA1に納まるように配置します。

2.セルA1のチェックボックスを右クリックし、下のマクロを登録します。

3.セルA1のチェックボックスをコピーして、B1、C1に貼り付けます。

4.1行目を選択して、3行目にコピーします。後は必要な回数繰り返します。
   ※下のコードのB、C列の処理は例です。実状にあうように修正して下さい。
      (Excel97 で確認)

ここから

Sub checkBox_MacroTest()
  Dim chkboxVal As Boolean  'チェックボックスの値
  Dim rw As Long       'チェックボックスのある行
  Dim col As Integer     'チェックボックスのある列

  'チェックボックスの値
  chkboxVal = (ActiveSheet.CheckBoxes(Application.Caller).Value = 1)

  'チェックボックスの位置を調べる
  ActiveSheet.CheckBoxes(Application.Caller).Select
    rw = Selection.TopLeftCell.Row
    col = Selection.TopLeftCell.Column
    Selection.TopLeftCell.Select

  '位置によって『○』を付ける位置を決定する。Falseなら消す。
  Select Case col
    Case 1   'A列のチェックボックス。D、E列を操作している
      Cells(rw, 4) = IIf(chkboxVal, "○", "")
      Cells(rw, 5) = IIf(chkboxVal, "○", "")
    Case 2   'B列のチェックボックス。F、G列を操作している(例)
      Cells(rw, 6) = IIf(chkboxVal, "○", "")
      Cells(rw, 7) = IIf(chkboxVal, "○", "")
    Case 3   'C列のチェックボックス。H、I列を操作している(例)
      Cells(rw, 8) = IIf(chkboxVal, "○", "")
      Cells(rw, 9) = IIf(chkboxVal, "○", "")
  End Select
End Sub

投稿日時 - 2002-12-02 23:27:25

お礼

ご回答ありがとうございます。
コントロールツールボックスのチェックボックスを使うより
フォームのチェックボックスの方がこの場合はいいのですね。
教えていただいたマクロで、思っていた通りのことができました!
これで作業がだいぶはかどります。
ありがとうございました!

投稿日時 - 2002-12-03 12:14:48

ANo.4

このQ&Aは役に立ちましたか?

5人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

判らなければ、回答に入れなきゃ良いのですが、興味があって、既回答を見ているのですが複雑で、下記を入れることをお許し下さい。
(1)私もマクロも好きですが、使わなくても下記でどうですか。下記の話題が出ていないのですが
    ○LinkedCellの使用(エクセルVBAらしいと思う
○グループボックスの使用
(2)どこか使わないセルを1つみつける。今仮にA2にします。(本当はA1より遠くのセルでしょうが。)
チェックボックスのプロパティのLinkedCellにA2をいれます。(VBAからでも入れられると思います。)
A1セルに=If(a2=True,"○","")といれ、D1に=A1,
E1に=A1といれると、チェックボックスをONにすると、
A1,E1,D1とも○になり、OFFにすると消えます。A2の文字TRUE等は邪魔なら、字体の色を白にして見えなくします。
(3)質問の重点が、質問の文章文字数が多い割りに判り難い。
>A1のチェックボックス--->A1セルの位置に配置すると言うことですか。
>同じ列にあるチェックボックスは違う行で同じ列に○印が入るのですが、 ---->チェックボックスには行も
列もないはず。ただ、並べた見た目の位置のことですか。
グループボックス・コントロールは使えないでしょうか。
オプションボタンなら確実に使えます。
オプションボタン例えば12個は本来1つしかONにならないが、4つのグループボックスをかぶせると、4個の状態を取れるようですし、値を取るのもボックス当たり1つで済むようですが。
>貼り付けてもチェックボックスはコピーされません。
何か方法がありますでしょうか? ---->コントロール
は複写できるのではないですか。コントロール配列は
VBAでは今のところ許していないようですが。
まさかVBAのコードではないでしょうね。
(7)「フォームのコントロールのコピーが出来るかどうか」「コントロールの数が多い時、値を一々聞く面倒さの
回避法」などが質問ですか。

投稿日時 - 2002-12-03 10:08:50

お礼

アドバイスありがとうございます。
判り難い文章ですみません…。

(1)(2)LinkedCellは質問する前にいちど試してみましたが、
作業用の列や行を作成すると、それに気づかない人がフォーマットを
操作した場合、コピー洩れ等がありそうなのでやめました。
○印が入るセルに数式を入れるのも、後で○印を●印に手動で変更するなど
他人が操作する場合があるのでできるだけ数式を入力しないようにと
考えています。
○印を最初から全てのセルに入力しておいてフォントを白にし、条件付書式で
フォントを黒にする方法も考えたのですが、同じくセルのデータを変更する
可能性があるので(しかもそれは私が関知できないので)やめました。

(3)
>A1のチェックボックス--->A1セルの位置に配置すると言うことですか。
>同じ列にあるチェックボックスは違う行で同じ列に○印が入るのですが、 ---->チェックボックスには行も列もないはず。ただ、並べた見た目の位置のことですか。
その通りです。他に表現する方法を思いつかなかったもので…。
グループボックスとはどういうものなのでしょうか?
コントロール配列というものもよくわかりません。
コントロールツールボックスのチェックボックスはデザインモードでないと
コピーできないようだというのは試してみて判ったのですが、デザインモードで
コピーしてもクリック時に動くコードがコピー元と同じものになっているので、
それをVBAを使って書きかえられないかと思いました。

(7)質問の目的は、
「・チェックボックスをクリックするとチェックボックスが配置されている行の決まったセルに○印を入力もしくは消去できるマクロを作成したい。
・そのフォーマットはパソコンに不慣れな他人が操作するのでできるだけ簡単に(チェックボックスをワンクリックのみ、等)操作できるようにしたい。
・パソコンに不慣れな人が行数を増やしたりデータを一部変更しても変な動きにならないようなものを作成したい。
・コードが沢山あると修正する時に困りそうなのでできるだけ簡単にしたい」
というものなのですが、それを全部他人様に聞くのもどうかと思い、自分でできるだけ作成してみて、わからなかった項目をピックアップして質問しました。
判りづらかったようですみません。これからは気をつけたいと思います。

投稿日時 - 2002-12-03 13:37:14

ANo.3

初めまして。
チェックボックスのコピーは、デザインモードをオンの状態にしてコピー元のチェックボックスの上にマウスポインターを当てて右クリック後表示されたプルダウンメニューの中のコピーをクリックし、貼り付けたい位置にマウスポインターをあわせて右クリックして貼り付けをクリックすると出来ると思います。(当方エクセル2000で確認済み)

コードは間違っていないと思います。貴方様のコードをコピペして確認しましたら、うまく動作しました。
Private Sub CheckBox1_Click()
チェックボックス1を押した時の動作
End Sub

Private Sub CheckBox2_Click()
チェックボックス2を押した時の動作
End Sub

というようにチェックボックス個々のクリックイベントにコードを書かないとうまく動作しないと思います。

ご不明な点がございましたら、お気軽にご連絡下さい。

投稿日時 - 2002-12-02 20:06:19

補足

ご回答ありがとうございます。
説明が少し足りませんでした…。
このフォーマットはパソコンに不慣れな人も含めて不特定多数の人が利用するので、通常の操作と同じ方法で行を増やせたら、と考えています。

マクロで、デザインモードにしてチェックボックスごと行コピーをし、
コピーした先のチェックボックスのコードに、クリック時のイベントを
新しく書き込むということは可能でしょうか?
マクロの自動記録を使って作ってみたのですがうまくいきませんでした…。

次善策として、チェックボックスの代わりにセルをダブルクリックすると
そのセルにレ印が入り、そのセルに印が入ると他の決まったセルに○印が
入る(レ印を消すと○も消える)という方法も考えました。
そうするとレ印をダブルクリックで入力するところまではできたのですが、
あとがイマイチよくわかりません…。

マクロ初心者なのでお手数をおかけしますが、よろしくお願いします。

投稿日時 - 2002-12-02 23:27:17

ANo.2

すいません、仕事が入っちゃったので、続きは夜でいいですか?
今夜、他に回答がなければ続きを書かせていただきます。

では。

投稿日時 - 2002-12-02 14:00:29

ANo.1

マクロについては、ちょっとこっちでやってみますね。

で・・・。
コピーに関しては、ツールのオプションから編集を選んで、「オブジェクトをセルとともに切り取り、コピー、並べ替える」にチェックをすればできますよ。

投稿日時 - 2002-12-02 13:16:30

補足

早速のお返事、ありがとうございます。
コピーですが、その項目にはもうチェックが入っていました。
普通のオートシェイプなどは一緒にコピーされるのですが、
チェックボックスはコピーされませんでした…。
マクロ、お手数ですがどうぞよろしくお願いします。

投稿日時 - 2002-12-02 13:19:37

お礼

問題は解決しそうです。
どうもありがとうございました。

投稿日時 - 2002-12-03 12:09:56

あなたにオススメの質問