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

このQ&Aのポイント
  • エクセルマクロを使用してE1〜E50にチェックボックスを作成する方法を知りたいです。
  • チェックボックスにチェックが入った場合、対応する行のA〜Dの色を変更する方法を知りたいです。
  • チェックボックスのクリックイベントを50個作成することなく、行の色を変更するアイデアを教えてください。
回答を見る
  • ベストアンサー

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

下記の方法で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個つくるわけにも いかないですし・・・) 何か少しでもアイデア等ございましたら ご教授お願いします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

方法1: Sub Macro1()  Dim cbx As CheckBox  Set cbx = ActiveSheet.CheckBoxes.Add( _   Top:=Range("E1").Top, _   Left:=Range("E1").Left, _   Width:=Range("E1").Width, _   Height:=Range("E1").Height)  cbx.Text = ""  cbx.Display3DShading = True  cbx.OnAction = "チェック1_Click"  Range("E1:E50").FillDown End Sub Sub チェック1_Click()  With ActiveSheet.Shapes(Application.Caller)  .TopLeftCell.Offset(0, -4).Resize(1, 4).Interior.ColorIndex = _  IIf(.ControlFormat.Value = 1, 4, xlNone) End With End Sub とかなんとか。 方法2: >F列にはチェックの結果を表示させています これを拾って反応する条件付き書式をA:D列に施しておくのでも。

mitsu_mi
質問者

お礼

keithin様 回答ありがとうございます。 いつもはVBを使用しており、Excelマクロは今回初めてなので サンプルも記載して頂きありがとうございます。 "OnAction"でチェックボックスにチェックされた時の イベントを追加するのですね。 なんとかやりたかった事が出来そうです。 有難う御座いました。 また不明な点があればご教授願いたいと思います。

mitsu_mi
質問者

補足

下記 "チェック1_Click" にて確認があります。 Sub チェック1_Click()  With ActiveSheet.Shapes(Application.Caller)  .TopLeftCell.Offset(0, -4).Resize(1, 4).Interior.ColorIndex = _  IIf(.ControlFormat.Value = 1, 4, xlNone) End With End Sub それぞれ細かい意味は把握できていませんが、 やっていることはチェックされたら1~4列目を緑に変更、 チェックなしは塗りつぶしなしに変更でよろしいでしょうか? またそれぞれの細かい意味も参考までにご教授願いします。 お手数ですがよろしくお願いします。

関連するQ&A

  • 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

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

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

    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 これで、エクセルのアプリケーション内にウインドウを表示させたくて、 上下左右同じ長さの空白を入れたいのですが 左側の空白が多いです。 何故均等にならないのでしょうか?

  • エクセル マクロ

    エクセルのある特定のセルをダブルクリックすると 画像ファイルを参照しにいき 貼りつけたい画像ファイル選ぶと そのセルの大きさに合わせて 画像ファイルがそのセルに 貼りつくというマクロが以下の通りなんですが Excel2003からExcel2007へ変更すると 画像ファイルの貼りつく位置がダブルクリックしたセルではない所に 貼りつくようになりました 参照や大きさなどはちゃんと機能しているようです どこを変更すればよいでしょうか? Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range('特定のセル)) Is Nothing Then Exit Sub Cancel = True Dim myPic Dim myRange As Range Dim rX As Double, rY As Double myPic = Application.GetOpenFilename("画像ファイル,*.jpg;*.jpeg;*.gif;*.tif") If VarType(myPic) = vbBoolean Then Exit Sub Set myRange = Target Application.ScreenUpdating = False With ActiveSheet.Pictures.Insert(myPic).ShapeRange rX = myRange.Width / .Width rY = myRange.Height / .Height If rX > rY Then .Height = .Height * rY Else .Width = .Width * rX End If .Left = .Left + (myRange.Width - .Width) / 2 .Top = .Top + (myRange.Height - .Height) / 2 End With Application.ScreenUpdating = True Cancel = True End Sub

  • エクセル2007のマクロについて

    B9に品番を入力するとA9に画像が自動挿入される所まではなんとか出来たのですが、 同じくB10,B11,B12・・・と下の行にも同じように品番を入力すれば画像が自動挿入される様にするには,どうのようにすれば良いのでしょうか?宜しくお願い致します。   A   B 9 画像 品番 10 画像 品番 11 画像 品番 12 画像 品番    ・    ・    ・ Private Sub Worksheet_Change(ByVal Target As Range) Const ImagePath = "C:\Users\f\Desktop\画像\" If Intersect(Target, Range("B9")) Is Nothing Then Exit Sub Application.EnableEvents = False Dim codRange As Range Set codeRange = Range("B9") Dim picRange As Range Set picRange = Range("A9") Dim objPic As Picture For Each objPic In ActiveSheet.Pictures If objPic.Left >= picRange.Left And objPic.Left <= picRange.Left + picRange.Width _ And objPic.Top >= picRange.Top And objPic.Top <= picRange.Top + picRange.Height Then objPic.Delete Exit For End If Next picPath = ImagePath & codeRange.Value & ".jpg" If Dir(picPath, vbNormal) = "" Then picRange.Cells(1, 1).Value = "画像がありません" Else picRange.Select Sheets(1).Pictures.Insert(picPath).Select '画像ファイルの挿入 With ActiveSheet.Pictures(ActiveSheet.Pictures.Count).ShapeRange .LockAspectRatio = msoFalse .Parent.Visible = msoTrue .Left = picRange.Left .Top = picRange.Top .Height = picRange.Height .Width = picRange.Width End With picRange.Cells(1, 1).Value = "" End If Application.EnableEvents = True End Sub

  • 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でも、セルの右端にはスナップしてくれないようです。

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

    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

  • コンボボックスのダウンリストの行

    フォームツールのコンボボックスを大量に作ろうと考えています。 以前にコントロールツールで作ったのですが結構重い為、今回フォームツールで作成したいのです。 その際、ドロップダウンリストの行を増やすにはどうしたらいいでしょうか? コントロールツールの時は下記コードで Object.ListRows = 20 で増やすことができたのですが、フォームツールの場合サポートしていませんとでます。 VBAで行を増やす事はできないでしょうか? 素人質問ですみません。 Sub Sheet1() Dim sh As Worksheet Set sh = Worksheets("Sheet1") For i = 1 To 100 l = sh.Cells(i, "E").Left t = sh.Cells(i, "E").Top w = sh.Cells(i, "E").Width h = sh.Cells(i, "E").Height With sh.OLEObjects.Add(ClassType:="Forms.ComboBox.1") .Left = l .Top = t .Width = w .Height = h .ListFillRange = "担当者" .Object.ListRows = 20 .LinkedCell = "E" & i .PrintObject = False End With Next i End Sub

  • 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で動的にコンボボックスを作成

    一枚のシートに動的に複数のコンボボックスとコマンドボタンを生成しようとしています。 標準モジュールのループでコントロールを生成していますが、一周は上手く回るのですが、2週目から コンボボックス作成MakeComboの中のここでおちると記載している部分でエクセルのアプリケーションエラーに なってしまい、エクセルが落ちてしまいます。 With clsExcel.objWs 'コンボボックスの位置を指定 Dim cmbPos As Range Set cmbPos = .Range(.Cells(k, 4), .Cells(k, 4)) 'コンボボックスを作成 Set m_objOLE_C = .OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False,DisplayAsIcon:=False, _ Left:=cmbPos.Left, Top:=cmbPos.Top, Width:=63, Height:=15) End With Dim objCmb As ComboBox Set objCmb = clsExcel.objWs.OLEObjects(m_objOLE_C.name).Object objCmb.Locked = False With objCmb '--コンボボックスに初期値をセット .AddItem "計", 0 .AddItem "推", 1 .AddItem "確", 2 .AddItem "積", 3 '-------------------------------------------- ' For j = 0 To 3 ' If strData = .List(j) Then ' .ListIndex = j '<-----ここでおちる ' Exit For ' End If ' Next j '-------------------------------------------- End With Set cmbPos = Nothing Set objCmb = Nothing Set m_objOLE_C = Nothing End Sub

専門家に質問してみよう