• ベストアンサー

Excel VBA チェックボックスの判断

下記のようなマクロでチェックボックスを作成したのですが、その作成したチェックボックスをクリックしたときに、ある処理を実行させるようにするにはどうすればいいのでしょうか? よろしくお願いします。 Dim Max as Long Dim Cell as Range Dim Check as CheckBox ・ ・ ・ For i = 0 To Max   With Cell.Offset(i)   Set Check = ActiveSheet.CheckBoxes.Add_     (Left:=.Left,Top:=.Top, Width:=.Width, Height:=.Height)   End With   With Check   .LinkedCell = Cell.Address   .Caption = ""   .Value = False   End With Next

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

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.2

With Check   .OnAction = "プロシージャ名" End With で、プロシージャが登録されます。 チェックボックスをクリックしたとき、登録したプロシージャが実行されます。

ma0k0ch0
質問者

お礼

実行できました! ありがとうございます。

その他の回答 (1)

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

Sub チェックボックス名_Click() End Sub でコードを記述すればいいと思いますよ。

ma0k0ch0
質問者

補足

回答ありがとうございます。 チェックボックスの数は不定で、動的にチェックボックスを作成しているので、クリックしたときに1つのsubプロシージャに飛ばしたいと考えています

関連するQ&A

  • エクセルマクロでチェックボックスを作成する方法

    下記の方法でExcel起動時にE1~E50にチェックボックスを 作成しています。 (F列にはチェックの結果を表示させています) Sub Auto_open() Dim i As Integer Dim cbx As CheckBox With Selection.Parent For i = 1 To 50 Set cbx = .CheckBoxes.Add(Left:=Cells(i, 5).Left, _ Top:=Cells(i, 5).Top, _ Height:=Cells(i, 5).Height, _ Width:=Cells(i, 5).Width) cbx.Text = "" cbx.LinkedCell = "F" & i cbx.Display3DShading = True Next i End With Set cbx = Nothing End Sub チェックボックスにチェックされたら チェックされた行のA~Dの色を変更したいのですが、 どのようにやるのか分からなく困っています。 (チェックボックスのクリックイベントを50個つくるわけにも いかないですし・・・) 何か少しでもアイデア等ございましたら ご教授お願いします。

  • エクセルVBAで結合セルの真ん中にチェックボックスを作成する方法を教え

    エクセルVBAで結合セルの真ん中にチェックボックスを作成する方法を教えて下さい。 数個下の質問で結合されたセルに一つだけチェックボックスを作る方法を質問した者です。 度々すみません。 今度の質問ですが、結合したセルの上下左右の真ん中にチェックボックスを作る方法を教えていただけないでしょうか? 現在のプログラムは下記のようになっております。 宜しくお願い致します。 Dim ss As Excel.Range, cbx As CheckBox With Selection.Parent For Each ss In Selection If (ss.MergeArea.Column = ss.Column) * (ss.MergeArea.Row = ss.Row) Then Set cbx = .CheckBoxes.Add(Left:=ss.Left, Top:=ss.Top, _ Height:=ss.Height, Width:=ss.Width) cbx.Text = "" RowCnt = Selection.Row        '選択されているセルの行をRowCnt変数で表現 cbx.LinkedCell = "A" & RowCnt    '選択されているセルのA列にチェックボックスを作成 cbx.Display3DShading = False     '3D表示なし With cbx.ShapeRange .Fill.Solid .Fill.Visible = msoFalse       '塗りつぶしなし .Line.Visible = False         '線on,off .Line.Weight = 0.25          '線幅 .Line.ForeColor.RGB = RGB(0, 0, 0)  '線色 End With End If Next End With

  • (VBA)スピンボタンの大量コピー(相対参照)

    お世話になります。質問させていただきます。 表題件ですが、EXCELにて 「A列にコントロールツールの"スピンボタン"をリンクセルを相対参照にして縦に大量にコピー(さらに増減値をデフォルトの1から10に変更)」したいと考えています。 以下に記載したVBAコードは、こちらと同様のQ&Aサイトにて見つけてきた「A列にコントロールツールの"チェックボックス"をリンクセルを相対参照にして縦に大量にコピー」するコードです。 先ずは参考までにご確認ください。 ----------------------------------------------------------------- Sub Checkbox連続作成() Dim myChk As Object Dim i As Long Dim Sakuseisuu As Long Dim StartCell As Range '--------↓ここを変更--------- Sakuseisuu = 20 'チェックボックスの作成数 Set StartCell = Range("A1") 'スタートする位置 '--------↑ここを変更--------- For i = 0 To Sakuseisuu - 1 With StartCell.Offset(i) Set myChk = ActiveSheet _ .OLEObjects.Add(classtype:="Forms.CheckBox.1", _ Link:=False, DisplayAsIcon:=False, _ Left:=.Left, Top:=.Top, _ Width:=.Width, Height:=.Height) End With With myChk .LinkedCell = StartCell.Offset(i, 1).Address .Object.Caption = "" .Object.Value = False End With Next End Sub ------------------------------------------------------------------ 上記コードを参考に、「A列にコントロールツールの"スピンボタン"をリンクセルを相対参照にして縦に大量にコピー」すべく、コードを以下のように短絡的に書き換えてみましたが、エラーとなってしまいます。 ------------------------------------------------------------------ Sub SpinButton連続作成() Dim myspin As Object Dim i As Long Dim Sakuseisuu As Long Dim StartCell As Range '--------↓ここを変更--------- Sakuseisuu = 20 'チェックボックスの作成数 Set StartCell = Range("A1") 'スタートする位置 '--------↑ここを変更--------- For i = 0 To Sakuseisuu - 1 With StartCell.Offset(i) Set myspin = ActiveSheet _ .OLEObjects.Add(classtype:="Forms.SpinButton1.", _ Link:=False, DisplayAsIcon:=False, _ Left:=.Left, Top:=.Top, _ Width:=.Width, Height:=.Height) End With With myspin .LinkedCell = StartCell.Offset(i).Address .Object.Caption = "" .Object.Value = False End With Next End Sub ------------------------------------------------------------------ お詳しいかたがおられましたら、是非ともアドバイスを頂戴したく存じます。 さらにわがままを述べると、増減値をデフォルトの1から10に変更したく考えております。 何卒よろしくお願い申し上げます。

  • Excelでのチェックボックスの右端への設置

    VBAでチェックボックスを多数設置しようと思います。 Set r = Cells(i, "B") If Cells(i, "B").Font.Bold = True Then With r With CheckBoxes.Add(.Left, .Top, .Width, .Height) 以上はループ処理の一部で、セル内容が太字だったらそのセルの右端にチェックボックスを設置したいのですが、上記のままですとセルの左端に設置されてしまします。 .Left の部分を.Left+50 などとしておおよその値で右にずらすしかないのでしょうか。 左端に設置する時のように右端にスナップしてくれればありがたいのですが。 設置後にAlt+D&Dでも、セルの右端にはスナップしてくれないようです。

  • checkboxの値の取得方法

    教えてください (excel2010) checkboxをセルRange("C1")から下方に10個作成しています。(下方を参照) 質問は2点あります。 [質問1]  10個のセルにcheckboxは作成されるのですが、この後、これらに設定したセルの値(Check on/off)を判定するには、どのようコーディングすればよいのでしょうか? [質問2] 10個のセル作成時、当初 ".LinkedCell=" で指定したセルに「True/False」が表示されていましたが、現在以下の処理を行っても「True/False」が表示されません。 確認事項や対処方法にお心あたりがあれば、ご教授願います。  '------------------------------------------ checkbox 10個作成 Dim myChk As Object Dim i As Long Dim 個数 As Long Dim 開始セル As Range 個数 = 10               'チェックボックス作成数 Set 開始セル = Range("C1")   'チェックボックス作成の開始セル位置 For i = 0 To 個数 - 1 With StartCell.Offset(i) Set myChk = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, _ DisplayAsIcon:=False, _ Left:=.Left, Top:=.Top, _ Width:=.Width, Height:=.Height) End With With myChk .LinkedCell = 開始セル.Offset(i, 1).Address .Object.Caption = "" .Object.Value = False End With Next

  • エクセルVBAでの画像ファイル名取得他

    VBAについての質問です。 http://hp.vector.co.jp/authors/VA033788/kowaza.html#0158 上記をベースに、なんとかVBAを下記のように書き換えました。 Sub LoadPictures3() Dim Fnames As Variant Dim Fn As Variant Dim i As Integer Dim Pic As Picture Dim R As Range Dim R2 As Range Dim Pc As Integer Fnames = Application.GetOpenFilename("図(*.jpg;*.gif),*.jpg;*.gif", MultiSelect:=True) If TypeName(Fnames) = "Boolean" Then Exit Sub Application.ScreenUpdating = False '一枚目の貼付け位置 Set R = Range("B5") Set R2 = R.Offset(35) Pc = 0 For i = 1 To UBound(Fnames) Set Pic = ActiveSheet.Pictures.Insert(Fnames(i)) Select Case (i - 1) Mod 4 + 1 Case 1 Pc = Pc + 1 If Pc >= 2 Then ActiveSheet.HPageBreaks.Add R2 End If With R Pic.Left = .Left Pic.Top = .Top Pic.Width = 300 Pic.Height = 225 End With Case 2 With R.Offset(0, 6) '一枚目に対する二枚目の相対位置 Pic.Left = .Left Pic.Top = .Top Pic.Width = 300 Pic.Height = 225 End With Case 3 With R.Offset(18, 0) Pic.Left = .Left Pic.Top = .Top Pic.Width = 300 Pic.Height = 225 End With Case 4 With R.Offset(18, 6) Pic.Left = .Left Pic.Top = .Top Pic.Width = 300 Pic.Height = 225 End With '次ページの相対位置 Set R = R.Offset(39) End Select Next Application.ScreenUpdating = True End Sub ここで、画像の上の位置(B5のセル位置の画像の場合、B4)に 元々の画像ファイル名を取得し、表記させたいのですが 調べた所、multiselect:=Trueで複数ファイルを選択するときに 画像名が図1、図2に変わっているようで、どうしていいかわかりません。 後、画像を300×225の「変倍」画像にしたいのですが どのようにすれば可能でしょうか? 全くVBAの知識がなく、上のURLを参考に、単語を調べつつ書き換えている状態で、変数やらなんやらの指定・書き方等わかりません。 どなたかご教授願います。

  • 【ExcelVBA】図の縮小貼付時のトラブル

    ExcelVBAで「ActiveSheet.PasteSpecial Format:="図 (jpeg)"」という記述を使った際、 ある一定の行までは正常に図が貼り付けられるのですが、ある一定の行以降は図が 正常に張り付かない(つぶれた図になってしまう)現象に悩まされています。 ※正確には行数ではなく、選択したセルのselection.topの値が28000を超えた  あたりからおかしくなります(1行の高さが高いほど、低い行数から現象が発生します) もし何かしらの解決策を頂ければと思い、質問させて頂きました。 宜しくお願い致します。 マクロ自体は「セルを選択して実行し、図を選択すると、縦横の比率を計算してセル内に 貼り付けてくれる」という機能に、「ファイルサイズを縮小する為、貼り付けた図を一度 切り取りして、ペーストする」という作業を行っております。 Sub Paste_Picture() Dim CELL_WIDTH As Long Dim CELL_HEIGHT As Long Dim CELL_TOP As Long Dim CELL_LEFT As Long Dim CELL_PERCENTAGE As Single Dim PHOTO_WIDTH As Long Dim PHOTO_HEIGHT As Long Dim PHOTO_TOP As Long Dim PHOTO_LEFT As Long Dim PHOTO_PERCENTAGE As Single Dim PHOTO_FILE_NAME As String Dim myPHOTO As Object Application.ScreenUpdating = False Application.Calculation = xlCalculationManual PHOTO_FILE_NAME = Application.GetOpenFilename _ (Filefilter:="画像 ファイル(*.BMP;*.JPG;*.TIF), *.BMP;*.JPG;*.TIF") If PHOTO_FILE_NAME = "False" Then Exit Sub End If ActiveSheet.Select CELL_WIDTH = Selection.Width CELL_HEIGHT = Selection.Height CELL_TOP = Selection.Top CELL_LEFT = Selection.Left CELL_PERCENTAGE = CELL_HEIGHT / CELL_WIDTH Set myPHOTO = ActiveSheet.Pictures.Insert(PHOTO_FILE_NAME) PHOTO_WIDTH = myPHOTO.Width PHOTO_HEIGHT = myPHOTO.Height PHOTO_TOP = myPHOTO.Top PHOTO_LEFT = myPHOTO.Left PHOTO_PERCENTAGE = PHOTO_HEIGHT / PHOTO_WIDTH If CELL_PERCENTAGE > PHOTO_PERCENTAGE Then myPHOTO.Width = CELL_WIDTH * 0.95 myPHOTO.Height = CELL_WIDTH * PHOTO_PERCENTAGE * 0.95 myPHOTO.Cut ActiveSheet.PasteSpecial Format:="図 (jpeg)"        ←ここで図がおかしくなります。 Selection.Top = CELL_TOP + _ (CELL_HEIGHT - (CELL_WIDTH * PHOTO_PERCENTAGE * 0.95)) / 2 Selection.Left = CELL_LEFT + (CELL_WIDTH * 0.025) Else (中略) End If Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic Set myPHOTO = Nothing End Sub

  • VBAでオプションボタンの設定

    ワークシート上にOLEオブジェクトのオプションボタンを配置して、LinkedCellを設定し、同一行でGroupName を設定し、Caption をYesとNoにしようと思いました。 ところが、以下のコードですと、GroupName とCaption がエラーになってしまいます。 どのように直せばいいのでしょうか? エクセル2003です。 Sub test01() Dim n As Long, i As Long With ActiveSheet For n = 1 To 2 For i = 1 To 3 Set opt = .OLEObjects.Add(ClassType:="Forms.OptionButton.1", _ Left:=.Cells(i, n).Left, Top:=.Cells(i, n).Top, Width:=50, Height:=18) opt.LinkedCell = .Cells(i, n).Offset(, 4).Address ' opt.GroupName = "OptG" & i ' opt.Caption = IIf(n = 1, "Yes", "No") Next i Next n End With End Sub

  • エクセルVBAで、シート上で結合されたセルに一つだけチェックボックスを

    エクセルVBAで、シート上で結合されたセルに一つだけチェックボックスを作成したいです。 以前こちらの別の方の質問で、選択されているセルにチェックボックスを作成するプログラムが紹介されており、同じようにやってみたところ、セルが結合されていない場合は問題ないのですが、 セルが複数結合されている場合、結合されているセル分チェックボックスが出来てしまいます。 (例えば、エクセルのシート上で、A3セルからA6セルまでが結合されていた場合、合計4つチェックボックスが結合セル内に出来てしまいます) 結合セル内には一つしかチェックボックスを作りたくありません。 どうしたらよいでのしょうか? 以前紹介されていた、チェックボックスを作るプログラムは下記のようなものでした。 よろしくお願いいたします。 Sub sample() Dim cb As CheckBox For Each cb In ActiveSheet.CheckBoxes cb.LinkedCell = cb.TopLeftCell.Address Next cb End Sub

  • エクセルのウインドウをど真ん中に表示したい

    Sub Macro2() Dim i As Long Dim j As Long i = Application.UsableHeight / 20 j = Application.UsableWidth / 40 With ActiveWindow .Top = i .Left = j End With With ActiveWindow .Height = i * 18 .Width = j * 38 End With End Sub これで、エクセルのアプリケーション内にウインドウを表示させたくて、 上下左右同じ長さの空白を入れたいのですが 左側の空白が多いです。 何故均等にならないのでしょうか?

専門家に質問してみよう