• ベストアンサー

エクセルVBAでオプションボタンのセル内配置

エクセル2000です。 シート上に「フォーム」のオプションボタンを配置する際、自動記録を取ると ActiveSheet.OptionButtons.Add(2.25, 2.25, 48, 16.5).Select のように、座標表示になりますが、これを仮に、A1セルやA2セルに配置したい場合、(行の高さ等はシートにより異なるものとします・・・つまり座標が使えない場合)どのような記述になるのでしょうか?

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

  • ベストアンサー
回答No.2

> できればセレクトしないでやりたいのですが・・・・。 では、セルの位置に合わせる方法を Sub test01() For n = 1 To 10 mlft = Cells(n, 1).Left mtp = Cells(n, 1).Top Set opt = ActiveSheet.OptionButtons.Add(mlft, mtp, 48, 16.5) opt.Name = "Opt" & n opt.Characters.Text = "Opt" & n Next n End Sub

error123
質問者

お礼

ありがとうございます。 やってみました。 面白いですね! なるほど、 mlft = Cells(n, 1).Left mtp = Cells(n, 1).Top こうやってセルの座標が取得できるんですね。勉強になりました。

その他の回答 (4)

  • WWolf
  • ベストアンサー率26% (51/192)
回答No.5

言い忘れましたが、オプションボタンを付けたフォームを作ってしたほうが簡単で融通もききやすいしロジックも簡素で応用もやりやすいですよ。

error123
質問者

お礼

ありがとうございます。

  • WWolf
  • ベストアンサー率26% (51/192)
回答No.4

シート1のコードに下記を貼り付けしてみてください。 ベタベタですが、取り合えずこんな感じですか? Public OpNa1, OpNa2, OpVa1, OpVa2, OlRow Sub Worksheet_SelectionChange(ByVal Target As Range) Dim ItRow, It1Row, ItCol, Ans s = Target.Address If Target.Column = 1 Then If OpNa1 <> "" Then ActiveSheet.Shapes(OpNa1).Select OpVa1 = Selection.Value ActiveSheet.Shapes(OpNa2).Select OpVa2 = Selection.Value End If a = Target.Row a1 = a + 1 b = 4 'D列 For i = 1 To a - 1 ItRow = ItRow + Cells(i, 1).Height Next For i = 1 To a1 - 1 It1Row = It1Row + Cells(i, 1).Height Next For i = 1 To b - 1 ItCol = ItCol + Cells(1, i).Width Next If OlRow <> a And OpVa1 < 0 And OpVa2 < 0 Then ActiveSheet.Shapes(OpNa1).Delete ActiveSheet.Shapes(OpNa2).Delete End If If OpNa1 <> "" Then If OpVa1 = 1 Or OpVa2 = 1 Then If OpVa1 = 1 Then Ans = "Yes" Else Ans = "No" End If Cells(OlRow, 4).Value = Ans ActiveSheet.Shapes(OpNa1).Delete ActiveSheet.Shapes(OpNa2).Delete End If End If ActiveSheet.OptionButtons.Add(ItCol, ItRow, 48, 16.5).Select OpNa1 = Selection.Name ActiveSheet.OptionButtons.Add(ItCol, It1Row, 48, 16.5).Select OpNa2 = Selection.Name Range(s).Select End If ActiveSheet.Shapes(OpNa1).Select OpVa1 = Selection.Value ActiveSheet.Shapes(OpNa2).Select OpVa2 = Selection.Value Range(s).Select OlRow = a End Sub

error123
質問者

お礼

ありがとうございます。 わたしには高度すぎて・・・ 勉強します。

  • WWolf
  • ベストアンサー率26% (51/192)
回答No.3

オプションボタンを配置させる理由になんらかの座標が存在するはずですから、例えばA列の3(A3)がアクティブになればC3にオプションボタンをつけるなど・・・ そのようなイメージで補足お願いします。 これが分れば質問者さんの思いの通りのロジックが回答できるとおもいますので。

error123
質問者

お礼

ありがとうございます。 やりたいことはこういうことなんです。 A列のセルに設問を入れます。 D列がYes、Noのオプションボタンとなります。 仮に設問のあるA5をクリックしたら、D5とD6にオプションボタンがふたつともOFFの状態で出現します。 D5をYES、D6をNoとします。 この二つをグループボックスで囲みます。 どちらかを選ぶと、D5に「Yes」または「No」が表示され、ボタンは消え、次にA8セルに質問が浮かび上がり、D8とD6にオプションボタンがふたつともOFFの状態で出現します。 以下、10回ほど繰り返します。

  • hogehage
  • ベストアンサー率50% (54/107)
回答No.1

自分の場合は、こうしています。 1.ActiveSheet.OptionButtons.Add(0, 0, 48, 16.5).Select 2.Selection.Cut 3.Range("D7").Select  ActiveSheet.Paste 1.とりあえず、一番上の左に配置して 2.切り取って 3.貼り付け では、どうでしょうか?

error123
質問者

お礼

なるほど、セルをセレクトして貼り付けるのですね。ありがとうございます。 ただ、できればセレクトしないでやりたいのですが・・・・。

関連するQ&A

  • Excelで指定のセル上に図を配置したい

    Excel VBAで、シート上に図(四角形)を配置しようと思ってます。 イメージ的には、ALTキーを押しながらセルとぴったりフィットする図形(四角形)を作成したいのですが、マクロで生成したコードを見ると下記のように座標での指定になってます。 ActiveSheet.Shapes.AddShape(msoShapeRectangle, 102#, 210#, 76.5, 15#).Select もしこれをセルで指定する方法がありましたら教えて下さい。宜しくお願いします。

  • エクセルVBAのオプションボタンがうまくいきません 

    エクセルのVBAでフォームをつくり 3つのオプションボタンを配置し チェックした項目のとき、指定したセルに「レ」の印を書き込ませたいのですが、うまくいきません。 同じフォーム内のテキストボックスやコンボボックスの内容はうまくセルに書き込めるのですが・・・ オプションボタンのグループは設定してあります。 下のように記述したのですが、なぜ思うように動作しないか教えてください。 If オプション(3) = True Then ActiveCell.Value = "レ" ElseIf オプション(1) = True Then Range("H21").Value = "レ" ElseIf オプション(2) = True Then Range("H23").Value = "レ" End If

  • EXCELのVBAセル操作について

    こんばんは、エクセルのセルの操作(vba)についてお知恵をお貸しください。 シートBに配置してあるボタンをクリックすると、シートAの”A10”に飛ぶVBAを作りました。 ここで、問題になったのがシートAの5行目に行を挿入した時に シートBに配置してあるボタンをクリックすると、シートAの”A10”に飛ぶのですが A10の内容は行を追加した影響でA9の内容が表示されています。 手作業でA10をA11にすればいいのですが、 このシートAには、このようなモジュールがたくさん貼ってありA10より下の全て行を 手作業で修正するのはしんどいので何かいい案はありますでしょうか? Sub a10モジュール() Sheets("worksheeta").Select Range("A10").Select End Sub

  • エクセルVBAでオプションボタンを無効にする方法

    フォームで作成したオプションボタンを一定の条件下で無効にするにはどのような記述をすればよいのでしょうか? たとえばsheets("Sheet1").Range("A1")がFalseのときにShapes("Option Button 1")を無効にするという記述です。

  • エクセルVBA

    お世話になります。 マクロの記録で、下記のようにC列を基準に表内を並べ替えるように記録されました。 Range("C4").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("AQ5:AQ39" _ ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").Sort .SetRange Range("A4:EJ39") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With ご教授いただきたい点が2点あります。 1. end行 (今のところ39行め) が毎回変わっても その位置を認識して、対応するようにしたいのですが、 どのように書き換えるとよいのでしょうか? C4は、タイトル行で、毎回固定です。 やはり、毎回最終行の次の行 (今回のケースでいうと、40行目に)に、 endと手作業で入力する方法しかないでしょうか? それしかない場合は、その記述の仕方をお願いします。 例えば、最大500行もあればいいので、途中の空白セルは、無視して 並べ替えをしてくれる記述などで教えていただけるとありがたいのですが・・・ 2. 必ず、active なシートを選択しておいてから、マクロを実行するとして、 シート名の sheet1 も可変にしたいです。 よろしくお願いします。m(_ _)m

  • VBAでオプションボタンなどそれぞれの数を調べたい

    エクセル97です。 ワークシート上にテキストボックス、コンボボックス、オプションボタン、ラベルが配置されています。 すべて、ツールバーのフォームから出したものです。 これら全部の数をもとめるには Sub TEST() Dim x As Integer x = ActiveSheet.Shape.Count MsgBox x End Sub これで出てきますし、テキストボックスならshapesをTextboxes、ラベルならLabelsに変えればいいのですが、オプションボタンやコンボボックスの場合、どう変えれば良いのかわかりません。教えてください。特にオプションボタンは数が多くて困っています。

  • VBAでオプションボタン変更によって・・・

    エクセルVBAのユーザーフォーム内にあるコンボボックス3つを選択することによりデータ入力を行っています。 この度選択肢を増やすことになり、オプションボタンを2つ追加しようと思っています。 オプションボタンはどちらかを決定することで、コンボボックスの選択内容を変更する予定です。 コンボボックスは大中小分類としており、シート2から抽出したものをシート1に落としている現状をオプションボタン新設により、ボタン1は従来通りシート2から、ボタン2選択時はシート3にあるリストからコンボボックスへ繁栄させようとしたいのですが、方法が分かりません。 どなたか、教えていただけると助かります。 よろしくお願いします。 現在のコードを下記に記します。 Private Sub UserForm_Activate() With UserForm3 .OptionButton1 = True *この段階でボタン2を選択時は、シート3にあるリストよりコンボボックスの内容を抽出したい。 以下中小分類も同様としたい。 .ComboBox1.RowSource = "シート2!A3:A15" .ComboBox1.SetFocus End With End Sub Private Sub ComboBox1_Change() Dim myLlist As String myLlist = ComboBox1 With UserForm3 .ComboBox2.Text = "" .ComboBox3.Text = "" Select Case myLlist Case "大1" .ComboBox2.RowSource = "シート2!B21:B26" Case "大2" .ComboBox2.RowSource = "シート2!B27:B28" End Select End With End Sub Private Sub ComboBox2_Change() Dim myMlist As String myMlist = ComboBox2 With UserForm3 .ComboBox3.Text = "" Select Case myMlist Case "中1" .ComboBox3.RowSource = "シート2!C101:C111" Case "中2" .ComboBox3.RowSource = "シート2!C121:C124" End Select End With End Sub Private Sub OKボタン_Click() With UserForm3 ActiveSheet.Unprotect 行 = ActiveCell.Row 列 = ActiveCell.Column Cells(行, 列) = UserForm3.ComboBox1.Value Cells(行, 列 + 1) = UserForm3.ComboBox2.Value Cells(行, 列 + 2) = UserForm3.ComboBox3.Value ActiveSheet.Protect End With End Sub

  • オプションボタンで○を描いたり消したり

    いつもありがとうございます。 今度は下記内容で悩んでいます。 どなたか、助けて下さい。 (したい事) オプションボタン1を押す セルJ58に○をいっぱいにオートシェイプで描く 同時にセルJ62のオートシェイプがあれば消す オプションボタン2を押す セルJ62に○をいっぱいにオートシェイプで描く 同時にセルJ58のオートシェイプがあれば消す これと同じ作業ができるシートを10枚作りたいのですが・・・ 各シートはリンクせず、シート内にそれぞれ2つのオプションボタンで対応したいのです。 とりあえず、下記コードを作ったのですが、他のPCですとセルからづれてしまうので セル内に収まるような最大の○を付したいので、どなたかご教授お願い致します。 Sub (1)オプション1_Click() ActiveSheet.Unprotect ActiveSheet.Shapes.AddShape(msoShapeOval, 185, 628, 45.5, 14.5).Select Selection.ShapeRange.Line.Weight = 1 Selection.ShapeRange.Fill.Visible = msoFalse With ActiveSheet For Each ob In .DrawingObjects If Not Intersect(ob.TopLeftCell, .Range("J62")) Is Nothing Then ob.Delete End If Next End With Range("J58").Select ActiveSheet.Protect End Sub

  • VBAについて

    マクロで指定したセルの中央にボタンを配置したいです。 例 セルC3にボタンを配置する方法 ActiveSheet.Buttons.Add(X,X,X,X).Select Xの部分をどう書けばよいのでしょうか?

  • エクセル オプションボタン 2>1セル

    Excel 2003 です。     お詳しい方だと簡単と思うのですが・・・オートシェープでボタンらしい物を選び、オプションボタンとして使いたいのですが、その後どうやって動作させたらいいかわかりません。  ・オートシェープで作ったボタンを二つ(それぞれ東日本50Hz、西日本60Hzと表示)シートのどこかに配置  ・どちらかをクリックする  ・ひとつのセル(例えばA10)にクリックしたボタンの値  例 (東日本クリック>A10に 50) (西日本クリック>A10に 60) が入力される  といったものです。  なるべく簡単なマクロかVBAだといいのですが・・・  よろしくお願いいたします。 _(__)_   

専門家に質問してみよう