こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

【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

----------------------------------------

実際にチェックボックスを挿入してマクロの記録もとってみたのですが、あまり参考にすることができず、質問させていただいた次第です。
チェックボックスは、コントロールツールボックスのチェックボックスを使用したいのですが…。
よろしくお願いします。

投稿日時 - 2009-03-16 17:21:17

QNo.4801835

困ってます

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

挿入位置の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

投稿日時 - 2009-03-16 17:56:37

お礼

回答ありがとうございます。

> 挿入位置のLeftや、Topのプロパティをどう設定すれば良いか判らないと言うことですかね?

そうです!
質問文がわかりづらかったようで、スミマセン(^_^;)
例を示していただいたおかげで、マクロの記録で得たコードも理解することができました。
ありがとうございました。

投稿日時 - 2009-03-17 09:55:56

ANo.1

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

[回答番号:No.2] の DOUGLAS_ です。

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

投稿日時 - 2009-03-16 20:33:32

お礼

再度のアドバイスありがとうございます。

今回は、LeftとTopに関しては、Offset を使用し、WidthとHeightに関しては、DOUGLAS_ さんの添付してくださった図を参考にさせていただきながら、数値で設定してみたところ、希望通りのことができました。

ご丁寧に何度もありがとうございました。

投稿日時 - 2009-03-17 10:10:25

ANo.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
のような設定になります(実際の結果に即してお考えください)。

大変申し訳ございませんが、この投稿に添付された画像や動画などは、「BIGLOBEなんでも相談室」ではご覧いただくことができません。 OKWAVEよりご覧ください。

マルチメディア機能とは?

投稿日時 - 2009-03-16 20:17:45

お礼

回答ありがとうございます。

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

ありがとうございました。

投稿日時 - 2009-03-17 10:03:41

あなたにオススメの質問