• ベストアンサー

exce VBA オプションボタンのリンクコピー

exel2000を利用しています。 チェックボタンのリンクコピーを下記プロシージャで利用していますが、オプションボタンだと、これをoptionbutton と変更して出きないみたいで、どのように変更すれば出来るか、ご教授願いたくお願いいたします。 Sub sample() Dim cb As CheckBox For Each cb In ActiveSheet.CheckBoxes cb.LinkedCell = cb.TopLeftCell.Address Next cb End Sub

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

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

その文脈でマクロを書くなら sub macro1() dim o as optionbutton for each o in activesheet.optionbuttons o.linkedcell = o.topleftcell.address next end sub といった具合になりますが,既出回答にもあるようにそういうマクロを書いてもあまり意味がありません。 主なポイントは次の2点です 1.オプションボタンは所属するグループの中でリンクするセルを共有する  (後から付けたリンクセルの設定が他のオプションボタンの設定を上書きする) 2.オプションボタンをグループに1つ配置しても,それ単独で付けたり消したりは原則出来ない  (チェックボックスのようには働かない) で。 実際の所で何をしたいのか不明瞭ですが,試しにこんなマクロを付けてみます。 1.フォームのオプションボタンをグループボックスは使わずに1個配置する 2.リンクするセルの設定は「しない」まま,右クリックして次のマクロを登録する sub オプション1_Click()  with activesheet.shapes(application.caller)  .topleftcell.value = not .topleftcell.value  .controlformat.value = -.topleftcell.value  end with end sub 3.オプションボタンを載せたセルごとコピーして複製する

puyopa
質問者

お礼

回答ありがとうございます。勉強になりました。 回答者様のように、スラスラとコードがかける様になれるといいなぁって思います。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.1

>オプションボタンだと、これをoptionbutton と変更して出きないみたいで、どのように変更すれば出来るか 具体的にどのようにリンクさせることを期待しているのでしょうか? 基本的にオプションボタンのリンクするセルは同じグループでは1つのセルになりますので(いずれか1つしかチェックできないため)、それぞれのオプションボタンを別のセルにリンクするにはグループボックスで囲む必要があります。

puyopa
質問者

お礼

回答ありがとうございます。 グループボックスを理解せずに質問していました。 不明確な質問ですみませんでした。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

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

  • 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で作ったCheckBoxesの名前を知りたい。

    VBAでCheckBoxeを3個作りsub checkをコールできる用にしました。 このsub checkのなかで今どのCheckBoxeがクリックされたか調べたいのですがどうすればいいでしょうか、 Sub main() With ActiveSheet.CheckBoxes.Add(10, 10, 20, 20) .Name = "CheckBox " & .Index .Caption = "" .OnAction = "check" End With With ActiveSheet.CheckBoxes.Add(10, 50, 20, 20) .Name = "CheckBox " & .Index .Caption = "" .OnAction = "check" End With With ActiveSheet.CheckBoxes.Add(10, 100, 20, 20) .Name = "CheckBox " & .Index .Caption = "" .OnAction = "check" End With End Sub Sub check() '// クリックされたcheckboxの番号が知りたい// End Sub

  • エクセルVBAで For Each をまとめる方法

    ワークシート上にフォームで作成したチェックボックス、グループボックス、オプションボタンだけをまとめて削除するVBAです。 以下のように、種類ごとに分けて記述することは出来るのですが、3種類まとめて書く方法がわかりません。 CheckBoxes,GroupBoxes,OptionButtons と並べてもだめのようです。 ご教示ください。 Sub delete_test() With ActiveSheet For Each cb In .CheckBoxes cb.Delete Next For Each gb In .GroupBoxes gb.Delete Next For Each ob In .OptionButtons ob.Delete Next End With End Sub

  • VBA/フォームのオプションボタンのLinkledCellをクリア

    ワークシート上に十数個のオプションボタンがあります。このボタンのリンクするセルを一度に消去するVBAを書いたのですが、エラーになってしまいます。どこがいけないのでしょうか? Sub test01() Sheets("質問書回答欄").OptionButtons.LinkedCell.ClearContents End Sub Sub test02() With Sheets("質問書回答欄") For Each ob In .OptionButtons ob.LinkedCell.ClearContents Next End With End Sub

  • Excel VBA 複数あるオプションボタンの処理

    excel VBAで、複数あるグループ内のオプションボタンを、グループ別にまとめてoffにする方法を探しております。 下のcodeではsheet上のすべてのオプションボタンをoffに出来ますが、グル-プ別にしたいのです。 In ActiveSheet.グループ1.OLEObjectsみたいに(これはNGでした)。 Dim myObj As OLEObject For Each myObj In ActiveSheet.OLEObjects If myObj.progID = "Forms.OptionButton.1" Then  myObj.Object.Value = False End If 宜しくお願い致します。

  • VBAでオプションボタンを透過

    ワークシート上にOLEオブジェクトのオプションボタンを設置するため、以下のようなマクロを書きました。 意図したように作動するのですが、一箇所だけ不具合があります。 .Object.BackStyle = fmBackStyleTransparent と、透過に設定してるのですが透過してくれません。(エラーにもなりません。) どこがおかしいのでしょうか? Sub test02() Dim n As Long, i As Long Dim myRng As Range With ActiveSheet For n = 3 To 5 For i = 3 To 10 Set myRng = .Cells(i, n) Set opt = .OLEObjects.Add(ClassType:="Forms.OptionButton.1", _ Left:=myRng.Left + 2, Top:=myRng.Top + 2, Width:=myRng.Width * 0.8, Height:=myRng.Height * 0.9) opt.LinkedCell = myRng.Offset(, 4).Address opt.Object.Value = False opt.Object.GroupName = "OptG" & i opt.Object.Caption = Choose(n - 2, "Yes", "No", "N/A") opt.Object.BackStyle = fmBackStyleTransparent Next i Next n End With End Sub

  • Excel VBA オプションボタンについて

    こんばんは オプションボタンが5つあり、 登録ボタンが1つあるユーザーフォームを作りました。 このオプションにチェックを入れずに登録ボタンを押したときに 「必ず選択してください。」とメッセージを表示し、再度入力させるようにしたいのですが、どうしたらよいのでしょうか。 Excelのバージョンは2003です。 調べたところ (1)で動きそうだ。ということが判ったのですがチェックを入れ値がtrueになるとエラーが発生して止まってしまいます。(理由がわかりません) Private Sub commandbutton2_click() Dim opt As ControlFormat, flg As Boolean flg = False For Each opt In frame1.Controls If opt.Value = True Then '←ここの行でtrueだった場合のエラーが発生してしまう。 flg = True Selection.Value = opt.Caption End If Next Unload userform1 End Sub (2)この方法で何とか動いたのですが、初めの方に書いたとおり、オプションボタンが選択されずに登録ボタンが押された場合、チェックするように促すメッセージを表示する方法がわかりません。また、できればユーザーホームの×ボタンを押せなくする方法もしくは、閉じられた場合にマクロを抜けるようにするにはどうしたらよいのでしょうか。宜しくお願い致します。 Private Sub commandbutton1_click() Dim i As Integer For i = 1 To 5 If Me.Controls("optionbutton" & i).Value = True Then Selection.Value = Me.Controls("optionbutton" & i).Caption End If Next i Unload userform1 End Sub

  • フォームの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の使い方について思い違いをしているのでしょうか? ご教示をお願いいたします。

  • (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に変更したく考えております。 何卒よろしくお願い申し上げます。

専門家に質問してみよう