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

このQ&Aのポイント
  • VBAを使用してExcelで複数のチェックボックスを設置する方法について教えてください。
  • ループ処理で太字のセルの右端にチェックボックスを設置したい場合、現在はセルの左端に設置されてしまいます。
  • 設置後にAlt+D&Dをしてもセルの右端にスナップしてくれないようです。
回答を見る
  • ベストアンサー

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

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

  • ベストアンサー
noname#203218
noname#203218
回答No.1

下記方法でも良いでしょうか。 With r ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, _ DisplayAsIcon:=False, Left:=.Left + .Width - 10, _ Top:=.Top + .Height / 2 - 4.6, Width:=10, Height:=12).Select End With Left:=.Left + .Width - 10の10の値を変化させるとセルの横位置変更が可能です。 Top:=.Top + .Height / 2 - 4.6の4.6の値を変化させるとセルの縦位置変更が可能です。 チェックボックスは添付図のようになります。

BlackYoshi
質問者

お礼

ご回答ありがとうございます。 フォームの方のチェックボックスのプロパティでは、 試してみた限りでは小数点以下の値は繁栄さてない(?)ようなので、 整数値の範囲で調整しましたが、納得できるように設置できました。

その他の回答 (1)

回答No.2

こんにちは。 #1さんのでもよいのですが、ご質問者さんは、フォーム側のオブジェクトをお使いのようなので、 それに合わせれば、このようになるかと思います。確かに、数多くのチェックボックスを設置する場合は、フォームの方が何かと便利な部分はあります。それは、それ自体に、イベントを設ける時です。 以下の場合は、  .Text ="" と一つだけですが、  .OnAction ="マクロ名" を入れれば、一度に同じ設定が出来ます。 >.Left の部分を.Left+50 などとしておおよその値で右にずらすしかないのでしょうか。 基本的には、その通りです。チェックボックスの大きさは正確には分からないような気がしますので、結局のところは試してみるしかありません。右の位置そのものは、セルの.Left + .Widthで分かりますから、そこから引き算します。 '// Sub TestAddCheckBoxes()  Dim r As Range  For Each r In Range("B1", Cells(Rows.Count, 2).End(xlUp))   With r    If r.Font.Bold Then     With ActiveSheet.CheckBoxes.Add(.Left + .Width - 15, .Top, .Width, .Height)      .Text = ""     End With    End If   End With  Next r End Sub '//

BlackYoshi
質問者

お礼

ご回答ありがとうございます。 おっしゃる通り自分が設置したいのはフォームの方のチェックボックスでした。 何度か調整して、無事設置できました。 ドラッグ中のAltキーでセルの右端にもスナップしてくれれば便利なのですがね。 .OnAction については全く知らなかったので勉強になりました。 その点についてもお礼申し上げます。

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

  • 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

  • Excel チェックボックスの配置を換えた時

    ご質問させていただきます。 Excel2007を使用しています。 sheet2のA1セルからA190セルまでチェックボックスがあり、下記のmacro1が登録されていました。 そこで、チェックボックスの位置を以下のように変更しました。 sheet2のA1~A10セルまでチェックボックスが10個、その隣のB1~B10セルにsheet1のJ2~J11列への参照式、sheet2のC1~C10セルまでチェックボックスが10個、その隣のD1~D10セルにsheet1のJ12~J21列への参照式、・・・(省略)・・・、sheet2のAK1~AK10セルまでチェックボックスが10個、その隣のAL1~AL10セルにsheet1のJ182~J191への参照式、というふうに変更しました。 変更に伴い、A1~A10セルのチェックボックスには下記のmacro1を登録し、C1~C10セルのチェックボックスには下記のmacro2を登録しました。 問題は次で起こりました。E1~E10セルのチェックボックスに下記macro3を登録したのですが、チェックボックスをONにすると「実行時エラー13 型が一致しません」と表示されてしまいます。デバックボタンを押すと、myCheck.TopLeftCell.Value = Not myCheck.TopLeftCell.Valueが黄色くなります。 そこで、myCheck.TopLeftCell.Value = Not myCheck.TopLeftCell.Valueを削除してE1セルのチェックボックスをONにしてみたところ、なぜかE1セルにSheet1のI22セルの値が表示され、チェックボックスをOFFにしてみたらE1セルに=Sheet1!I22と書かれていることがわかりました。 offsetの数値を色々と試してみたところ、macro3のoffset(0,1)の部分をoffset(0,2)にするとチェックボックスがOFFの時にちゃんとE1セルには=Sheet1!J22と記入されます。 しかし、offset(0,2)の状態でmyCheck.TopLeftCell.Value = Not myCheck.TopLeftCell.Valueを挿入して実行してみたところ、やはり「実行時エラー13 型が一致しません」と表示されてしまいます。 どこをどう直したら良いのか全くわかりません。 教えてください。 よろしくお願いいたします。 Sub macro1()  Dim myCheck As Shape  Set myCheck = ActiveSheet.Shapes(Application.Caller)  myCheck.TopLeftCell.Value = Not myCheck.TopLeftCell.Value  With myCheck.TopLeftCell.Offset(0, 1)   If myCheck.ControlFormat.Value = 1 Then    .Value = .Value   Else    .FormulaR1C1 = "=Sheet1!R[1]C[8]"   End If  End With End Sub Sub macro2() Dim myCheck As Shape Set myCheck = ActiveSheet.Shapes(Application.Caller) myCheck.TopLeftCell.Value = Not myCheck.TopLeftCell.Value With myCheck.TopLeftCell.Offset(0, 1) If myCheck.ControlFormat.Value = 1 Then .Value = .Value Else .FormulaR1C1 = "=Sheet1!R[11]C[6]" End If End With End Sub Sub macro3() Dim myCheck As Shape Set myCheck = ActiveSheet.Shapes(Application.Caller) myCheck.TopLeftCell.Value = Not myCheck.TopLeftCell.Value With myCheck.TopLeftCell.Offset(0, 1) If myCheck.ControlFormat.Value = 1 Then .Value = .Value Else .FormulaR1C1 = "=Sheet1!R[21]C[4]" End If End With End Sub

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

    エクセルで複数の特定セルのどれかにOKの文字が入力されると、 チェックボックスに自動でチェックが入るようにできますか? (A1のセルかB1のセルかC1のセルにOKが表示されると チェックボックスにチェックが自動で入る。) よろしくお願いいたします。

  • 範囲を指定してチェックボックスを削除したい

    Excelのワークシート上にチェックボックスを多数配置しています。 Range("D23:I27")の範囲にあるチェックボックスを除き(←ここは固定したい) 31行目以下のチェックボックスをVBAで削除したいのですが、 そのようなことって可能なのでしょうか。 Worksheets("A").Range("F31").CheckBoxes.Delete などとしてみましたがだめでした。 どなたか教えてください。

  • box の左端と右端に書いた文字の下端を揃えるにはどうすれば

    box の左端と右端に書いた文字の下端を揃えるにはどうすれば よいでしょうか。 <div style="width:200px;"> <span style="float:left;font-size:80%;">左端</span> <span style="float:right;font-size:150%;">右端</span> </div> float を指定しなければ下端は揃っているのですが、 float をつけると下端ではなく上端が揃います。

    • ベストアンサー
    • CSS
  • EXCELのチェックボックスについて

    EXCEL2003を使用しています。 ■質問項目があり、回答する複数のセルにチェックボックスを配置してあります。 A列:質問 B列:回答のチェックボックス C列:回答のチェックボックス D列:回答のチェックボックス : Z列:OK 又は NGと表記したい。 ■各列の回答チェックボックスが全てonになっていたらOK、1つでもoffになっていたらNGと、Z列に表記させたいのですが、どのような式になりますか? ご回答の程、よろしくお願いいたします。

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

  • Excelでチェックボックスを表示したい

    Excel2003を使用しています。 セルに1を入力すると、チェックボックスにチェックされて表示し チェック数をカウントできるようにしたいのですが、どうすればいいでしょうか? チェックボックスの設置はできるのですが、1を入力すると表示させる方法がわかりません。 よろしくお願いします。

  • エクセルVBA チェックボックスで;;

    下記のような表を作っているんです・・・     A   B   C    D    1  日付  名前  評価   2  1日   あ   A   □ 3  2日   い   B   □ 4  2日   う   A   □ 5  4日   え   D   □ というような感じです(まだ右と下は項目いっぱいあります) Dのセルにチェックボックスをつけてチェックが入った物のみを別なシートにコピーしてそのページを印刷させ印刷し終わったら印刷した行の色を変えたいのです。 色々試してみたのですが、チェックボックスのON OFF判断もままならない状況でした;; どなたか宜しくお願いいたします。

専門家に質問してみよう