• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルでチェックボックスをクリックしたらセルに数値を入力&消去)

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

このQ&Aのポイント
  • エクセルでチェックボックスをクリックした場合に、関連するセルに数値を入力または消去する方法について質問です。
  • チェックボックスをクリックすると、指定したセルに○印を表示したり、消したりする方法について知りたいです。
  • また、行を追加する場合にもチェックボックスをコピーできる方法があるかどうか知りたいです。

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.4

もう回答してもいいんでしょうか・・・? コントロールツールボックスのチェックボックスはデザインモードならコピーできるはずです。 ただし、この場合は各チェックボックス毎にコードを書く必要があります。共通ルーチンを呼ぶようにできますが、イベントをまとめてつかまえられないので、コントロールの数分イベントを書く必要があるでしょう。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

noname#3705
質問者

お礼

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

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.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)「フォームのコントロールのコピーが出来るかどうか」「コントロールの数が多い時、値を一々聞く面倒さの 回避法」などが質問ですか。

noname#3705
質問者

お礼

アドバイスありがとうございます。 判り難い文章ですみません…。 (1)(2)LinkedCellは質問する前にいちど試してみましたが、 作業用の列や行を作成すると、それに気づかない人がフォーマットを 操作した場合、コピー洩れ等がありそうなのでやめました。 ○印が入るセルに数式を入れるのも、後で○印を●印に手動で変更するなど 他人が操作する場合があるのでできるだけ数式を入力しないようにと 考えています。 ○印を最初から全てのセルに入力しておいてフォントを白にし、条件付書式で フォントを黒にする方法も考えたのですが、同じくセルのデータを変更する 可能性があるので(しかもそれは私が関知できないので)やめました。 (3) >A1のチェックボックス--->A1セルの位置に配置すると言うことですか。 >同じ列にあるチェックボックスは違う行で同じ列に○印が入るのですが、 ---->チェックボックスには行も列もないはず。ただ、並べた見た目の位置のことですか。 その通りです。他に表現する方法を思いつかなかったもので…。 グループボックスとはどういうものなのでしょうか? コントロール配列というものもよくわかりません。 コントロールツールボックスのチェックボックスはデザインモードでないと コピーできないようだというのは試してみて判ったのですが、デザインモードで コピーしてもクリック時に動くコードがコピー元と同じものになっているので、 それをVBAを使って書きかえられないかと思いました。 (7)質問の目的は、 「・チェックボックスをクリックするとチェックボックスが配置されている行の決まったセルに○印を入力もしくは消去できるマクロを作成したい。 ・そのフォーマットはパソコンに不慣れな他人が操作するのでできるだけ簡単に(チェックボックスをワンクリックのみ、等)操作できるようにしたい。 ・パソコンに不慣れな人が行数を増やしたりデータを一部変更しても変な動きにならないようなものを作成したい。 ・コードが沢山あると修正する時に困りそうなのでできるだけ簡単にしたい」 というものなのですが、それを全部他人様に聞くのもどうかと思い、自分でできるだけ作成してみて、わからなかった項目をピックアップして質問しました。 判りづらかったようですみません。これからは気をつけたいと思います。

  • vbafriend
  • ベストアンサー率47% (17/36)
回答No.3

初めまして。 チェックボックスのコピーは、デザインモードをオンの状態にしてコピー元のチェックボックスの上にマウスポインターを当てて右クリック後表示されたプルダウンメニューの中のコピーをクリックし、貼り付けたい位置にマウスポインターをあわせて右クリックして貼り付けをクリックすると出来ると思います。(当方エクセル2000で確認済み) コードは間違っていないと思います。貴方様のコードをコピペして確認しましたら、うまく動作しました。 Private Sub CheckBox1_Click() チェックボックス1を押した時の動作 End Sub Private Sub CheckBox2_Click() チェックボックス2を押した時の動作 End Sub というようにチェックボックス個々のクリックイベントにコードを書かないとうまく動作しないと思います。 ご不明な点がございましたら、お気軽にご連絡下さい。

noname#3705
質問者

補足

ご回答ありがとうございます。 説明が少し足りませんでした…。 このフォーマットはパソコンに不慣れな人も含めて不特定多数の人が利用するので、通常の操作と同じ方法で行を増やせたら、と考えています。 マクロで、デザインモードにしてチェックボックスごと行コピーをし、 コピーした先のチェックボックスのコードに、クリック時のイベントを 新しく書き込むということは可能でしょうか? マクロの自動記録を使って作ってみたのですがうまくいきませんでした…。 次善策として、チェックボックスの代わりにセルをダブルクリックすると そのセルにレ印が入り、そのセルに印が入ると他の決まったセルに○印が 入る(レ印を消すと○も消える)という方法も考えました。 そうするとレ印をダブルクリックで入力するところまではできたのですが、 あとがイマイチよくわかりません…。 マクロ初心者なのでお手数をおかけしますが、よろしくお願いします。

  • uratan
  • ベストアンサー率30% (38/124)
回答No.2

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

  • uratan
  • ベストアンサー率30% (38/124)
回答No.1

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

noname#3705
質問者

お礼

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

noname#3705
質問者

補足

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

関連するQ&A