• ベストアンサー

【Excel VBA】チェックボックスの挿入位置

Excel2003を使用しています。 Sheet2のN1セルに入力されている番号と同じ番号が入力されているセルをSheet1のA列(A11:A200)から探して、その行のB列にチェックボックスを挿入したく、下記のようにコードを書いてみましたが、チェックボックスの挿入と挿入位置等(?部分)をどのように書いたらいいのかわかりません。 ---------------------------------------- Sub test1() Dim myStr As String Dim myRange As Range myStr = Sheets("Sheet2").Range("N1").Value Set myRange = Sheets("Sheet1").Range("A11:A200").Find(myStr) If myRange Is Nothing Then Exit Sub Else  '?←この部分がわかりません…。 End If End Sub ---------------------------------------- 実際にチェックボックスを挿入してマクロの記録もとってみたのですが、あまり参考にすることができず、質問させていただいた次第です。 チェックボックスは、コントロールツールボックスのチェックボックスを使用したいのですが…。 よろしくお願いします。

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

挿入位置のLeftや、Topのプロパティをどう設定すれば良いか判らないと言うことですかね? 以下はあくまでも例ですが、こんな感じで判りますか? ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, DisplayAsIcon:=False, Left:=myRange.Offset(, 1).Left, Top:=myRange.Top, Width:=106.5, Height:= 12.75).Select

rx-z5815
質問者

お礼

回答ありがとうございます。 > 挿入位置のLeftや、Topのプロパティをどう設定すれば良いか判らないと言うことですかね? そうです! 質問文がわかりづらかったようで、スミマセン(^_^;) 例を示していただいたおかげで、マクロの記録で得たコードも理解することができました。 ありがとうございました。

その他の回答 (2)

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.3

[回答番号:No.2] の DOUGLAS_ です。 >置き換えて考えなければなりませんので、 ・・・・・・・ >のような設定になります(実際の結果に即してお考えください)。 の部分に関しては、[回答番号:No.1] の mt2008 さんがお書きのような Left:=myRange.Offset(, 1).Left Top:=myRange.Top Width:=myRange.Offset(, 1).Width Height:=myRange.Height の方がよいですかね(ひょっとしてまた違ってるかも知れませんが、類推してお考えください)。

rx-z5815
質問者

お礼

再度のアドバイスありがとうございます。 今回は、LeftとTopに関しては、Offset を使用し、WidthとHeightに関しては、DOUGLAS_ さんの添付してくださった図を参考にさせていただきながら、数値で設定してみたところ、希望通りのことができました。 ご丁寧に何度もありがとうございました。

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.2

 例えば C3 セル「Range("C3")」に チェック ボックス 「CheckBox1」を挿入しようとした場合には、Left・Top・Width・Height の各プロパティの値は、 Left:=Range("A3:B3").Width Top:=Range("C1:C2").Height Width:=Range("C3").Width Height:=Range("C3").Height になります(図参照)。  お示しの Sub test1() の場合は、C3 セルを myRange の右のセル? に置き換えて考えなければなりませんので、 Left:=Range("A1").Width Top:=Range(Range("A1"), myRange.Offset(-1)).Height Width:=myRange.Offset(-1).Width Height:=myRange.Height のような設定になります(実際の結果に即してお考えください)。

rx-z5815
質問者

お礼

回答ありがとうございます。 丁寧に説明してくださったおかげで、より理解することができました。 Left・Top・Width・Heightの各プロパティは、こういうことを示していたのですね。 なんとなくわかっていた程度でしたので、図を添付していただいたことも、初心者の私にとっては、とてもわかりやすく、助かりました。 ありがとうございました。

関連するQ&A

専門家に質問してみよう