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

このQ&Aのポイント
  • ユーザーフォームにチェックボックスとコマンドボタンを設置し、チェックボックスの状態によって処理を変更する方法について説明します。
  • 具体的には、ユーザーフォームにチェックボックス「りんご」「かき」「みかん」「もも」とコマンドボタン「春」「夏」「秋」「冬」があります。チェックボックスの状態によって処理を変えたい場合、チェックボックスの値を参照して条件分岐を行うことが必要です。
  • 例えば、春のボタンが押された場合、チェックボックス「りんご」がチェックされていれば「肥料」という値をセルA1に表示する処理を実行します。これを実現するためには、ボタンをクリックした時にチェックボックスの状態を参照し、条件分岐を行うマクロを作成する必要があります。
回答を見る
  • ベストアンサー

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

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

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

  • ベストアンサー
  • mt2015
  • ベストアンサー率49% (258/524)
回答No.1

Sub 春() プロシジャーは、標準モジュールにあるんじゃないですか? で、あればユーザフォームから指定しなきゃだめです。 If CheckBox1 = True Then ↓ If UserForm1.CheckBox1 = True Then

promet
質問者

お礼

すいません、返信が遅くなっていましたが、無事コメントを見てできています。 ありがとうございます。

関連するQ&A

  • フォームのCheck boxとOLEObjectのCheckboxのマクロの違い?

    エクセル2003です。 ワークシート上に複数個のチェックボックスを配置し、オンの場合、その左隣のセルの値を返すマクロを作成する場合についての質問です。 普段はフォームのCheck boxを使っています。 フォームのCheck boxなら Sub ChkBx() With ActiveSheet.CheckBoxes(Application.Caller) If .Value = xlOn Then MsgBox .TopLeftCell.Offset(0, -1).Value End If End With End Sub と、標準モジュールに一つだけプロシージャを書いて、複数個のCheck boxに同一のマクロを登録すれば簡単に出来ます。 ところがこれをOLEObjectのCheckboxでやってみようと思ったところ、フォームのように一つのプロシージャを使いまわすことができず、シートモジュールに以下のように各Checkboxごとのマクロを書かなくてはいけないようです。 Private Sub CheckBox1_Click() With OLEObjects("CheckBox1") If .Object.Value Then MsgBox .TopLeftCell.Offset(0, -1).Value End If End With End Sub Private Sub CheckBox2_Click() With OLEObjects("CheckBox2") If .Object.Value Then MsgBox .TopLeftCell.Offset(0, -1).Value End If End With End Sub Private Sub CheckBox3_Click() With OLEObjects("CheckBox3") If .Object.Value Then MsgBox .TopLeftCell.Offset(0, -1).Value End If End With End Sub 3つや4つくらいならどうってことはないのですが十数個もあるとかなり面倒です。 OLEObjectのCheckboxでももっと簡単にする方法はないのでしょうか? それともわたしが何かOLEObjectのCheckboxの使い方について思い違いをしているのでしょうか? ご教示をお願いいたします。

  • EXCELのシート上に埋め込んだチェックボックスの一括処理方法について

    EXCEL VBAのコード記載方法について教えていただきたいことがあります。 Sheets("Test")上にコントロールツールボックスのチェックボックスを 100個とコマンドボタンを1個配置する。 コマンドボタンをクリックすると、CheckBox1~100を全てTrueにする。 これを、 Private Sub CommandButton1_Click() Sheets("Test").CheckBox1 = True Sheets("Test").CheckBox2 = True ・ ・ ・ End Sub と100回書くのではなく、配列化して記載することは可能なのでしょうか。 ユーザーフォームのチェックボックスであれば Dim i As Integer For i = 1 To 100 UserForm1.Controls("CheckBox" & i) = True Next i で出来ると思うのですが、シート上に埋め込むチェックボックスですと、どうにも上手く動いてくれません。 丁寧に全部書いていけばいいのですが、行が沢山増えてしまい見にくいのと、数字の書き間違いが出たりして作業が煩瑣なので、 可能であればまとめて処理してしまいたいと考えています。 どうぞよろしくお願いいたします。

  • チェックボックスの使い方

    チェックボックスの使い方 エクセルでの質問です ユーザーフォームにシート名を入れたチェックボックスが、6こ付いており チェックを入れたシートのみを印刷(コマンドボタンで実行)しようとしております 以下のコードを印刷のコマンドボタンに埋め込みました --------------------------------- Private Sub CommandButton1_Click() On Error GoTo HandleErr Dim i As Integer For i = 1 To Sheets.Count If Me.Controls("CheckBox" & i).Value Then Sheets(i).PrintOut End If Next i Exit Sub HandleErr: MsgBox "印刷シートが選択されていません" End Sub --------------------------------- (1)印刷が正常になされても”印刷シートが選択されていません” とメッセージボックスがでてしまいます チェックされていない場合はエラーメッセージを出しつつ、回避する方法を教えて下さい (2)各シート内の使用されている任意のセル範囲を印刷したいのですが、 どのようなコードをどの位置で使用すればよろしいでしょうか? 素人的な質問で申し訳ありません よろしくご回答願います

  • ExcelVBA チェックボックスの値

    エクセル マクロ ユーザーフォーム 2つの間で、チェックボックスの状態をループを使って 取得するがわかりません? ユーザーフォーム1にチェックボックスを50個用意し、 ユーザーフォーム2にて各50個の値がtrue or falseを取得したいと考えています。 又、50個を取得する時にループを用いて、記載を短くする方法についても教えてください。 現在は、ユーザーフォーム1に下記のように指定して処理をしていますが、 varCheck1をユーザーフォーム2で、For Nextを用いて一度に処理する方法が分かりません。 Private Sub CommandButton1_Click() Dim varCheck(1 To 50) As Variant varCheck1 = ユーザーフォーム1.CHECKBOX1.Value varCheck2 = ユーザーフォーム1.CHECKBOX2.Value varCheck3 = ユーザーフォーム1.CHECKBOX3.Value ・             ・ varCheck50 = ユーザーフォーム1.CHECKBOX50.Value ・ Unload ユーザーフォーム1 End Sub 標準モジュールに PUBLICvarCheck1から50まで記載して ユーザーフォーム間を使用できるようにしています。

  • 複数のチェックボックスの処理

    access2000でフォームを作成し、 複数のチェックボックスがすべてONになっていない時に MSGboxで表示させるコードを教えていただけませんか? public sub () if chekbox1,checkbox2 = false then msgbox "入力されていません” else 別の処理 のような感じですが、チェックボックスの区切り方がわかりません。 どうかお願いします。

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

    教えてください。 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

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

    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のチェックボックスについて

    お読みくださり、ありがとうございます。 エクセル初心者でございます。 エクセルのマクロなのですが、 お詳しい方、是非教えて欲しいです!汗 調子に乗って入力フォームなるものを作りました。 入力フォームの中にて、チェックボックスで「ある」「なし」の項目を入れてみたのですが、チェックしていないのに、値が入る現象が起きています汗 以下、素人が書いたコードを恥を承知で記載させていただきます。 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 以上です。 おかしなところ満載かと思いますが、 チェックを入れた項目だけ値を入れたいと考えております。 おわかりになるかたおりましたら何卒お助けください汗 よろしくお願いいたします。

  • エクセル 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

  • エクセル チェックボックスの解除について(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

専門家に質問してみよう