- ベストアンサー
エクセルVBAで結合セルの真ん中にチェックボックスを作成する方法
- エクセルVBAを使用して、結合セルの真ん中にチェックボックスを作成する方法を教えてください。
- プログラムの中で、結合セルを指定し、そのセルの真ん中にチェックボックスを追加する処理を行っています。
- チェックボックスの表示や設定に関しても説明しており、塗りつぶしや線の設定なども行うことができます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> Set cbx = .CheckBoxes.Add(Left:=ss.Left, Top:=ss.Top, _ > Height:=ss.Height, Width:=ss.Width) を以下のように修正すれば「ほぼ」セルの中央に表示されると思います。 Set cbx = .CheckBoxes.Add(Left:=0, Top:=0, Height:=0, Width:=0) cbx.Top = ss.Top + (ss.MergeArea.Height - cbx.Height) / 2 cbx.Left = ss.Left + (ss.MergeArea.Width - cbx.Width) / 2 補足説明) ・「Height:=0, Width:=0」チェックボックスのサイズが分からないので一番小さなサイズを設定 しています。 ・実際は0にはならず、最低限のサイズになります。
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
列幅のみ問題にしてみます。エクセルでは列幅ColumnWidthは文字数で表されるらしいのですが、 http://d.hatena.ne.jp/Nikki_A/20080104 これらとセルのLEFTなどの単位(ピクセル、ポイントなどの関係)の合わせ方が小生の力不足の苦手分野で、自信はありませんが、やってみました。 チェックボックスを動的に作成するのでなく、簡単のために手動で設けて、横位置のみ追求してみました。 チェックボックスの動的作成も、VBA程度では、あまり話題にしません。 チェックボックスの幅は、画面で見た目でなく、デザインモードでのハンドルの四角の横幅を問題にせざるを得ないです。チェックボックスのCattionの文字数で考えると、違ったものになります。 下記は結合セルの最左セルを問題(既定)にして、固定してます。 何処に(どの列に)結合セルがあるか不定の場合で捉えるのは、 http://officetanaka.net/excel/vba/tips/tips50.htmなど見てください。 結合セルのセル数は自動で捉えます。 このへんのコードは役立つかも。 Sub test01() buf = 0 Set mcl = Worksheets("Sheet1").Range("C10") If Range("C6").MergeCells Then For Each cl In mcl.MergeArea buf = buf + cl.ColumnWidth MsgBox cl.Address Next MsgBox "結合セルセル合計文字数 " & buf & Application.InchesToPoints(buf) z = buf * 72 / 8.38 x = mcl.Left MsgBox mcl.Address & "セルLEFT " & Application.InchesToPoints(x) y = Worksheets("Sheet1").CheckBox1.Width MsgBox "チェックボックス幅 " & Application.InchesToPoints(y) MsgBox (z - y) / 2 Worksheets("Sheet1").CheckBox1.Left = x + (z - y) / 2 'Application.InchesToPoints(Worksheets("Sheet1").CheckBox1.Width)) / 2 Else MsgBox mcl.Address & "-->結合されていません" & vbCrLf End If End Sub ーーーー 普通のやり方は、図形を捉える斜め矢印でチェックボックス群を捉え、図形の調整ー配置整列で(そしてVBAでやるならそのVBAマクロ記録などで知る)やるのではないでしょうか。質問は凝りすぎで、問題を難しくしているように思います。
お礼
ご丁寧にありがとうございました。 勉強になりました。
お礼
はい。 ほぼ真ん中でまったく問題ありません。 私もほぼ真ん中にしか実際無理なんじゃないかと思っていたところです。 シンプルな方法でご教授いただきまして本当にありがとうございました^^