プロが教えるわが家の防犯対策術!

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

A 回答 (2件)

結合セルだった場合、左上のセルにだけチェックボックスを作成する……で良いのかな?



For Each ss In Selection の下に
If (ss.MergeArea.Column = ss.Column) * (ss.MergeArea.Row = ss.Row) Then

Next の上に
End If

を入れて見てください。
.MergeArea.Column、.MergeArea.row は各セルが属する結合セルの基準となる列と行(左上)を返します。
IF文でそのセルの列・行が結合セルの左上と一致した場合に処理を先に進めます。
また、そのセルが結合セルで無い場合は、左上セルの位置は列・行と同じ値になりますので、その場合も処理を先に進めます。
    • good
    • 1
この回答へのお礼

ありがとうございました。
無事結合セルの一番左上に1つだけチェックボックスを作成する事が出来ました。

本当に助かりました。

又何かわからない事があったらお世話になると思いますが宜しくお願い致します。

お礼日時:2010/06/11 11:39

以前紹介されていたプログラムではなく、あなたが作った「セルが複数結合されている場合、結合されているセル分チェックボックスが出来てしま」うプログラムを提示しましょう。

この回答への補足

上記の書き込みは業務で使う為のものなので、会社から昼間に投稿しました。今帰宅しまして、手元にそのエクセルファイルがなく、尚且つ素人なので正確にはわかりかねるのですが、

Dim ss As Excel.Range, cbx As CheckBox
With Selection.Parent
For Each ss In Selection
Set cbx = .CheckBoxes.Add(Left:=ss.Left, Top:=ss.Top, _
Height:= 0,58, Width:= 0.82)
cbx.Text = ""
RowCnt = Selection.Row        '選択されているセルの行をRowCnt変数で表現
cbx.LinkedCell = "A" & RowCnt    '選択されているセルのA列にチェックボックスを作成
cbx.Display3DShading = False     '3D表示なし
With cbx.ShapeRange
.Fill.Solid
.Fill.Visible = msoFalse       '塗りつぶしなし
.Line.Visible = False         '線on,off(Trueにしたかも・・・)
.Line.Weight = 0.25          '線幅
.Line.ForeColor.RGB = RGB(0, 0, 0)  '線色
End With
Next
End With

再度昼間私が会社で調べたサイトを調べ直し、こんな感じで会社のエクセルファイルのVBAに記載したであろうという内容を記載しました。

よって、多少違うところ(間違ってるところ)もあるかと思いますが、上記の感じです。

宜しくお願いします。

補足日時:2010/06/10 21:53
    • good
    • 0

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