重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

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

A 回答 (2件)

下記方法でも良いでしょうか。



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の値を変化させるとセルの縦位置変更が可能です。

チェックボックスは添付図のようになります。
「Excelでのチェックボックスの右端への」の回答画像1
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/04/01 18:26

こんにちは。



#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
'//
    • good
    • 0
この回答へのお礼

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

.OnAction
については全く知らなかったので勉強になりました。
その点についてもお礼申し上げます。

お礼日時:2014/04/01 18:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!