アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつも拝見させていただいております。
教えてください。

excelのバージョンは2002です。
ひとつのオートシェイプに他のオートシェイプが重なっていた場合、重なっているオートシェイプを移動し、重ならないようにしたいのですが、どうやればよいでしょうか?

Shapeオブジェクトの
.Left
.Top
.Height
.Width
を駆使してチェックするしかないでしょうか?

簡単にできる方法がありましたら、お教え願います。

A 回答 (2件)

こんばんは。



今、思いつくのは、以下のように、Rangeオブジェクトをとる方法ですね。

 With ActiveSheet.Shapes(1)
 Set shp = Range(.TopLeftCell, .BottomRightCell)
 End With
 
これで、Rangeオブジェクトが取れますから、それを、Intersect を使って、二重ループでまわしたらいかがですか?あまり深く考えていないので、間違っているかもしれません。

簡単な例を考えてみました。

Sub CheckDoubleTest()
 Dim ShpR1 As Range
 Dim ShpR2 As Range
 Dim i As Integer
 Dim j As Integer
 With ActiveSheet
  For i = 1 To .Shapes.Count
   Set ShpR1 = .Range(.Shapes(i).TopLeftCell, .Shapes(i).BottomRightCell)
   For j = i + 1 To .Shapes.Count
    If i <> j Then
     Set ShpR2 = .Range(.Shapes(j).TopLeftCell, .Shapes(j).BottomRightCell)
     If Not Intersect(ShpR1, ShpR2) Is Nothing Then
      '処理
     End If
    End If
   Next j
  Next i
 End With
Set ShpR1 = Nothing: Set ShpR2 = Nothing
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
自分なりに改良して、このコードを理解しました。
INTERSECTで出きるかちょっと検討してみます。

お礼日時:2006/12/25 11:21

Left


.Top
.Height
.Width
で決まる長方形は、その中にシェイプが収まる四角形で、実際のシェイプの形とは、関係したものでは有りません。だからセルの場合はINTERSECTで判りますが、実際の図形の閉曲線輪郭が他の図形のそれと交わるか(共通点集合を持つかどうか)は、もう少し、細かいレベルのロジックやアルゴリズムによる、ビットをチェックする、アセンブラレベルのコーディングが要るのではないでしょうか。
(図形内を、色で塗りつぶしするロジックのような)
経験したような意見に書いてますが、体験したわけでなく、そういう道理だと思うわけです。
    • good
    • 0
この回答へのお礼

なるほど、よく分かりました。ありがとうございます。
重なりをチェックできるプロパティー値とかは、やっぱりないんですね。セルレベルの重なりチェックでできるかどうか検討してみます。INTERSECT知りませんでしたので助かりました。
ありがとうございました!

お礼日時:2006/12/25 11:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A