
I5:I24の範囲内のオートシェイプの数を数え、I25に合計数を表示させるマクロを作っているのですが、どうしても範囲指定の仕方が分かりません。教えてください。
'オートシェイプの合計数算出
Dim shp As Object
Dim cnt As Long
For Each shp In ActiveSheet.Shapes
If shp.Type = msoAutoShape Then
If shp.TopLeftCell.Column = 9 Then
cnt = cnt + 1
End If
End If
Next shp
Range("I25").Value = cnt
このマクロのどこにどう入れればよいでしょうか?
No.1ベストアンサー
- 回答日時:
TopLeftCellプロパティとIntersect メソッドを使って
図形の左上端が範囲内にあるか判定します
Dim shp As Object
Dim cnt As Long
For Each shp In ActiveSheet.Shapes
If shp.Type = msoAutoShape Then
If Not Intersect(shp.TopLeftCell, Range("I5:I24")) Is Nothing Then
cnt = cnt + 1
End If
End If
Next shp
Range("I25").Value = cnt
図形の右下も含めるのならBottomRightCellプロパティ
も条件に含めてください
No.3
- 回答日時:
もともとオートシェイプなどの、シート上のオブジェクトは、シートに浮かんで要るようなもので、EXCELのシートのセルとは何の関係もないものです。
すなわちセルの属性ではない。しかしそれでは不便な場合もあるので、
Sub test01()
MsgBox ActiveSheet.Shapes.Count
MsgBox ActiveSheet.Shapes(1).Name
MsgBox ActiveSheet.Shapes(1).TopLeftCell.Address
MsgBox ActiveSheet.Shapes(1).BottomRightCell.Address
MsgBox ActiveSheet.Shapes(1).BottomRightCell.Column
End Sub
をやるとわかるように、位置関係について、オブジェクト側から
TopLeftCell、BottomRightCellの属性を使えるようになっている。
ほかに「オートシェイプの書式設定」の「プロパティ」の「セルにあわせて・・」のような仕組みがあるだけである。
ーー
だから、質問の、「範囲指定の仕方と言っても、TopLeftCell等の番地が、質問者の考える範囲内にある(InterSectする)か聞くほかない。
これもオブジェクトの位置を動かすと変わる不安定なものである。
ーー
InterSectを使わないなら、ActiveSheet.Shapes(1).TopLeftCellなどのRowとColumnについて、列について2よりで大6より小、且つ行について3より大で8より小のような判別(IFで)プログラムでやることになる。
ーーー
TopLeftCellとBottomRightCell のどちらを問題にするのか、両方を考えるかの問題は、当然ある。
No.2
- 回答日時:
>範囲内のオートシェイプの数
この表現はちょっとあやふやです。
範囲に完全に入っているものの数か
範囲に少しでも入っているものの数か
どちらでしょう。
で、2通り数えるコードを。。
'------------------------------------------
Sub Test()
Dim Shp As Shape
Dim Cnt1 As Long
Dim Cnt2 As Long
Dim myRange As Range
Set myRange = Range("H1:J20") '●調査範囲、適宜に変更
For Each Shp In ActiveSheet.Shapes
If Shp.Type = msoAutoShape Then
'●範囲内に完全に入っているSHAPE
If Not Intersect(Shp.TopLeftCell, myRange) Is Nothing And _
Not Intersect(Shp.BottomRightCell, myRange) Is Nothing Then
Cnt1 = Cnt1 + 1
End If
'●範囲内に一部でも入っているSHAPE
If Not Intersect(Shp.TopLeftCell, myRange) Is Nothing Or _
Not Intersect(Shp.BottomRightCell, myRange) Is Nothing Then
Cnt2 = Cnt2 + 1
End If
End If
Next Shp
Range("I25").Value = Cnt1
Range("I26").Value = Cnt2
End Sub
'-----------------------------------------------
以上です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBA 1 2023/04/27 13:37
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) Dateserialで データ抽出 2 2022/06/26 21:07
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) VBA初心者です。 VBAで行単位で条件付き書式の色をカウントしたいです。 大量のデータがあるExc 3 2022/06/08 10:00
- Visual Basic(VBA) VBA初心者です。 VBAで行単位で条件付き書式の色をカウントしたいです。 大量のデータがあるExc 3 2022/06/08 10:02
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) 配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。 2 2022/09/15 14:06
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
このQ&Aを見た人はこんなQ&Aも見ています
-
オブジェクトをカウントする
Excel(エクセル)
-
Excelで特定のオートシェイプのみカウントする方法はありますか?
Excel(エクセル)
-
オートシェイプを色別に個数をカウントすることは出来ますか?
Excel(エクセル)
-
-
4
エクセル マクロで、選択している画像の数を数えたい
Excel(エクセル)
-
5
エクセルで○や×の図形の集計は出来ますか?
Excel(エクセル)
-
6
Excel(VBA)
Excel(エクセル)
-
7
指定範囲内で図形等を削除する方法は?
その他(Microsoft Office)
-
8
セルをクリック⇒そのセルに入力された文字を○で囲む
Excel(エクセル)
-
9
エクセルマクロで指定範囲内の図形を削除
Excel(エクセル)
-
10
オートシェイプに名前を付け名前毎に個数をカウントしたい
Excel(エクセル)
-
11
Excelの条件付き書式設定の太い罫線
Excel(エクセル)
-
12
ExcelVBA 図形をクリックした際のイベントを拾うには
Visual Basic(VBA)
-
13
VBA Shapes コピーと名前
Excel(エクセル)
-
14
エクセル VBA マクロ 塗りつぶしていないセルのRGB色の数値について
Visual Basic(VBA)
-
15
エクセルVBAで、MsgBox やInputBox は、画面の中央以外に表示させたい。
Excel(エクセル)
-
16
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
17
条件付き書式で太罫線を引く方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「余年」の意味について教えて...
-
エクセルで(~以上,~以下)...
-
年代と年台・・・どちらが正し...
-
三角関数の範囲について、 0≦x≦...
-
離れた列での最大値の求め方
-
三角関数 -3分のπって3分の5...
-
COUNTIF関数 ある範囲の数値で...
-
(x2乗+9)って因数分解出来ます...
-
お教えで来る範囲内で 文言が変...
-
EXCELで最大値と最小値を除いた...
-
判別式の使う時とか使わない時...
-
エクセルでPrint Area と表示さ...
-
極座標ではr>0の時のみ考えて、...
-
基礎問題精講、演習問題47(2)(i...
-
絶対値のついた2つの不等式に...
-
2025年の共通テストの数ⅠAに、 ...
-
文字係数の2次不等式についてで...
-
方程式 e^x=x+1 の解
-
高校数学、三角関数についてで...
-
X4乗=64の解き方を教えてほし...
おすすめ情報