ホチキス先生の「プログラマーと呼ばれたい」

InfoPath & SQL Server !

Archive for 7月 2010

エクセルのマクロで図形を操作する(3) – オートシェイプに名前をつける

with one comment

エクセルのシート上に作成したオートシェイプは番号がついているが、番号ではなく、オートシェイプに名前を付けて区別することもできる。例えばこんな具合だ。

Sub smaile()
ActiveSheet.Shapes.AddShape msoShapeSmileyFace, 10, 20, 100, 100
ActiveSheet.Shapes.AddShape msoShapeSmileyFace, 120, 20, 100, 100
ActiveSheet.Shapes(1).Name = “taro”
ActiveSheet.Shapes(2).Name = “hanako”
Sheet1.Shapes(“taro”).IncrementRotation (-20)
Sheet1.Shapes(“hanako”).IncrementRotation (20)
Sheet1.Shapes(“taro”).Adjustments.Item(1) = 0.5
Sheet1.Shapes(“hanako”).Width = 160
Sheet1.Shapes(“hanako”).Height = 160
End Sub

excel_macro_002 
(Fig.1 オートシェイプを2つ作成し名前を付けて角度や変形、大きさを変えた)

ここでは作成した2つのオートシェイプに「taro」と「hanako」という名前をつけている。「taro」に操作をするときはShapes(“taro”)、「hanako」に操作をするときはShapes(“hanako”)と記述して区別できる。ここでは「taro」を左に20度(つまり右に-20度)回転、変形を0.5、「hanako」は右に20度回転、幅と高さを160に拡大している。

Written by Yoshio Matsumoto

2010年7月19日 at 9:14 AM

エクセルのマクロで図形を操作する(2) – 作成したオートシェイプには番号がついている

leave a comment »

エクセルのシート上に作成されたオートシェイプは連番で管理されている。たとえば次のようなマクロを作って実行する。結果はこんな具合だ。

Sub smaile()
ActiveSheet.Shapes.AddShape msoShapeSmileyFace, 10, 20, 100, 100
ActiveSheet.Shapes.AddShape msoShapeSmileyFace, 120, 20, 100, 100
Sheet1.Shapes(1).IncrementRotation (-10)
Sheet1.Shapes(2).IncrementRotation (10)
Sheet1.Shapes(1).Adjustments.Item(1) = 0.5
End Sub

excel_macro_001 
(Fig.1 マクロによって作成した2つのオートシェイプ)

ここでは2つのオートシェイプを作っているが、それぞれ作成された順番でShapes(1)、Shapes(2)という連番で管理されている。最初に作成したオートシェイプは図の左側のもので、こちらはShapes(1)、次に作成したオートシェイプが右側で、Shapes(2)である。Shapes(1)を左に10度(つまりマイナス10度)回転させ、Shapes(2)を右に10度回転させる、そして右側のShapes(1)については、Adjustment.Itemの値を変えて変形している。

Written by Yoshio Matsumoto

2010年7月18日 at 9:16 AM

エクセルのマクロで図形を操作する(1) – マクロでオートシェイプを作成する

leave a comment »

あることを思い立ち、エクセルのマクロで作ってみたものがある。そのため、図形を操作するマクロについて調べている。

エクセルのマクロは習得が簡単だ。その理由のひとつに「マクロの記録」がある。マクロで自動化したい操作を「マクロの記録」を実行してマウスやキーボードで操作すると、その操作がマクロとなって記録される。これはいわばユーザーの操作を記録しているわけで、このマクロを分析し加工すれば思いのままに操作を自動化できる。

例えばMicrosoft Excel 2003でオートシェイプを作り、形を変化させ、回転する、という操作をマクロに記録すると、次のようなマクロができる。

—————————————————————————————————————————————–

Sub Macro1()

‘ Macro1 Macro
‘ マクロ記録日 : 7/19/2010  ユーザー名 :


    ActiveSheet.Shapes.AddShape(msoShapeRoundedRectangle, 124.5, 87.75, 126.75, 53.25).Select
    Selection.ShapeRange.Adjustments.Item(1) = 0.5
    Selection.ShapeRange.IncrementRotation 35.28
End Sub

—————————————————————————————————————————————–

ActiveSheet.Shapes.AddShape()によってシートにオートシェイプが作られる。()の中には5つの引数があり、最初のmsoShapeRoundedRectangleがオートシェイプの種類、続く4つの数字はオートシェイプの大きさと位置を決めている。これらの数値を変更したマクロを作り実行すると、引数は「オートシェイプの種類、横の位置、縦の位置、横の大きさ、縦の大きさ」であることがわかる。

Selection.ShapeRange.Adjustments.Item()はオートシェイプの変形だ。オートシェイプの中には黄色の菱形アンカーポイントを持つものがあり、変形することができる。

Selection.ShapeRange.IncrementRotationはオートシェイプの回転であり、右回りの回転角度で指定する。右回りに90度回転させるなら値は「90」だ。

ここで自動的に作成されたマクロでオートシェイプを作ることができるが、より実際的にオートシェイプを操作するためには、次のように書くこともできる。

●オートシェイプを作成する

ActiveSheet.Shapes.AddShape msoShapeRoundedRectangle, 10, 20, 50, 60

●作成したオートシェイプを右に5度回転させる

Sheet1.Shapes(1).IncrementRotation (5)

●作成したオートシェイプの横の大きさを100に変える

Sheet1.Shapes(1).Width = 100

●作成したオートシェイプの塗りを半透明化する

Sheet1.Shapes(1).Fill.Transparency = 0.5

●作成したオートシェイプの変形を0.5にする

Sheet1.Shapes(4).Adjustments.Item(1) = 0.5

Written by Yoshio Matsumoto

2010年7月17日 at 9:15 AM