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も見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
Excelで特定のオートシェイプのみカウントする方法はありますか?
Excel(エクセル)
-
オブジェクトをカウントする
Excel(エクセル)
-
エクセルで○や×の図形の集計は出来ますか?
Excel(エクセル)
-
-
4
オートシェイプを色別に個数をカウントすることは出来ますか?
Excel(エクセル)
-
5
Excel(VBA)
Excel(エクセル)
-
6
オートシェイプに名前を付け名前毎に個数をカウントしたい
Excel(エクセル)
-
7
セルをクリック⇒そのセルに入力された文字を○で囲む
Excel(エクセル)
-
8
EXCEL VBAでオートシェイプの重なりを検知するには?
Excel(エクセル)
-
9
マクロを実行すると画像がズレてしまいます
その他(Microsoft Office)
-
10
エクセル ダブルクリック入力の範囲が複数の場合
Excel(エクセル)
-
11
特定の名前のオートシェイプの有無を知りたい(エクセルVBA)
Excel(エクセル)
-
12
別のシートから値を取得するとき
Visual Basic(VBA)
-
13
Excelのセルにユーザー名を表示する方法
Excel(エクセル)
-
14
エクセルで別シートの同じ位置にオブジェクトをコピーしたい
その他(Microsoft Office)
-
15
エクセル 条件付き書式で文字を表示するには
Excel(エクセル)
-
16
【VBA】3個の図形をコピーしてSheet2に貼り付けたい
Excel(エクセル)
-
17
エクセルマクロでシート内にある画像のみを選択する
Excel(エクセル)
-
18
VBA Shapes コピーと名前
Excel(エクセル)
-
19
excelのマクロで該当処理できなければ飛ばして進むにはどうすればよいのでしょうか
Visual Basic(VBA)
-
20
指定したシート名以外を非表示にするには?VBA
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで(~以上,~以下)...
-
三角関数の範囲について、 0≦x≦...
-
離れた列での最大値の求め方
-
「余年」の意味について教えて...
-
整式の係数について xについて...
-
お教えで来る範囲内で 文言が変...
-
年代と年台・・・どちらが正し...
-
高校数学、三角関数についてで...
-
絶対値のついた2つの不等式に...
-
指定範囲内のオートシェイプを...
-
シグマの範囲が2nまでの関数で...
-
COUNTIF関数 ある範囲の数値で...
-
(x2乗+9)って因数分解出来ます...
-
【問題】mを実数の定数とし、2...
-
三角関数 -3分のπって3分の5...
-
Excelマクロで質問です。変数宣...
-
X3乗―2=0
-
因数分解 (x-3)(x-5)(x-7)(x-9)...
-
写像
-
弧度法で315度を表すとすると、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
年代と年台・・・どちらが正し...
-
「余年」の意味について教えて...
-
エクセルで(~以上,~以下)...
-
三角関数の範囲について、 0≦x≦...
-
COUNTIF関数 ある範囲の数値で...
-
エクセルでPrint Area と表示さ...
-
離れた列での最大値の求め方
-
記録の範囲、分布の範囲、数値...
-
シグマの範囲が2nまでの関数で...
-
指定範囲内のオートシェイプを...
-
(x2乗+9)って因数分解出来ます...
-
極座標ではr>0の時のみ考えて、...
-
基礎問題精講、演習問題47(2)(i...
-
2025年の共通テストの数ⅠAに、 ...
-
お教えで来る範囲内で 文言が変...
-
文字係数の2次不等式についてで...
-
判別式の使う時とか使わない時...
-
X3乗―2=0
-
それまで これまで っていうの...
-
言葉、日本語について。 所要範...
おすすめ情報