GoGoマクロのブログ

初心者向けマクロ講座「Go!Go!マクロ」の筆者三太郎の公式ブログです。

GoGoマクロ

エクセル仕事の自動化が誰でもできる本

みんなのマクロ検定 始めました!

2010-05-26 10:45:39 | お知らせ
                   にほんブログ村 IT技術ブログへ



この度、「Yahoo!みんなの検定」にて<<エクセルマクロ検定>>を始めました。



まだ入門レベルの2検定(計6問)だけなんですが、今後、どんどん増やして
行きますので、みなさん、ご自分のレベル確認にお役立てくださいネ。
下記のリンクから誰でも簡単に検定が受けられます。


ページ中央の赤色の[受験]ボタンを押してください。最後に採点ができ、
各全問正解で合格です!



エクセルマクロとは何か?【マクロ検定No01 入門レベル】

 (マクロについての設問です。3問)


エクセルマクロとは何か?【マクロ検定No02 入門レベル】

 (VBAについて等の設問です。3問)



それでは、皆さん奮ってチャレンジしてみてくださいね。 

(ただし、合格しても景品などは何も出ませんので、あしからず。。。)






 ▼賢くマクロ作りのコツをマスターする方法が満載▼
 マクロのプロが直伝する「エクセルマクロ成功の鉄則」





コメント

図形を操作するマクロ(の補足)

2010-05-05 01:24:53 | マクロ作成のコツ
                   にほんブログ村 IT技術ブログへ



今回作成した図形操作のプログラム中の

ActiveSheet.Shapes.Range(Array("Group 4", "Text Box 5", "Text Box 6")).Select

この部分ですが、

各図形を一旦削除してまた作成すると、名前は都度変わりますので、
カッコの中もその都度変えていかなければならずに不都合ですので、
その場合は以下のように、まず(作成した順に割り振られる図形番号
というものを用いて、)図形の数分の名前を取得して

  s1 = ActiveSheet.Shapes(1).Name
  s2 = ActiveSheet.Shapes(2).Name
  s3 = ActiveSheet.Shapes(3).Name
  ActiveSheet.Shapes.Range(Array(s1, s2, s3)).Select

このようにすれば、毎回カッコの中を変えるという必要がなくなりますし、
また、今回のようにグループ化したものを含めてシート上に3つの図形が
あるという場合の図形の削除方法としては、マクロの記録では

  ActiveSheet.Shapes("Group 4").Select
  Selection.Delete
  ActiveSheet.Shapes("Text Box 5").Select
  Selection.Delete
  ActiveSheet.Shapes("Text Box 6").Select
  Selection.Delete

このように名称でセレクトされた記述となりますが、これも図形番号を
用いてやると

  ActiveSheet.Shapes(1).Select
  Selection.Delete
      ・
      ・

このように書き直すことができます。
但し、削除する場合の注意点として、若い番号の図形を削除すると
図形番号は前に詰まる。というちょっとややこしい原則がありますので、

  ActiveSheet.Shapes(1).Select
  Selection.Delete
  ActiveSheet.Shapes(2).Select
  Selection.Delete
  ActiveSheet.Shapes(3).Select
  Selection.Delete

とするのではなくて、

  ActiveSheet.Shapes(1).Select
  Selection.Delete
  ActiveSheet.Shapes(1).Select
  Selection.Delete
  ActiveSheet.Shapes(1).Select
  Selection.Delete

という具合になります。(もしくは、逆から消していって

  ActiveSheet.Shapes(3).Select
  Selection.Delete
  ActiveSheet.Shapes(2).Select
  Selection.Delete
  ActiveSheet.Shapes(1).Select
  Selection.Delete

としてやると、より安全です。)


ちなみにですが、数が不明な場合にはちょっと特殊なループを回して

  For Each obj In ActiveSheet.Shapes
    ActiveSheet.Shapes(1).Select
    Selection.Delete
  Next obj

これですべての図形を一発で削除することができます。(この内容については
上級者レベルの話となりますので今回詳しくは触れません。)


あと余談ですが、注意点としてこうした図形の処理というのはエクセルの
バージョンによって差があり、例えば
本文にも書きましたようにExcel2007のバージョンでは「マクロの記録」で
図形関連の操作の記録はできなくなったという点や、
Excel2003のバージョンでは、複雑な図形処理をしていると(多分に2003固有
のバグで、、)Excel自体が落ちるという現象がよく起こります。
何か複雑で凝った図形処理をしようとする場合にはExcel2002もしくは2000の
古いバージョンの方が、安定して動作します。





>> 関連する応用作品の実行デモを見る(YouTube)



コメント