『数字の数と楕円の数が一致しているか。』(東九)
|[A] [3]| ➀ りんご ➁ パイナップル ➂ バナナ ➃ なし ➄ サクランボ
数字を楕円で囲んでいます。
マクロで数字の数と楕円の数が一致しているかチェックすることは可能でしょうか。
< 使用 Excel:Excel2013、使用 OS:Windows10 >
Sub test()
Dim n&, shp As Object
For Each shp In ActiveSheet.Shapes
If shp.AutoShapeType = msoShapeOval Then n = n + 1
Next
MsgBox n
End Sub
(硯) 2026/07/19(日) 21:28:53
A3セルに入力の数字の数と、A3セル上に配置の楕円の数を知りたいってことですか?
Sub Sample()
Dim rng As Range: Set rng = ActiveSheet.Range("A3")
Dim chr As String, shp As Shape
Dim i As Long, n1 As Long, n2 As Long
chr = rng.Text
For i = 1 To Len(chr)
If "1" <= Mid(chr, i, 1) And Mid(chr, i, 1) <= "9" Then n1 = n1 + 1
Next i
For Each shp In ActiveSheet.Shapes
If shp.AutoShapeType = msoShapeOval And _
Not Intersect(rng, shp.TopLeftCell) Is Nothing Then n2 = n2 + 1
Next shp
MsgBox "数字は " & n1 & "個" & vbCrLf & "楕円は " & n2 & "個"
End Sub (通行人) 2026/07/20(月) 06:27:18
(通行人)さんへ
> A3セルに入力の数字の数と、A3セル上に配置の楕円の数を知りたいってことですか?
その通りです。
指摘された『詳しい説明』が抜けていますのでお二方のコードを参考にして作成してみます。
(東九) 2026/07/20(月) 09:15:48
丸数字を用いているわけではなく、
数値にオートシェイプを重ねて丸数字を表現しているということですね。
詳しい事情はわかりませんが、丸数字で代用できない事情がおありだとすると、
例えば2桁、3桁の数値を楕円で覆ったり、
選択肢内に数値が存在したりするケースはあり得るのでしょうか。
その場合「数字の数と楕円の数が一致しているかチェックする」には、
正規表現を使って判断する必要があるかもしれませんが、
正規表現は詳しくないので、私は退散いたします。
(硯) 2026/07/20(月) 10:33:51
数字が2桁以上の入力も有り得る場合、ご提示例のように数字の前後へスペースが入力されるのなら、 スペース区切りで数字部を切出して数値判定すれば良いと思います。
| [A]
[3]| 1 りんご 91 パイナップル 101 バナナ 105 なし 201 サクランボ
^ ^ ^ ^ ^ ^ ^ ^ ^ ^
Sub Sample2()
Dim rng As Range: Set rng = ActiveSheet.Range("A3")
Dim s As Variant, shp As Shape
Dim i As Long, n1 As Long, n2 As Long
s = Split(rng.Text, " ")
For i = 0 To UBound(s)
If IsNumeric(s(i)) Then n1 = n1 + 1
Next i
For Each shp In ActiveSheet.Shapes
If shp.AutoShapeType = msoShapeOval And _
Not Intersect(rng, shp.TopLeftCell) Is Nothing Then n2 = n2 + 1
Next shp
MsgBox "数字は " & n1 & "個" & vbCrLf & "楕円は " & n2 & "個"
End Sub (通行人) 2026/07/21(火) 05:45:54
10は1とてカウントするようにしています。
1〜10まで使用することあり。この場合10個となります。
ActiveSheetのActiveCellを参照します。
図形名は使用しているレイアウト専用です。
Sub 数字と楕円の数チェック()
Dim セル文字列 As String
Dim 数字の塊数 As Long
Dim 楕円数 As Long
Dim シート As Worksheet
Dim セル As Range
Dim 図形 As Shape
Dim 位置 As Long
Dim 数字の中 As Boolean
Set シート = ActiveSheet
Set セル = ActiveCell
セル文字列 = セル.Value
'?@ セル内の数字を数える
数字の塊数 = 0
数字の中 = False
For 位置 = 1 To Len(セル文字列)
If Mid(セル文字列, 位置, 1) Like "#" Then
If Not 数字の中 Then
数字の塊数 = 数字の塊数 + 1
数字の中 = True
End If
Else
数字の中 = False
End If
Next 位置
'?A アクティブセル上の楕円の数を数える
楕円数 = 0
For Each 図形 In シート.Shapes
If 図形.Name Like "数字楕円*" Then
If 図形.TopLeftCell.Address = セル.Address Then
楕円数 = 楕円数 + 1
End If
End If
Next 図形
'?B 結果表示
MsgBox _
"セル内の数字の塊の数:" & 数字の塊数 & vbCrLf & _
"セル上の楕円の数:" & 楕円数 & vbCrLf & _
IIf(数字の塊数 = 楕円数, "一致しています", "一致していません")
End Sub
手動で数字の個数だけ楕円を作成している状況なので
時間があったら一括で数字の個数分の楕円を描くコードを作成します。
(東九) 2026/07/21(火) 16:39:37
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.