
エクセルVBAで結合セルの真ん中にチェックボックスを作成する方法を教えて下さい。
数個下の質問で結合されたセルに一つだけチェックボックスを作る方法を質問した者です。
度々すみません。
今度の質問ですが、結合したセルの上下左右の真ん中にチェックボックスを作る方法を教えていただけないでしょうか?
現在のプログラムは下記のようになっております。
宜しくお願い致します。
Dim ss As Excel.Range, cbx As CheckBox
With Selection.Parent
For Each ss In Selection
If (ss.MergeArea.Column = ss.Column) * (ss.MergeArea.Row = ss.Row) Then
Set cbx = .CheckBoxes.Add(Left:=ss.Left, Top:=ss.Top, _
Height:=ss.Height, Width:=ss.Width)
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
.Line.Weight = 0.25 '線幅
.Line.ForeColor.RGB = RGB(0, 0, 0) '線色
End With
End If
Next
End With
No.1ベストアンサー
- 回答日時:
> 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にはならず、最低限のサイズになります。
はい。
ほぼ真ん中でまったく問題ありません。
私もほぼ真ん中にしか実際無理なんじゃないかと思っていたところです。
シンプルな方法でご教授いただきまして本当にありがとうございました^^
No.2
- 回答日時:
列幅のみ問題にしてみます。
エクセルでは列幅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マクロ記録などで知る)やるのではないでしょうか。質問は凝りすぎで、問題を難しくしているように思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
エクセル チェックボックスのセンタリング
Excel(エクセル)
-
セルの中にもっとも簡単にチェックボックスを置く方法は?
Excel(エクセル)
-
エクセル・VBA CheckBoxのオブジェクト名に変数を使うことは可能でしょうか?
Excel(エクセル)
-
-
4
チェックボックスの箱のサイズとフォントサイズは変更できるの?
Excel(エクセル)
-
5
選択したセル範囲に入っているチェックボックスを全てOFFにしたい
Excel(エクセル)
-
6
Excel 書式を関数で判断。
Excel(エクセル)
-
7
エクセルのマクロで結合セルに値を貼り付けたい
Excel(エクセル)
-
8
EXCEL VBA オートシェイプナンバーのリセット
Visual Basic(VBA)
-
9
エクセルVBAで、シート上で結合されたセルに一つだけチェックボックスを
Visual Basic(VBA)
-
10
【VBA】シート上の複数のチェックボックスのうちどれか一つでも変更した場合のイベント
Visual Basic(VBA)
-
11
Excel チェックボックスにチェックが付いた複数のセルを別のシートにコピー・貼り付けするマクロを教
Visual Basic(VBA)
-
12
【Excel VBA】CSV取込時、数字の先頭の0を消えないようにするには?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
【VBA】指定したセルと同じ値で...
-
5
EXCELのVBA-フィルタ抽出後の...
-
6
セル色なしの行一括削除
-
7
Excel vbaで特定の文字以外が入...
-
8
エクセルの複数データーをダブ...
-
9
screenupdatingが機能しなくて...
-
10
Application.Matchで特定行の検索
-
11
Excelで指定した日付から過去の...
-
12
EXCELで変数をペーストしたい
-
13
B列に特定の文字列が入っている...
-
14
Application.EnableEvents = Fa...
-
15
Excel VBAで、 ヘッダーへのセ...
-
16
Excel VBA、 別ブックの最終行...
-
17
エクセルマクロで結合セルに格...
-
18
ExcelVBAで、選択範囲内で同じ...
-
19
VBAマクロで結合セルを含む列に...
-
20
RC表示に変数を入れる
おすすめ情報
公式facebook
公式twitter