‘Excel’ カテゴリーのアーカイブ
WordPressのblogシステムは統計情報が優れている
Windows Live BlogからWordPressに変更して3か月ほど経つ。WordPressのblogシステムで最もうれしいのはWindows Live Writerとの親和性だ。WordPressのような多機能のblogシステムをWebブラウザ上で編集するのはストレスが高い。ブラウザ上ではなく記事を編集できるWindows Live Writerはとてもいい。
しかしWindows Live WriterはWindows Live Blogでも使えた、というか、もともとWindows Live Blogに対応した記事編集ツールであったといえる。そこでWindows Live Blogに足りなかった機能でいちばん気に入っているものは、といえば、これはもう統計情報に決まりだ。WordPressでは実に詳細なアクセス統計情報がとれる。
アクセス統計情報をみると、意外な記事に注目されていることがわかる。blogの記事は、TwitterやFaceBookなど他のSNSで紹介してリンクをたどられる場合も多いが、googleやbingなどの検索サイトでヒットする場合もある。このblogは本来InfoPathやSQL Server、システム開発、システム運用などの事例を紹介しているつもりだが、統計情報を見ると思わぬ記事に注目されていることがわかる。直近の一定期間のアクセス統計をみたのが次の画面だ。
ホームページ、つまりトップページの閲覧回数が多いのは当然として、その次に多く見られているのが、文庫本をPDF化してKindleで読む記事だ。ちなみに他にもKindle関係の記事は閲覧回数の上位に出ている。
その次にエクセルのマクロの記事が出てくる。これも他のエクセルマクロの記事も閲覧回数上位にでてくる。世の中にはよほどエクセルのマクロで図形の操作に困っている人が多いのか、あるいは図形に関する記事が他に少ないからだろうか。もちろん、そもそもエクセルのマクロをやっている人の母数が多いということもあるだろう。VBAマクロがこれほど流行したのも、エクセルでの利用が多いからに違いない。
他はキャノンのプリンタPIXUS iP100の記事が2つあるが、これも他に情報源が少ないからのような気がする。Expression Blend 4の記事が読まれているのは、たいしたことを書いていないので、いささか恥ずかしいところもある。
もちろん閲覧回数を増やすことを目的にしていないので、どの記事が誰にどれだけ読まれているか気にしている訳ではないのだが、こうして統計情報を見るといろんなことを考えさせられて面白い。
エクセルのマクロで図形を操作する(4) – オートシェイプを消去する
ではエクセルのシートに作ったオートシェイプを消去するにはどうすればいいだろうか。オートシェイプを削除するには、deleteメソッドが使えるはずだ。試しに次の2つのマクロを作ってみよう。
————————————————————————
Sub smaile()
ActiveSheet.Shapes.AddShape msoShapeSmileyFace, 10, 20, 100, 100
ActiveSheet.Shapes.AddShape msoShapeSmileyFace, 120, 20, 100, 100
End Sub
————————————————————————
Sub delete()
Sheet1.Shapes(1).delete
Sheet1.Shapes(2).delete
End Sub
————————————————————————
最初のマクロでは、スマイルのオートシェイプを2つ作っている。これら2つのオートシェイプはそれぞれShapes(1)とShapes(2)という番号で管理されている。そして次のマクロでは、そのShapes(1)とShapes(2)に対して消去のDeleteメソッドを実行している。だが残念ながらこのマクロは、消去するときにエラーになる。ひとつめのシェイプを消去した後「指定したコレクションに対するインデックスが境界を越えています。」というメッセージが出るはずだ。なぜかといえば、Shapes(1)を消去したときに、自動的にShapes(2)がShapes(1)になってしまうからだ。そこで消去する順番は、まず数字の大きいShapes(2)を消去し、その次にShapes(1)を消去する、というようにすればいい。次のマクロは正しく動くだろう。
————————————————————————
Sub smaile()
ActiveSheet.Shapes.AddShape msoShapeSmileyFace, 10, 20, 100, 100
ActiveSheet.Shapes.AddShape msoShapeSmileyFace, 120, 20, 100, 100
End Sub
————————————————————————
Sub delete()
Sheet1.Shapes(2).delete
Sheet1.Shapes(1).delete
End Sub
————————————————————————
あるいは次のように、Shapes(1)を二回消去する、というようにしてもうまく消去できる。
————————————————————————
Sub smaile()
ActiveSheet.Shapes.AddShape msoShapeSmileyFace, 10, 20, 100, 100
ActiveSheet.Shapes.AddShape msoShapeSmileyFace, 120, 20, 100, 100
End Sub
————————————————————————
Sub delete()
Sheet1.Shapes(1).delete
Sheet1.Shapes(1).delete
End Sub
————————————————————————
エクセルのマクロで図形を操作する(3) – オートシェイプに名前をつける
エクセルのシート上に作成したオートシェイプは番号がついているが、番号ではなく、オートシェイプに名前を付けて区別することもできる。例えばこんな具合だ。
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
(Fig.1 オートシェイプを2つ作成し名前を付けて角度や変形、大きさを変えた)
ここでは作成した2つのオートシェイプに「taro」と「hanako」という名前をつけている。「taro」に操作をするときはShapes(“taro”)、「hanako」に操作をするときはShapes(“hanako”)と記述して区別できる。ここでは「taro」を左に20度(つまり右に-20度)回転、変形を0.5、「hanako」は右に20度回転、幅と高さを160に拡大している。
エクセルのマクロで図形を操作する(2) – 作成したオートシェイプには番号がついている
エクセルのシート上に作成されたオートシェイプは連番で管理されている。たとえば次のようなマクロを作って実行する。結果はこんな具合だ。
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
ここでは2つのオートシェイプを作っているが、それぞれ作成された順番でShapes(1)、Shapes(2)という連番で管理されている。最初に作成したオートシェイプは図の左側のもので、こちらはShapes(1)、次に作成したオートシェイプが右側で、Shapes(2)である。Shapes(1)を左に10度(つまりマイナス10度)回転させ、Shapes(2)を右に10度回転させる、そして右側のShapes(1)については、Adjustment.Itemの値を変えて変形している。
エクセルのマクロで図形を操作する(1) – マクロでオートシェイプを作成する
あることを思い立ち、エクセルのマクロで作ってみたものがある。そのため、図形を操作するマクロについて調べている。
エクセルのマクロは習得が簡単だ。その理由のひとつに「マクロの記録」がある。マクロで自動化したい操作を「マクロの記録」を実行してマウスやキーボードで操作すると、その操作がマクロとなって記録される。これはいわばユーザーの操作を記録しているわけで、このマクロを分析し加工すれば思いのままに操作を自動化できる。
例えば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



