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

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

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

下記のような表を作成しています。 □はチェックボックス(コントロールツールボックスから作成したもの)で、 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です。 ご存知の方、よろしくお願いします。

noname#3705
noname#3705

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

  • ベストアンサー
  • 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/17068)
回答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

  • エクセルのチェックボックスでの行の表示の切り替え

    エクセルでチェックボックスを使用して行の表示を切り替えています。 これに他のチェックボックスのON-OFFで表示する行を変えたいと思います。 例えばチェックボックスが3つあり チェックボックス3のON-OFFで行10-20を非表示と表示に切り替えている マクロがあります。 それをチェックボックス1がONの時は行11-20が非表示に チェックボックス2がONの時は10-19が非表示になるようにマクロに追加 するにはどうすればよいでしょうか? ちなみにチェックボックスはActiveXの方を使用しています。 今のコードは Private Sub CheckBox3_Click() If CheckBox3 = True Then Range("10:20").EntireRow.Hidden = False Else Range("10:20").EntireRow.Hidden = True End If End Sub です。 よろしくお願いします。

  • Excelで、チェックボックスを使用したセルへの出力をしたいのですが、

    Excelで、チェックボックスを使用したセルへの出力をしたいのですが、助けていただけないでしょうか。 [コントロールツールボックス]-[コントロールの選択]-[MSForms 2.0 Frame]を選択し、 作成したフレーム上の[フレームオブジェクト]でチェックボックスを作成し使用しています。 [フォーム]で作成できるチェックボックスではサイズ変更ができないため、こちらを使用しています。 チェックボックスの[プロパティ]-[ControlSource]でセルを設定すれば、 指定先のセルへ"TRUE""FALSE"を出力するすることができるのですが、こちらを設定していると、 エクセル内の小窓でシートを閉じる時に、「問題が発生~エラーを送信しますか?」と100%表示されてしまいます。ですので、こちらの機能は使えません。 フレーム上で右クリック[コードの表示]で、以下のコードを書いてみましたが、 「実行時エラー"424" オブジェクトが必要です」と表示されてしまいます。 Private Sub CheckBox1_Click() If CheckBox1.Value Then Range("V18").Value = Range("V18").Value + 5 Else Range("V18").Value = Range("V18").Value - 5 End If End Sub 何分、マクロに関して素人なものですから問題点がわかりません。 "TRUSE""FALSE"を表示させるだけでいいので、何か良い方法がありましたらご指導いただけないでしょうか。 強制終了の不具合は、フレームから作り直してみたり、シートごと作り直してみましたが、 [ControlSource]にセルを設定していると100%強制終了が起こることしかわかりませんでした。 何卒よろしくお願いいたします。

  • エクセル2003VBA チェックボックスについて

    エクセル2003VBA チェックボックスについての質問です よろしくお願いします。    A         B 1 あああ       □ 2 いいい       □ 3 ううう        □ . . . . 35 かかか      □ 複数のチェックボックスをB列に配置し、 B1がオンになるとbook1を開く B2がオンになるとbook2を開く ・ ・ B35がオンになるとbook35を開く処理を行いたいのですが、 非常にコードが長くなってしまいます。 以下のコード以外で、 どのチェックボックスがオンになっているかを調べる方法が知りたいのですが、よろしくお願いします。 Private Sub CheckBox1_Click() book1を開く処理 End Sub Private Sub CheckBox2_Click() book2を開く処理 End Sub ・ ・ ・ Private Sub CheckBox35_Click() book35を開く処理 End Sub

  • エクセル VBA チェックボックスについて

    よろしくお願い致します。 OS:XP エクセル2003 VBAのことは、まったくの初心者です。 質問なのですが、下記のようなチェックボックス7にチェックが入れば、チェックボックス8~11に自由にチェックが入れれるようになり、逆にチャックボックス7にチェックが入ってない場合は、チェックボックス8~11のチェックはクリアされ、チェックできないものを作りました。 ここから、チェックボックス7にチェック入れたあとは、必ずチェックボックス9~11のどれかにチェックが入っている状態(ラジオボタンのような)で、チェックボックス7にチェックが入ってなかったら、8~11のチェックがクリアで尚且つ、チェックができなくなるようにするにはどうすればよいでしょうか? よろしくお願い致します。 Private Sub CheckBox7_Click() If CheckBox7.Value = True Then CheckBox8.Enabled = True CheckBox9.Enabled = True CheckBox10.Enabled = True CheckBox11.Enabled = True Else CheckBox8.Value = False CheckBox9.Value = False CheckBox10.Value = False CheckBox11.Value = False CheckBox8.Enabled = False CheckBox9.Enabled = False CheckBox10.Enabled = False CheckBox11.Enabled = False End If End Sub

  • エクセル マクロ チェックボックス

    sheet1にチェックボックスが3つあり、マクロを実行するコマンドボタンが1つあります。 チェックボックスにレ点を入れることにより、sheet4のデータからsheet2にグラフを作成しようと考えてますが、エラーが出てしまい解決できません。 どのように訂正したらいいのか教えて頂けないでしょうか。 Private Sub CommandButton1_Click() Dim GraphRange As String Dim Graph As ChartObject Dim lastRow As Long Set Graph = Sheets("sheet2").ChartObjects.Add(150, 27, 350, 200) lastRow = Sheets("sheet4").Range("A" & Rows.Count).End(xlUp).Row GraphRange = Sheets("sheet4").Range(Cells(1, 1), Cells(lastRow, 1)).Value If Sheets("sheet1").CheckBox1.Value = True Then 'CheckBox1にチェックがあれば GraphRange = Sheets("sheet4").Range(Cells(1, 2), Cells(lastRow, 2)).Value End If If Sheets("sheet1").CheckBox2.Value = True Then 'CheckBox2にチェックがあれば GraphRange = Sheets("sheet4").Range(Cells(1, 3), Cells(lastRow, 3)).Value End If If CheckBox3.Value = True Then 'CheckBox3にチェックがあれば GraphRange = Sheets("sheet4").Range(Cells(1, 4), Cells(lastRow, 4)).Value End If Graph.Chart.ChartWizard Source:=Sheets("sheet4").Range(GraphRange).Value, _ Gallery:=xlLine, Format:=1, PlotBy:=xlColumns, _ CategoryLabels:=1, SeriesLabels:=1, HasLegend:=True End Sub

  • エクセル チェックボックスの解除について(VBA)

    YES/NOを入力させる為の下記のVBAにおいて、チェックボックス1をチェックすると、アの部分でチェックボックス2の解除を行う関係で?、シート上でチェックボックス2を操作していないのにもかかわらず、勝手にCheckBox2_Click()に入り、命令文イを実行してしまいます。 ただ単にSub CheckBox1_Click()のルーチンの最後までの処理で終わりたいのですが、どうしたらよいのでしょうか。 Private Sub CheckBox1_Click() If CheckBox1 = True Then Sheets("sheet1").Range("A1") = 1 Sheets("sheet1").Range("A2") = 0 CheckBox2 = False・・・ア Else Sheets("sheet1").Range("A1") = "" End If End Sub Private Sub CheckBox2_Click() If CheckBox2 = True Then Sheets("sheet1").Range("A1") = 0 Sheets("sheet1").Range("A2") = 1 CheckBox1 = False Else Sheets("sheet1").Range("A2") = ""・・・イ End If End Sub

  • エクセル チェックBOXを使用してシート選択 保存

    皆様お世話になります。 昨日は一括保存をご教授していただきありがとうございました。 早速ですが今回は、チェックboxを使用してシートを選択しそれをCSV形式にて保存したいのですがどうもうまくいきません。 ご教授よろしくお願いします Private Sub 保存_Button1_Click() If CheckBox5.Value Or CheckBox6.Value Or CheckBox7.Value Then bl = 5 If CheckBox5.Value Then Sheets("管理").Select Cells.Select Range("a1").Select 保存_start End If bl = 5 If CheckBox6.Value Then Sheets("カット").Select Cells.Select Range("a1").Select 保存_start End If bl = 5 If CheckBox7.Value Then Sheets("ノズル").Select Cells.Select Range("a1").Select 保存_start End If MsgBox "通信終了" Unload Me Else MsgBox "何も選択されていません" End If End Sub Private Sub 保存_start() Cells.Select Selection.Copy Workbooks.Add ActiveSheet.Paste Application.CutCopyMode = False Application.DisplayAlerts = False ActiveWorkbook.SaveAs Flname = "c:\" & ActiveSheet.Name & "-" & CStr(Format(Date, "yymmdd") & _ "-" & Format(Time, "hhmmss")), FileFormat:=xlCSV ActiveWindow.Close ThisWorkbook.Activate Application.DisplayAlerts = True End Sub

  • エクセル VBAのチェックボックスについて

    お読みくださり、ありがとうございます。 エクセル初心者でございます。 エクセルのマクロなのですが、 お詳しい方、是非教えて欲しいです!汗 調子に乗って入力フォームなるものを作りました。 入力フォームの中にて、チェックボックスで「ある」「なし」の項目を入れてみたのですが、チェックしていないのに、値が入る現象が起きています汗 以下、素人が書いたコードを恥を承知で記載させていただきます。 Private Sub CheckBox1_Click() If CheckBox1.Value = True Then OK = "○" End If End Sub Private Sub CheckBox2_Click() If CheckBox2.Value = True Then NO = "×" End If End Sub Private Sub UserForm_Click() End Sub '以下のコードは、登録ボタンがクリックされたときの処理! Private Sub 登録ボタン_Click() If TextBox1.Text = "" Then MsgBox "グッズ名を入力してください。" Exit Sub End If If TextBox2.Text = "" Then MsgBox "アプローチ先を入力してください。" Exit Sub End If With Worksheets("協賛グッズ") With Cells(Rows.Count, 2).End(xlUp) .Offset(1, 0).Value = TextBox1.Text .Offset(1, 1).Value = mori .Offset(1, 2).Value = mori2 .Offset(1, 3).Value = TextBox2.Text .Offset(1, 5).Value = TextBox3.Text .Offset(1, 6).Value = TextBox4.Text .Offset(1, 7).Value = TextBox5.Text .Offset(1, 8).Value = TextBox6.Text End With End With TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox5.Text = "" TextBox6.Text = "" CheckBox1.Value = False CheckBox2.Value = False End Sub 以上です。 おかしなところ満載かと思いますが、 チェックを入れた項目だけ値を入れたいと考えております。 おわかりになるかたおりましたら何卒お助けください汗 よろしくお願いいたします。

  • エクセル マクロ:チェックボックス コピー

    教えてください。 sheet1にデータがあり sheet2にチェックボックスとコマンドボタンがあります。 チェックボックスにレ点を入れ、コマンドボタンを押すと sheet1の該当する列をコピーして、sheet3に貼り付ける マクロを作ろうと思ってますがうまくいきません。 下記のマクロを使えるように手直ししていただけないでしょうか。 よろしくお願い致します。 Private Sub CommandButton1_Click() Dim myrange As String Dim rmax As Long rmax = Sheets("sheet1").Range("A2").End(xlDown).Row With Sheets("sheet2") If .CheckBox1 Then myrange = myrange & ",$B$1:$B$" & rmax If .CheckBox2 Then myrange = myrange & ",$C$1:$C$" & rmax If .CheckBox3 Then myrange = myrange & ",$D$1:$D$" & rmax End With If myrange = "" Then MsgBox "チェックしてください" Exit Sub End If myrange = "$A$2:$A$" & rmax & myrange Sheets("sheet1").Range(myrange).Copy Sheets("sheet3").Range("A1").PasteSpecial xlPasteValues Application.CutCopyMode = False Sheets("sheet3").Select End Sub

  • チェックボックスのチェックによるマクロ処理の変更

    ユーザーフォームにチェックボックスとコマンドボタンを設置して、チェックボックスのチェックに応じて、処理を変えるにはどうしたらいいでしょうか。 具体的には、ユーザーフォームに例えば、 (1)チェックボックス  -りんご (=checkbox1)  -かき  -みかん  -もも (2)コマンドボタン  -春  -夏  -秋  -冬 のボタンがあるとします。 仮に、春のボタンには、 「Call 春」とプロシージャを読むようにしています。 春のプロシージャには、 例えば、 Sub 春()  If checkbox1=true then   range("A1").value="肥料"  End if End sub のように書いています。 チェックボックスのチェックの有無・結果に応じて、処理を変えたいのですが、これでは、checkbox1box1のチェックの結果がsubプロシージャに渡せないので、どのようにしたらいいのでしょうか。 よろしくお願い致します。

専門家に質問してみよう