Microsoft Access 掲示板

結合したセルを〇で囲む

2 コメント
views

Sub test2()

Dim rng As Range
Dim shp As Shape
Dim Sh1 As Worksheet
Dim checkRange As Range

    Set Sh1 = ThisWorkbook.Worksheets("申請書")
    With ThisWorkbook.Sheets("申請書")
        Set checkRange = .Range("AK23:AL23")

        ' 結合セルが実際に結合されているか確認する
        If checkRange.MergeCells = True Then
           'Debug.Print "結合セルの範囲:" & checkRange.Cells(1).MergeArea.Address
            ' 結合セルの左上隅と、結合セルの幅・高さを取得する
            h = Range("AK23").Top 'セルA1の左上隅から画面上部までの距離をポイント単位で取得します。
            lef = Range("AK23").Left 'セルA1の左上隅から画面左端までの距離をポイント単位で取得します。
            wd = Range("AK23").Width '結合セルの幅をポイント単位で取得します。
            hg = Range("AK23").Height
            Debug.Print "h=" & h
            Debug.Print "lef=" & lef
            Debug.Print "wd=" & wd
            Debug.Print "hg=" & hg
            Debug.Print "lef + wd / 2=" & lef + wd / 2
            Debug.Print "h - 0.5=" & h - 0.5
            Debug.Print "hg + 1=" & hg + 1
            With Sh1.Shapes.AddShape(msoOval, lef + wd / 2, h - 0.5, hg + 1, hg + 1)
             .Fill.Visible = msoFalse
             .Line.Weight = 1
             .Line.ForeColor.RGB = vbBlock
            End With
        Else
            MsgBox "指定されたセルは結合されていません。", vbExclamation
        End If
    End With
End Sub

With Sh1.Shapes.AddShape(msoOval, lef + wd / 2, h - 0.5, hg + 1, hg + 1)の部分で、
指定された値は境界を超えていますというメッセージが表示されます。
囲む文字は「有」か「無」なので、
lef + wd / 2, h - 0.5, hg + 1, hg + 1の数値指定ならうまく囲めそうな気がするのですが、
どのように修正したらよいのでしょうか?

sql
作成: 2025/11/17 (月) 12:01:53
通報 ...
1

ざっとみたところ下記の箇所があきらかな間違いですので、修正してみてください。

-            With Sh1.Shapes.AddShape(msoOval, lef + wd / 2, h - 0.5, hg + 1, hg + 1)
+            With Sh1.Shapes.AddShape(msoshapeOval, lef + wd / 2, h - 0.5, hg + 1, hg + 1)
-             .Line.ForeColor.RGB = vbBlock
+             .Line.ForeColor.RGB = vbBlack

これでとりあえずはエラーなく動くと思います。

もし自分が書くなら下記のような感じになります。

Sub test1()
    With ThisWorkbook.Worksheets("申請書")
        Dim l As Single, t As Single, w As Single, h As Single
        With .Range("aK23:aL23")
            l = .Left
            t = .Top
            w = .Width
            h = .Height
        End With
        With .Shapes.AddShape(msoShapeOval, l + w / 2 - h / 2, t, h, h)
            .Fill.Visible = msoFalse
            .Line.Weight = 1
            .Line.ForeColor.RGB = vbBlack
        End With
    End With
End Sub

ちなみに、
ここは Microsoft Access に関する質問をする掲示板です。次回からは適切な掲示板で質問してください。

例えば、
エクセル質問掲示板 質問 疑問 使い方 掲示板 エクセル Excel [エクセルの学校]
Excel VBA を学ぶなら moug モーグ|Excel (VBA)

2

ありがとうございました。
非常に分かりやすいコードです。