goo blog サービス終了のお知らせ 

エクセルアニメーション

エクセルでアニメーションを動かして遊びましょう

エクセルアニメーション第23回(応用編15)くじらのデート(2)

2011-12-31 | Weblog

前回に続いて”くじらのデート”を完成させましょう。

今回追加するのはくじらの会話の部分です。
ただ、くじらが移動するだけでは面白くないので、その間に会話を交わすようにしてみました。会話の内容は自由に変えられるので、楽しいものを考えて作って見ましょう。

言葉の吹き出しはエクセルの図形描画から取り出して大きさ、形を整えます。

「オートシェイプー吹き出しー雲形吹き出し」

                              ことば2                              ことば1

1個作ってそれをコピーします。さらに片方の吹き出しを反転させておきます。
[図形の調整]-[回転/反転]-[左右反転]

用意した吹き出しに名前をつけて配置します。(位置はコードのほうで決めますから適当な位置でいいです)
左に吹き出し口のあるほうを”ことば1”、右にあるほうを”ことば2”とします。

さいごに、タイトルとエンドマークを作成します。
「ワードアート」を使って”くじらのデート”と”おわり”を作ります。大きさなどは前回の見本を参考に適当に作りましょう。
さらにそれぞれに名前("くじらのデート"を「はじめ」、”おわり”を「おわり」)をつけておきます。
これも適当に配置しておきます。

      はじめ
                                             

おわり

これで材料はそろいました。

それでは、これらのオブジェクトは移動しますので、最初に初期位置を設定しておきましょう。

前回の”初期位置”のつぎを下のように変更します。(青色・・・変更箇所  赤色・・・追加箇所)
ただし、使用するパソコンの画面サイズによって位置が変わりますから、各人で調整してください。
位置決めはこれまでの作品を参考にして、Left,Topで指定しましょう。
その際、オブジェクトの名称を間違わないように注意が必要です。

表示する言葉は、エクセルシートの適当な場所に書き込んでおきます。
上の例では、14列の1行から10行までに、会話を交互に記入しておきます。
内容は自由です。面白いものを考えて挿入してください。

今回は、同じコードを繰り返す場合に簡便化できるように、With ステートメントを使ってみましょう。
Withステートメントを使用すると、一度指定したオブジェクト名の再指定を省略することができます。
今回は、Left,Top,Visible だけですが、同じオブジェクトに対するオブジェクト名を省略することができるので効果的です。
文のはじめのピリオド「。」を忘れないように。

マクロの全体を表示しておきます。
今回は、ディスプレーによって位置異なるので調整が必要です。
うまくくじらが波間に隠れるかどうかがポイントです。がんばってください。

Sub くじらのデート()

    Dim Tex(10) As String   ’ことばの数
    Dim TexName As String
   
    '初期位置
        With ActiveSheet.Shapes("はじめ")
            .Visible = True
            .Left = 260
            .Top = 40
        End With
        With ActiveSheet.Shapes("おわり")
            .Visible = False
            .Left = 260
            .Top = 60
        End With
        With ActiveSheet.Shapes("くじら1")
            .Left = 500
            .Top = 200
        End With
        With ActiveSheet.Shapes("くじら2")
            .Left = 70
            .Top = 200
        End With
        With ActiveSheet.Shapes("ことば1")
            .Visible = False
            .Left = 500
            .Top = 100
        End With
        With ActiveSheet.Shapes("ことば2")
            .Visible = False
            .Left = 50
            .Top = 100
        End With
       
        '言葉の読み込み
        For k = 1 To 10
            Tex(k) = Cells(k, 14)  '14は言葉を書いた列番号。
        Next
       
        On Error GoTo Myend
        m = 1
       
'接近の繰り返し
    For L = 1 To 8

        'くじら1浮上
        ActiveSheet.Shapes("くじら1").Select
            For n = 200 To 150 Step -1
                Selection.ShapeRange.Top = n
                Mytimer (0.05)
            Next

        '言葉の表示
        ActiveSheet.Shapes("ことば1").Visible = True '表示
        TexName = "ことば1"
        GoSub Comv
       
        Mytimer (3)
       
        ActiveSheet.Shapes("ことば1").Visible = False '非表示
       
        '潜水
        ActiveSheet.Shapes("くじら1").Select
            For n = 150 To 200
                Selection.ShapeRange.Top = n
                Mytimer (0.05)
            Next

        'くじら2浮上
        ActiveSheet.Shapes("くじら2").Select
            For n = 200 To 150 Step -1
                Selection.ShapeRange.Top = n
                Mytimer (0.05)
            Next

        ActiveSheet.Shapes("ことば2").Visible = True '表示
        TexName = "ことば2"
        GoSub Comv
       
        Mytimer (3)
       
        ActiveSheet.Shapes("ことば2").Visible = False '非表示
                                        
        '潜水
        ActiveSheet.Shapes("くじら2").Select
            For n = 150 To 200
                Selection.ShapeRange.Top = n
                Mytimer (0.05)
            Next
           
        If m > 10 Then '言葉の終了
            GoTo Myend
        End If
       
        移動
               
    Next
   
Comv:
       
    ActiveSheet.Shapes(TexName).Visible = True '表示
    ActiveSheet.Shapes(TexName).Select
   
    Selection.Characters.Text = Tex(m)
    m = m + 1

    Return
   
Myend:
    'タイトル入れ替え
    ActiveSheet.Shapes("はじめ").Visible = False
    ActiveSheet.Shapes("おわり").Visible = True

    Cells(1, 1).Select
   
End Sub

’--------------------------------

'接近
Sub 移動()
    'くじら1移動(左)
    With ActiveSheet
        .Shapes("くじら1").Left = .Shapes("くじら1").Left - 80
        .Shapes("ことば1").Left = .Shapes("ことば1").Left - 80
   
    'くじら2移動(右)
        .Shapes("くじら2").Left = .Shapes("くじら2").Left + 80
        .Shapes("ことば2").Left = .Shapes("ことば2").Left + 80
    End With
End Sub

’--------------------------------

'時間調整
Sub Mytimer(t)
   
    mytime = Timer
    Do Until Timer > mytime + t
    DoEvents
    Loop
   
End Sub

これですべて完成です。

思うようにくじらが会話をしながら浮かんだりもぐったりすれば成功です。

これを応用して、神出鬼没なシーンを考えて楽しんでください。

では、また、次回まで・・・


エクセルアニメーション第22回(応用編14)くじらのデート(1)

2011-04-28 | Weblog

今回は、画面テクニックでオブジェクトを出没させてみましょう。
寒い?南極でのくじらのデート風景です。

完成図
  

完成図を参照しながら、まず、海の画面を挿入します。エクセルの挿入ー図ークリップアート(または、図形描画ツールバー)                                                            ↓       


で、”南極海”のキーワードで検索してください。その中から下の図を探して挿入します。
取り込んだら、自分のパソコンのディスプレーの大きさいっぱいに合うように調整しましょう。

南極海

ここから仕掛けを作成します。
これまでも紹介してきた”はどこぴ君”や、”Faststone"など(フリーソフト)を使って現在の海の部分の下2分の一を切り取ります。

切り取った海面
 

つぎに挿入するオブジェクトを取得します。
”南極海”と同じようにクリップアートから”くじら”で検索して、下図のくじらをDLします。

取り込んだら名前を付けておきましょう。今後この名前でオブジェクトを動かしますので、数字は全角、半角を混同しないようにしましょう。
そして、くじら(潮を含む)の高さを先ほど切り取った海面の高さと同じ(少し低く)まで縮小しておきます。

        名前 「くじら1」

         名前 「くじら2」

「くじら2」(このくじらは、左右反転しておきます。[図形の調整]-[回転/反転]-[左右反転])

完成図を参考にして、だいたいの位置に配置します。正確な位置はあとで調整します。
見本を見て配置をしたら画面の前後関係を確認しておきましょう。
画面の順序は、南極海が最背面で、つぎにくじら、海面が最前面になります。

それでは、ここでマクロを作っていきましょう。
マクロの自動記録を利用して基本となるモジュールを記録していきます。
マクロの自動記録ボタンをクリックしたのち、マクロ名を「くじらのデート」として「OK」します。

 

 いよいよここから記録です。

右のくじら(くじら1)をクリックして、上方向へ約2センチほど移動させるだけです。
これでおしまいです。
マクロの記録ボタンの右の”Visual Basic Editor" ボタンを押して記録を確認してみましょう。
下のようなモジュールができたと思います。(数値は違っていても支障ありません) 

Sub くじらのデート()
'
' くじらのデート Macro
' マクロ記録日 :  ユーザー名 :'

'
    ActiveSheet.Shapes("くじら1").Select
    Selection.ShapeRange.IncrementLeft 0.6・・・・・左右方法(この行は今回は削除します
    Selection.ShapeRange.IncrementTop -31.8・・・上下方向
End Sub

これは、くじら1を画面の上方へ動かす部分です。
くじらは真上へ移動させますので、上のモジュールの2行目(左右方向)は削除します。

オブジェクトの移動には、2つの方法があります。
1) 移動量を指定する方法。(Selection.ShapeRange.Incrementtop  1)
2) 位置を指定する方法。(Selection.ShapeRange.top = 10)
どちらを使うかは、概して移動量によって変わってきます。移動範囲が大きい場合や、画面の一定の位置を移動する場合は2)のほうがいいでしょう。

今回は2)の方法でやってみましょう。
ここでは 繰り返しのFor ・・・Next に”Step”をつけて使ってみることにします。(数値が減る場合は必ず必要)
今回はオブジェクトが画面の上方へ行くため、数値は小さくなるので、”-”をつけて指定します。

ActiveSheet.Shapes("くじら1").Select
 
    For n = 200 To 150 Step -1
     変数nを200から150まで、1ずつ減じていきます。
  Selection.ShapeRange.Top = n
     オブジェクトの上端を n の位置に移動します。
    Mytimer (0.05)
     移動ごとに0,05秒の間待機させます。
    Next
     繰り返しです。

End Sub

For ・・・Nextに使っている数字200は、くじらの潮の上端が切り取った海面に隠れる位置に調整します。
高すぎる場合は数値を大きく、下すぎる場合は数値を小さくします。
つぎに、数字150はくじらの下端が海面から出てしまう寸前でとめるように調整します。

それでは、海面を元の位置に戻してくじらを見えないようにして動かせて見ましょう。
この際、海面と元の南極海の海との境目が目立たないようにするのがコツです。

ここでいつものタイマーを作っておきましょう。(これはマクロの最後に付けておいてください。)

Sub Mytimer(t)
    Mytime = Timer
    Do Until Timer > Mytime + t
    DoEvents
    Loop
End Sub

それでは一度動かせてみましょう。
うまくくじらが海面から潮を吹きながら出てきましたか?

成功したら、つぎは再び海中へもぐるところを追加しましょう。
これは今やった反対になるだけなので簡単です。

    For n = 200 To 150 STEP ー1
     変数nを200から150まで、1ずつ減じていきます。
  Selection.ShapeRange.Top = n
     オブジェクトの上端を n の位置に移動します。
    Mytimer (0.05)
     移動ごとに。05秒の時間待機させます。
    Next
     繰り返しです。

End Sub

これをもとにして、編集していきます。
これまでもほとんどこの形式でオブジェクトを動かしてきましたのでお分かりかと思います。
では、これを下のように変更してください。  
内容はおなじコードの繰り返しですから、コピーを活用して一部手直ししましょう。

初期位置を決めておきます。(パソコンによって位置が変わります。)
そこからいったん浮上します。(同上)
しばらく海面上にいます。(3秒)
ふたたび海面下へ潜水します。

以上の繰り返しです。

あとは左右のくじらの名前を間違わないこです。

それではコードを修正していきましょう。(第1回の完成マクロ)

Private Sub くじらのデート()

        ActiveSheet.Shapes("くじら1").Select                 '右のくじらの初期位置
            Selection.ShapeRange.Top = 200
            Selection.ShapeRange.Left = 500

        ActiveSheet.Shapes("くじら2").Select                 '左のくじらの初期位置
            Selection.ShapeRange.Top = 200
            Selection.ShapeRange.Left = 50

        ActiveSheet.Shapes("くじら1").Select                 '右のくじらを選択
            For n = 200 To 150 Step -1
                Selection.ShapeRange.Top = n                '浮上
                Mytimer (0.05)
            Next

        Mytimer (3)                                                   '海面上

            For n = 150 To 200
                Selection.ShapeRange.Top = n              '潜水
                Mytimer (0.05)
            Next

        ActiveSheet.Shapes("くじら2").Select                 '左のくじらを選択
            For n = 200 To 150 Step -1
                Selection.ShapeRange.Top = n                '浮上
                Mytimer (0.05)
            Next

        Mytimer (3)                                                   '海面上

            For n = 150 To 200
                Selection.ShapeRange.Top = n              '潜水
                Mytimer (0.05)
            Next

        End Sub
       
Sub Mytimer(t)
    Mytime = Timer
    Do Until Timer > Mytime + t
    DoEvents
    Loop
End Sub

できたら一度動かしてみましょう。

[ツール]-[フォーム]-[ボタン]とクリップして、画面の右下の適当な場所でクリックします。
ボタンが出来上がったでしょうか。

できあがったボタンを右クリックして”マクロの登録”で「くじらのデート」といれてOKします。

それでは、今作成したボタンをクリックして見ましょう。
うまくくじらが上下に動きましたか?
海面からの浮上、潜水がうまく見えるように調整してみてください。

次回は、くじらのデートをさせて、ことばも付けて完成させましょう。

それでは次回まで・・・

 


エクセルアニメーション第21回(応用編13)航空ショー(4)

2010-11-03 | Weblog

航空ショウ最終回は、ヘリの編隊によるカラースモークショーです。前回同様、これまでに作成した飛行場画面に追加していきます。

今回使用するオブジェクトは、3機編隊のヘリコプターと、3本のスモークです。

まず、OH(ヘリコプター)を作成します。

これは、Web上などから検索して取り込んできます。(OHでなくても好きなヘリでいいでしょう。ただし、小型へり)
フリーソフトの”ハドコピ君”(紹介済み)や、”FastStone”を活用すると便利です。

ここでのコツは、背景を透明にすることです。まわりに白い部分などがあるとうまく表現できません。
取り込んだオブジェクトを選択しておいて、”図”ツールバーにある「透明な色に設定」ボタンで背景部分をクリックすると取り除くことができます。ただし、素材によってはできない場合もあります。

1機を取り込んで、コピーして3機編隊とし、それらをグループ化しておきます。

         

グループ化は、まず、3機の機体を図のように配置しておきます。

「オブジェクトの選択」アイコンをクリックしてから、3機を”完全に囲う”ようにドラッグして”グループ化”します。
このさい、少しでも機体が範囲から出ていると選択できないので気をつけましょう。

グループ化したものを、”OH”として名前付けをしておきます。

つづいて、スモークを作成します。

これは、オートシェイプの”吹き出し”から”雲形吹き出し”を選び、これをできるだけ平らに伸ばして作成します。
できたら、図の回転ハンドルで右上がりに約30度回転させます。(1)
それを3本作成(コピー)して”塗りつぶしの色”で ”赤、黄 青” を塗り、”線なし”にしておきます(2)
先に作成した「OH」とおなじ間隔に配置してグループ化します。(3)

       (1)                   (2)                     (3) 

グループ化したものを、”スモーク”として名前付けをしておきます。

これで材料はそろったので、いつものように、画面のオブジェクト以外のところをクリックしておいて”マクロの記録”ボタンをクリックしましょう。

マクロ名には”レインボー”として「OK]します。

”OH”(3機のへり)をクリックして左下へ約5センチ移動させます。
つづいて、”スモーク”をおなじく左下へ移動させます。(これらは適当でいいです(笑))

”記録終了”ボタンをクリックします。

これで「マクロ」の記録が終了した。

それでは、Visual Basic の”Module 1”を見てみましょう。
下記のようなコードが記録されていると思います。数字などは異なっていても支障ありません。

Sub レインボー()
'
' Macro4 Macro
' マクロ記録日 :            ユーザー名 : '

'
    ActiveSheet.Shapes("OH").Select ・・・・・OH編隊
    Selection.ShapeRange.IncrementLeft -67.2
    Selection.ShapeRange.IncrementTop 31.8
    ActiveSheet.Shapes("スモーク").Select ・・・・・スモーク
    Selection.ShapeRange.IncrementLeft -66#
    Selection.ShapeRange.IncrementTop 29.4
End Sub

これをつぎのように修正してください。

Sub レインボー()
'
' Macro4 Macro
' マクロ記録日 :            ユーザー名 :

    ActiveSheet.Shapes("OH").Select
            Selection.ShapeRange.IncrementLeft -1.5  ・・・左へ移動する分
            Selection.ShapeRange.IncrementTop 1    ・・・下へいいどうする分(降下角)                                                                        

    ActiveSheet.Shapes("スモーク").Select
            Selection.ShapeRange.IncrementLeft -1.5
            Selection.ShapeRange.IncrementTop 1

End Sub

これは、編隊が画面右上から左下に向かって降下してくる部分です。したがって、これを繰り返して実行させます。

繰返しには、いつものように”For next” 文を使います。
下降繰返し回数を500回としていますが、皆さんのパソコンの画面により適宜変更して最適の回数を出してください。左へ行き過ぎたら数値を少なくします。

つぎに、今回のポイントは、スモークを途中で出し始めて、降下終了間際に消すと言うところです。
初期値では、スモークは見えなくしておきます。降下回数が40回(これも要調整)ぐらいを超えたところで出し始めます。そして、250回(要調整)ぐらいで消去させます。

それでは、ふたたび”マクロの記録”でモジュールを記録しましょう。
マクロ名は”消去”として「OK」します。

”スモーク”をクリックしてから、Ctrl+1 で”オブジェクトの書式設定”を出します。
”色と線”タブの”塗りつぶし”の中の”透明レバー”を一番右側まで動かして「OK]します。
これで、スモークの色が消えたと思います。

できあがったモジュールは十数行のコードができていると思いますが、次の2行を除いてすべて削除しましょう。

    ActiveSheet.Shapes("スモーク").Select
    Selection.ShapeRange.Fill.Transparency = 1#  ’・・・・・オブジェクトの消去(透明化)

 'スモーク出し
        If rb > 40 And rb < 250 Then   ’・・・・・繰返しに使った変数を利用します。何でもいいです。
            On Error Resume Next      ’・・・・・CTのエラー処理            
            If ct < 0 Then ct = 0 Else ct = ct - 0.1   ’・・・・・
            ActiveSheet.Shapes("スモーク").Select    
            Selection.ShapeRange.Fill.Transparency = ct  ’・・・・・透明度を下げていきます。
        End If 

最初に、初期位置を設定しておきます。
”OH”と”スモーク”の位置関係を見ながら、なんどもためして決めてください。
上下(Top)、左右(Left)、幅(Width)、高さ(Height)、それぞれの用語を確かめながら数値の増減をしてください。

さらに、降下して左下に着いたときに、遅すぎると画面の左端で止まった感じになります。
すこし余裕を持って反転させるのがコツです。”水平飛行”の「150」を増減します。

Sub Rainbow()

'初期位置
    ActiveSheet.Shapes("OH").Select
    Selection.ShapeRange.Left = 550
    Selection.ShapeRange.Top = 20
    Selection.ShapeRange.Width = 40
    Selection.ShapeRange.Height = 13
    Selection.ShapeRange.Flip msoFlipHorizontal
   
    ActiveSheet.Shapes("スモーク").Select
    Selection.ShapeRange.Left = 570
    Selection.ShapeRange.Top = 15
    Selection.ShapeRange.Width = 70
    Selection.ShapeRange.Height = 6
               
    'スモーク 消去
    ct = 1
    ActiveSheet.Shapes("スモーク").Select
    Selection.ShapeRange.Fill.Transparency = ct
   
    '飛行開始
   
    '降下角
    tp = 0.3    
    For rb = 1 To 300
            ActiveSheet.Shapes("OH").Select
            Selection.ShapeRange.IncrementLeft -1.5
            Selection.ShapeRange.IncrementTop tp
        ActiveSheet.Shapes("スモーク").Select
            Selection.ShapeRange.IncrementLeft -1.5
            Selection.ShapeRange.IncrementTop tp
       
        'スモーク出し
        If rb > 40 And rb < 250 Then
            'CTのエラー処理
            On Error Resume Next
           
            If ct < 0 Then ct = 0 Else ct = ct - 0.1
            ActiveSheet.Shapes("スモーク").Select
            Selection.ShapeRange.Fill.Transparency = ct
        End If
       
        DoEvents

        '水平飛行
        If rb > 150 Then
            tp = 0            
            If ActiveSheet.Shapes("OH").Width < 80 Then
                zm = zm + 1
                ActiveSheet.Shapes("OH").Select
                Selection.ShapeRange.Width = zm / 1.5 + 40
                Selection.ShapeRange.Height = zm / 6 + 13
               
                ActiveSheet.Shapes("スモーク").Select
                Selection.ShapeRange.Width = zm / 1.5 + 70
                Selection.ShapeRange.Height = zm / 6 + 6
               
            End If
        Else
            tp = 0.3
        End If         

        'スモーク消去
      If rb > 250 Then
            If ct < 1 Then ct = ct + 0.1 Else ct = 1
                Selection.ShapeRange.Fill.Transparency = ct
        End If

        mytimer (0.1)
       
    Next
   
    'レインボー着陸
    ActiveSheet.Shapes("OH").Select
    Selection.ShapeRange.Flip msoFlipHorizontal
   
    For ld = 1 To 90
       tpp = 1
        Selection.ShapeRange.IncrementLeft 1.5
        Selection.ShapeRange.IncrementTop tpp
        mytimer (0.1)
    Next

  ’ホバリング移動
    For ld = 1 To 300
       tpp = 0
        Selection.ShapeRange.IncrementLeft 1.5
        Selection.ShapeRange.IncrementTop tpp
        mytimer (0.03)
    Next
   
End Sub

’終了ボタン
Sub Myend()
    Cells(1, 1).Select
    End
End Sub

’タイマー
Sub mytimer(t)
mytime = Timer
Do Until Timer > mytime + t
    DoEvents
Loop

End Sub

さいごに、いつものように操作ボタンを作成します。
[表示]-[ツールバー]-[フォーム]から、”ボタン”をクリックして画面右端下端に貼り付けます。ダイヤログボックスの”マクロ名”欄にある”レインボー”をクリックします。できあがったボタンの上で、右クリック、”テキストの編集”をクリックして”ボタン1”を「レインボー」と変更します。

前回までに作成した「終了」ボタンがない場合は、上記の要領で、マクロ名に”Myend”を選択して作成します。

出来上がったら、「レインボー」ボタンをクリックしてテスト飛行に入りましょう。
(降下反転までに停止した場合は、次回OHが逆に出てきます。もういちど停止してからはじめてください)

うまく大空にカラースモークが描かれたでしょうか。成功を祈っています。

このマクロの完成見本は下記のURLで見ることができます。
http://cliplife.goo.ne.jp/play/clip/kudzo31HOq1p

次回からは、新しいシリーズを紹介していきたいと思います。

 


エクセルアニメーション第20回(応用編12)航空ショー(3)

2010-08-12 | Weblog

今回は、前回のヘリの離陸につづき、ヘリコプターのアクロバット飛行を追加します。
ただし、このアクロバットは実際にはありえない状態を表現していますので、漫画感覚で作ってみましょう。

今回のポイントは”2機同時進行”と”回転”です。2機のヘリコプターを対にして動作させます。
その際はオブジェクトの選択に注意する必要があります。
その他は、これまでの手法ですから簡単です。

それでははじめましょう。
保存してある前回の「エアーショー」ファイルをを開いてください。



オブジェクト(素材)は、前回使用したヘリコプターをコピーして2機作成します。

前回の”ヘリ”が画面から消えているときは、水平スクロールバーで右に移動させると出てきます。
そのへりを画面の中央あたりに配置しておいて(大きさを画像ハンドルで調整)、コントロールキーを押しながらドラッグすれば2機になります。さらに同じくもう1機コピーします。おわったら、前回のヘリは片隅へ動かして起きましょう。(前回のヘリは使わないように注意しましょう)

コピーした2機のヘリに”H1”と”H2”として名前をつけます。(名前の付け方は、第15回参照)このさい、先にコピーしたほうを"H2”とします。(これで、H1が前面に来ます)

”H1"を左側に、”H2”を右側に配置します。

つづいて、”H2”を反転させて向かい合わせにします。
反転は、”H2”を選択してから、図形描画バーの左端の「図形の調整」から”回転/反転”の”左右反転”をクリックします。


図(図形描画)


図(ヘリ2機)

出来上がったらいつものように自動記録でマクロを作成しましょう。

ヘリ以外の部分をクリックしてから、”マクロの記録”ボタンをクリックします。
”マクロ名”ボックスに「アクロ」といれてOKします。
ここから記録が始まります。

”H1”をクリックして、右上方向へ約3センチぐらい移動させます。
つづいて、オブジェクトの上の部分の緑のハンドルを左へ回して、ヘリが45度ぐらい傾くようにします。
これで終わりです。記録の終了ボタンを押して終了させます。

ここで記録したのは、「水平移動」、「上下移動」、「回転」の3動作です。これらを組み合わせて動作をさせます。

下のようなモジュールができたと思います。
Sub アクロ()

' アクロ Macro
' マクロ記録日 : ユーザー名 :
'
ActiveSheet.Shapes("H1").Select         ・・・オブジェクト選択

Selection.ShapeRange.IncrementLeft 41.4       ・・・右へ移動(41.4ピクセル)
Selection.ShapeRange.IncrementTop -24#        ・・・上へ移動(24ピクセル)
Selection.ShapeRange.IncrementRotation -41.71     ・・・左へ回転(41度)
End Sub
(数値は異なっていても問題ありません。)

このモジュールを次のように修正、加除していきます。

今回は、コードが多いので少しずつ分割して動作ごとに見ていきましょう。
まず、いつものように初期位置を指定します。

上のコードの ActiveSheet.Shapes("H1").Select の下の行へ付け加えていきます。
いつものようにできるだけ同じような部分はコピーアンドペーストで書きましょう。

最初は初期位置です。
ActiveSheet.Shapes("H1").Select       ・・・左のヘリ
Selection.ShapeRange.Left = 100      ・・・左端から100
Selection.ShapeRange.Top = 270      ・・・上端から270
Selection.ShapeRange.Rotation = 355   ・・・図の傾斜355度

上のブロックをそのままコピーして、下に貼り付けます。
そして、変更部分(H2、Left,Rotation)を修正していきます。

ActiveSheet.Shapes("H2").Select  ・・・右のヘリ
Selection.ShapeRange.Left = 400 ・・・左端から400
Selection.ShapeRange.Top = 270 ・・・上端から270
Selection.ShapeRange.Rotation = 15    ・・・図の傾斜15度

  これで2機が向かい合って滑走路上に配置されます。
  このさい、滑走路の表面と一致しない場合は、Selection.ShapeRange.Top = のうしろの数値を 270 から増減して調整してください。
  
  今回のように、モジュールが多い場合は、部分的に動かしながらチェックをすると間違いが少なくなりますので、その方法を紹介します。

  現在の編集画面でモジュールの中をクリックしておいて、「F8」キーを一回づつ押していきます。
  すると現在処理が行われている行が黄色に表示されコマンドが実行されます。
  実行画面(飛行場)と編集画面を並べて表示しておくとよくわかります。
  タスクバーの上で右クリックし、”左右に並べて表示”をクリックすると、2画面が左右に並びます。
  他の画面が出たときは、その画面を閉じてから、もう一度やり直してください。

  初期位置などが適当でないときは、数値を変更しながらカットアンドトライしてください。
  なお、動作を停止する場合は、ツールバーの”リセット”ボタンをクリックします。


図(リセットボタン)   
  
  2機が滑走路上に向かい合って並んだら、つぎは上昇とホバリング(空中停止)です。
  ここからは2機のヘリをべつべつに動かしますので、オブジェクトの指定を間違わないように注意しましょう。  

  先ほどのモジュールを使って修正します。
  はじめに、先ほど傾斜させたヘリを水平に戻す部分を追加します。

  ActiveSheet.Shapes("H1").Select  ・・・左のヘリ
  Selection.ShapeRange.Rotation = 0   ・・・へりの傾斜0度(飛行時の姿勢)
  ActiveSheet.Shapes("H2").Select  ・・・右のヘリ
  Selection.ShapeRange.Rotation = 0   ・・・へりの傾斜0度(飛行時の姿勢)

  つづいて上昇です。いつもの繰り返し動作 ”For...Next"を挿入します。
  
  For n = 1 To 100 ・・・以下の動作を100回繰り返す
ActiveSheet.Shapes("H1").Select       ・・・左のヘリ
Selection.ShapeRange.incrementTop -1     ・・・上へ1ピクセル
DoEvents
ActiveSheet.Shapes("H2").Select  ・・・右のヘリ
Selection.ShapeRange.incrementTop -1    ・・・上へ1ピクセル
DoEvents
Next

  あとは同じ要領で下記のコードを見ながら、間違いのないように入れていってください。
  同じような部分はコピーしてから修正すると楽にできて、間違いも少なくなります。
日本語の部分は説明です。あとで見直すときの参考にしてください。
もし、同時に記入する場合は、行の先頭に”’”(アポストロフィ)をいれることを忘れないようにしましょう。

最初に、前回終了時に"H2へり"が反転しているので、元の向かい合わせに戻すためのに次のコードを入れておきます。
'方向変換
ActiveSheet.Shapes("H2").Select
Selection.ShapeRange.Flip msoFlipHorizontal

  また、パソコンによってオブジェクトの表示される場所が異なりますから、数値を変更して調整してください。

出来上がりマクロの見本です。

Sub アクロ()

'H2の方向変換
ActiveSheet.Shapes("H2").Select
Selection.ShapeRange.Flip msoFlipHorizontal

'初期位置
ActiveSheet.Shapes("H1").Select
Selection.ShapeRange.Left = 100
Selection.ShapeRange.Top = 270
Selection.ShapeRange.Rotation = 355

ActiveSheet.Shapes("H2").Select
Selection.ShapeRange.Left = 400
Selection.ShapeRange.Top = 270
Selection.ShapeRange.Rotation = 5
  mytimer (1)

ActiveSheet.Shapes("H1").Rotation = 360
ActiveSheet.Shapes("H2").Rotation = 360
mytimer (1)

'ホバリング離陸
For N = 1 To 60
ActiveSheet.Shapes("H1").Select
Selection.ShapeRange.IncrementTop -1
DoEvents
ActiveSheet.Shapes("H2").Select
Selection.ShapeRange.IncrementTop -1
DoEvents
Next

  ’一旦ホバリング停止1秒
mytimer (1)

  ’飛行姿勢へ
ActiveSheet.Shapes("H1").Rotation = 10
ActiveSheet.Shapes("H2").Rotation = 350
mytimer (0.5)

'交差飛行
For N = 1 To 115
ActiveSheet.Shapes("H1").Select
Selection.ShapeRange.IncrementLeft 3
DoEvents
ActiveSheet.Shapes("H2").Select
Selection.ShapeRange.IncrementLeft -3
DoEvents
Next

  '宙返り
For N = 1 To 185
ActiveSheet.Shapes("H1").Select
Selection.ShapeRange.IncrementRotation -1
If N Selection.ShapeRange.IncrementLeft 0.3
Else
Selection.ShapeRange.IncrementLeft -0.3
End If
Selection.ShapeRange.IncrementTop -0.5
DoEvents    

ActiveSheet.Shapes("H2").Select
Selection.ShapeRange.IncrementRotation 1
If N Selection.ShapeRange.IncrementLeft -0.2
Else
Selection.ShapeRange.IncrementLeft 0.3
End If
Selection.ShapeRange.IncrementTop -0.5
DoEvents
Next

'反転交差
For N = 1 To 120
ActiveSheet.Shapes("H1").Select
Selection.ShapeRange.IncrementLeft -3
DoEvents
ActiveSheet.Shapes("H2").Select
Selection.ShapeRange.IncrementLeft 3
DoEvents
Next

  '再度宙返り
For N = 1 To 175
ActiveSheet.Shapes("H1").Select
Selection.ShapeRange.IncrementRotation -1
If N Selection.ShapeRange.IncrementLeft -0.3
Else
Selection.ShapeRange.IncrementLeft 0.3
End If
Selection.ShapeRange.IncrementTop 0.5
DoEvents

ActiveSheet.Shapes("H2").Select
Selection.ShapeRange.IncrementRotation 1
If N Selection.ShapeRange.IncrementLeft 0.3
Else
Selection.ShapeRange.IncrementLeft -0.3
End If
Selection.ShapeRange.IncrementTop 0.5
DoEvents
Next

  '着陸
For d = 1 To 65
ActiveSheet.Shapes("H1").Select
Selection.ShapeRange.IncrementLeft 1
Selection.ShapeRange.IncrementTop 1
DoEvents

ActiveSheet.Shapes("H2").Select
Selection.ShapeRange.IncrementLeft -1
Selection.ShapeRange.IncrementTop 1
DoEvents
Next

mytimer (1)

ActiveSheet.Shapes("H1").Rotation = 355
ActiveSheet.Shapes("H2").Rotation = 5
DoEvents

mytimer (1)

'地上滑走
For tx = 1 To 450
ActiveSheet.Shapes("H1").IncrementLeft 1
If tx = 200 Then
ActiveSheet.Shapes("H2").Select
Selection.ShapeRange.Flip msoFlipHorizontal
End If
If tx > 205 Then
ActiveSheet.Shapes("H2").IncrementLeft 1
End If
DoEvents
Next

End Sub

このモジュールだけで動かす場合は、”MyTimer(t)"が必要です(前回参照)。
これまでのマクロには追加する場合は必要ありません。

最後に、いつものようにマクロボタン(前回参照)を作って画面右下に配置します。

どうでしょう?うまくアクロバットがみられましたか。
動きが早いようなら、”Doevents”のところを、"Mytimer(0.1)ぐらいに変更するとかなり遅く動くようになります。
いろいろといじって試してみましょう。ただし、失敗したら元に戻せるように、変更する前に保存をしておきましょう。

次回は、航空ショウー最後の見せ場、カラースモークを引いたヘリの編隊を作ってみましょう。





エクセルアニメーション第19回(応用編11)航空ショー(2)

2010-06-07 | Weblog
今回は、前回の飛行機の離陸に、ヘリコプターの離陸を追加してみましょう。

ヘリコプターの離陸は飛行機と違って、通常はいったんホバリング上昇(垂直)をしたのち、前進して離陸します。

今回のポイントは”拡大手法”をを応用して機体を次第に大きくなるようにします。

これからしばらくは、前回のシーンを利用しますので、保存してある前回の「エアーショー」ファイルをを開いてください。

VBAを開いてその中に追加していきます。
したがって、”Mytimer”などはそのまま活用できます。



では、見本を参考にしてオブジェクトのヘリコプターを挿入してください。
ここでのポイントは、オブジェクトをいかにうまく切り取ってくるか、または、自作するかです。
機体以外の部分は透明でなければなりません。

背景とも切り取った場合は画像を拡大して機体と背景の境界をなぞっていきます。
このさい、ツールとして「鋏」(http://book.geocities.jp/gardeniainslumber/)という便利なソフトがあります。これをつかうと機体の細かな部分まで背景を切り落とせますので、画面に挿入したときの見栄えが違います。練習してうまくなると、何でも切り抜きたくなるようなすばらしいソフトです。(笑)

できあがったら画面に挿入しましょう。位置は適当でいいです。
今回は、これだけです。名前は”ヘリ”とつけましょう。(カタカナ、ひらがなを間違わないように)

それでは、マクロを組んでいきましょう。

画面のヘリ以外の場所をクリックしてから、[ツール]-[マクロ]-[新しいマクロの記録](XPの場合)をクリックして、”マクロの記録”ダイヤログボックスの”マクロ名”に「ヘリ離陸」と記入してOKします。ここからは記録に入ります。

挿入した”ヘリ”をクリックし、右方向へ約5センチドラッグします。
つづいて、”ヘリ”の周りのハンドル(白い○)のうち、右上の箇所をクリックして約1センチ大きくします。
これでマクロの記録は終了です。
”記録終了”ボタンを押して終了します。

出来上がったモジュールは下のようになっていると思います。(この際、数字は関係ありません)

Sub ヘリ離陸()
'
' ヘリ離陸 Macro
' マクロ記録日 : ユーザー名 :
'
ActiveSheet.Shapes("Picture 1").Select
Selection.ShapeRange.IncrementLeft 42#
Selection.ShapeRange.IncrementTop -0.6
Selection.ShapeRange.ScaleWidth 1.44, msoFalse, msoScaleFromTopLeft
Selection.ShapeRange.ScaleHeight 1.44, msoFalse, msoScaleFromBottomRight
End Sub

それでは、いま作成したモジュールを修正加除していきましょう。
オブジェクトの名前("Picture 1")を(”ヘリ”)に変更します。

はじめにヘリの初期位置です。(いつものことですが、オブジェクトの位置は、パソコンの設定や、諸元によって異なりますからそれぞれで数値を調整してください)また、大きさも見本を参考にして適宜調整しておきましょう。

飛行場の左端の滑走路の上になるように設定します。最初はこの例を参考にしてください。

'へり初期値
ActiveSheet.Shapes("ヘリ").Select・・・オブジェクトの選択
  
  Selection.ShapeRange.Left = 30・・・左端からの位置
Selection.ShapeRange.Top = 270・・・上端からの位置
   
  ここまで設定しておいて、じっさいに動かしてみて位置を確認してください。
  
  確認の方法は、画面を縮小して並べて表示させ、モジュールコードの画面内でクリックしてから、F9キーをクリックしていきます。そうすると一行づつ実行するので、ヘリの動きが確認できます。思う場所に行かなかった場合は、いったんリセットボタンを押してデバッグを中断し、数値を変えて確認を繰り返します。うまく行ったら次へ移りましょう。

  今回はオブジェクトの拡大を行いますので、初期値の大きさを設定します。
Selection.ShapeRange.Width = 80・・・(ヘリの幅)
Selection.ShapeRange.Height = 30・・・(へりの高さ)

  上昇は、モジュールとしては一番簡単な”IncrementTop”で書きます。  
  'ホバリング
  For N = 1 To 60・・・適当な高さまで調整します。
   Selection.ShapeRange.IncrementTop -2 ・・・細かく動かす場合は”-1”にしてもいいでしょう
   DoEvents ・・・忘れずに 
   mytimer (0.1) ・・・上昇速度の調整
  Next
  つぎに、右方向への移動はもっとも基本である”Incrementleft”です。
  ’離陸
 For N = 1 To 250
  Selection.ShapeRange.IncrementLeft 1 + N * 0.03 ・・・スピード拡大手法(だんだん早くする)
  Selection.ShapeRange.IncrementTop -0.8 ・・・上昇
  Selection.ShapeRange.Width = N / 1 + 80 ・・・機体をだんだん大きくする(幅)
  Selection.ShapeRange.Height = N / 3 + 30 ・・・機体をだんだん大きくする(高さ)
  mytimer (0.3 / N)・・・拡大間隔
 Next
  
 機体は画面の右方向へ消えていきます。先ほどの要領で確認をして画面に残るようなら、”離陸”の数値300ぐらいに増やしてください。

 途中の待ち時間調整などを入れて完成です。
 できあがったら、名前を”Heri”としておきましょう。

 最後に、飛行場の画面に戻って、いつものように動作ボタンを挿入して(前回参照)「マクロの登録」画面で”Heri”を選択します。ボタン名は”ヘリ離陸”と変更します。

 完成モジュールをつけておきますので参考にしてください。

Private Sub ヘリ離陸()
Dim N As Integer
'へり初期値
ActiveSheet.Shapes("ヘリ").Select
Selection.ShapeRange.Width = 80
Selection.ShapeRange.Height = 30
Selection.ShapeRange.Left = 30
Selection.ShapeRange.Top = 270
On Error Resume Next
'ホバリング
For N = 1 To 60
Selection.ShapeRange.IncrementTop -2
mytimer (0.1)
Next
mytimer (1)
'離陸
For N = 1 To 250
Selection.ShapeRange.IncrementLeft 1 + N * 0.05
Selection.ShapeRange.IncrementTop -0.8
Selection.ShapeRange.Width = N / 1 + 80
Selection.ShapeRange.Height = N / 3 + 30
mytimer (0.3 / N)
Next
End Sub

エクセル画面上に適当なオブジェクトを挿入して、名前を”へり”とつけて、VBエディターを開き、このモジュールをそのまま貼り付けても動作します。
これまでのマクロに追加する場合は必要ないのですが、あたらしくエクセルを開いて貼り付ける場合はつぎの時間調整用のモジュールが必要です。
※参考までに、時間調整用のモジュールも付けておきます。

Sub Mytimer(t)
mytime = Timer
Do Until Timer > mytime + t
DoEvents
Loop
End Sub

さいごに、いつものようにマクロボタンを作成します。名前には”ヘリ離陸”としましょう。
ボタンをクリックするとうまく動きましたか。
調整箇所が多いので根気よく繰り返して完成させましょう。

完成したら、「エアーショー」として上書き保存しておいてください。

下のURLに、見本のClipがあります、※参考にしてください。(前回のLR離陸つきです)
http://j.mp/9TVuHq

次回は、ヘリのアクロバットをやってみましょう。お楽しみに・・・

エクセルアニメーション第18回(応用編10)航空ショー(1)

2010-05-22 | Weblog

今回は、これまでの手法を活用して、“航空ショー”を作ってみましょう。

ショーは、飛行機(LR-!)の離陸、ヘリ(AH-!)の離陸、ヘリのアクロバット(AH-1×2)と、ヘリ(OH-6×3)の編隊飛行の4部構成です。
下の図は完成図です。実際の航空祭の写真を撮って素材にしています(ヘリの宙返りは「エクセルアニメーション」のいたずらです(笑)

完成図



第1部は飛行機の離陸です。

準備する素材は次のとおりです。
1 飛行場の図または、写真・・・Webで探すか、または、自分で描いてもいいでしょう。ポイントは、空の部分が大きく取れるものです。エアショーが行える広さが必要です。
完成図を参考にしてください。
2 飛行機・・・Webから検索してくるといいでしょう。
ポイントは、航空機の周りは透明であることです。前回のウサギの胴体を切り取った手法で、写真の中から飛行機だけを切り抜いて作りましょう。このできによってリアル感が違ってきます。

※ 航空機関連のすばらしいサイトを紹介しておきましょう。
(ハービーの航空機写真館http://harby.web.infoseek.co.jp/)

素材が集まったらエクセル画面に挿入していきましょう。※順序注意

エクセル画面いっぱいに飛行場写真(または図)を貼り付けます。
つぎに、飛行機を挿入して適当な場所に配置します。
飛行機の写真は、直接コピーをしてきた場合はそのままエクセル画面に貼りつきますが、ファイルとして保存した写真は、“図の挿入”から取り込みます。
下図は、飛行場の画面に飛行機を配置したところです。(赤枠が初期位置です)


飛行機に図のハンドル(周り8箇所の○)がついている状態で“名前”を付けます。
“名前ボックス”をクリックして反転させ、「LR」と入力します。これがこのオブジェクトの名前です。

終わったらいちどほかの場所をクリックしてハンドルをはずしておきます。
(そのあと、もういちど飛行機をクリックして名前ボックスに「LR」とでるか確認しておきます。出ない場合はやり直しです。)

それでは、マクロの記述に入りましょう。

これまで同様に、“マクロの自動記録”を開始します。([ツール]-[マクロ]-[新しいマクロの記録]または、マクロ用ツールの「新しいマクロの記録」ボタンをクリックします。)
マクロ名には「LR離陸」と入力します。



ここからマクロの記録が始まります。

まず、飛行機をクリックして、そのまま斜め右上へ約2センチドラッグします。
つづいて、図のハンドルの上にある緑のをクリックして約2ミリほど左へ回転させます。このとき、飛行機は左へ傾きます。



これでマクロの記述は完了です。

それでは、  ボタンを押してVisual Basic Editorを開きましょう。
(ボタンがない場合は、[ツール]-[マクロ]-[ Visual Basic Editor]、または、「Alt+F11」)) 
左のペーンの Module1 をダブルクリックします。


今記録したモジュールが下のようにでき上がっていると思います。

Sub LR離陸()
'
' LR離陸 Macro
' マクロ記録日
'
ActiveSheet.Shapes("LR").Select
Selection.ShapeRange.IncrementLeft 51#
Selection.ShapeRange.IncrementTop -19.8
Selection.ShapeRange.IncrementRotation -18.43
End Sub
数字は違っていても問題ありません。

各行の説明:
1行目は、オブジェクト(LR)の選択
2行目は、右へ移動
3行目は、上へ移動
4行目は、左へ回転

それではこのモジュールを次のように変更しましょう。
いつものようにできるだけコピーアンドペーストでコードを挿入していきます。
文字のスペース、ピリオド(ドット)にとくに注意しましょう。


Sub LR離陸()

Dim RT As Integer
Dim N As Integer

‘エラー対策
On Error Resume Next

'離陸位置・・・ 離陸位置は画面左下端(赤枠)に調整します
Selection.ShapeRange.Left = 10   ・・・ 飛行機の左端からの位置(調整)
Selection.ShapeRange.Top = 225   ・・・ 飛行機の上端からの位置(調整)
Selection.ShapeRange.Rotation = 360

'地上滑走
For N = 1 To 120      ・・・ 飛行機の移動範囲(画面の右端まで)(調整)
Selection.ShapeRange.IncrementLeft 0.1 * N

  'ローテーション
If N > 40 Then ・・・ローテーション開始地点
RT = Selection.ShapeRange.Rotation
If RT > 350 Or RT <1 Then<br>
Selection.ShapeRange.IncrementRotation ―1  ・・・ 飛行機の姿勢角
DoEvents
End If
End If

  '離陸
If N > 50 Then ・・・上昇開始地点
Selection.ShapeRange.IncrementLeft 1 ・・・上昇速度
Selection.ShapeRange.IncrementTop ―1 ・・・上昇角度(調整)
DoEvents
End If
MyTimer (0.05)
Next N
End Sub

‘時間調整
Sub MyTimer(t)
mytime = Timer
Do Until Timer > mytime + t
DoEvents
Loop
End Sub

できあがったら操作ボタンを付けましょう。
[表示]-[ツールバー]-[フォーム]から“ボタン”をクリックしておいてから画面の右下端にクリックして貼り付けましょう。(完成図参照)



航空機の位置は、パソコンの表示倍率、画面の解像度、モニターの大きさなどにより異なりますので、上記モジュール内の数値を変更してもっとも適切な位置を決めてください。

離陸ボタンを押すと、飛行機は左下端の離陸位置から出発して、速度を次第に上げて離陸していきます。

"Cleared For Take-Off" うまく出発しましたか?

完成クリップは下記URLで見られます。
http://bit.ly/9dNB8l

成功したら。ファイル名を「エアーショー」として保存しておいてください。
次回からこれに追加していきます。

次回は、ヘリの離陸を予定しています。

エクセルアニメーション第18回(応用編10)クリスマスカード

2009-10-20 | Weblog

今回からは、”エクセル動くクリスマスカード”を作成してみましょう。

完成見本です。



今回紹介するのは、斜め移動、拡大、縮小、画面切り替えです。

まず、素材を集めましょう。素材は次の5点です。
1.もみの木



2.サンタクロースX2(1個をコピー )
3、そり
4.プレゼント(8個ぐらい)
5.雪景色 (適当な絵、または、写真を準備)画面いっぱいに挿入)
6.ワード
7.星(10個ぐらい)

それでは、さっそく取り掛かりましょう。

1.2.3.4は、完成図とちがっていてもいいので、クリップアートなどから自分の気に入ったものを取り込みましょう。
今回は、インターネット上のフリー素材から取り込みました。

5の「雪景色」は、フリー素材屋HOSHINOさんのサイト
「http://www.s-hoshino.com/f_photo/fuyu.html」からいただきました。

6は、ワードアートで作成します。
[挿入]-[図]-[ワードアート]でサンプル文字(ここに文字を入力)のところに”Merry Christmas"と入れます。字の大きさはあとで調整しますから、フォント(Times New Roman)見本をみながら選んでください。



7は、オートシェイプの星とリボンの星を使って10個コピーします。

すべてが入ったら、それぞれに名前をつけましょう。
名前のつけ方は”エクセルアニメーション 第2回”を参照してください。

左向きの小さなサンタ(そりに乗せる)・・・サンタ1
上から降りてくるサンタ・・・サンタ2
右向きの小さなサンタ(帰りのそりに乗せる)・・・サンタ3

あとは、”そり”、”ワード”とします。(プレゼント、雪景色、もみノ木は変更しません)

星は、間違わないように、”星1”から”星10”まで名前をつけましょう。

材料が揃ったら製作にとりかかりましょう。

まず、背景の”雪景色”をクリックして、周りにハンドル(白い丸)が付いたらドラッグして画面いっぱいに拡大します。(大きさは、パソコンの解像度などにより異なりますから調整してください。)

見本を参考にして
”もみノ木”の大きさを調整しておいて、画面の左位置に配置しましょう。
”そり”を画面右端に配置しましょう。
”サンタ”を小さくしてそりの座席に乗るように持ってきます。
”ワードアート”を小さくして、画面左上に配置します。

これからいよいよマクロの記録に入ります。
今回は、3個のオブジェクト(そり、サンタ、ワード)を移動させますので、途中でやり直ししないように注意しましょう。
失敗したら、全部削除してやり直しをしてください。修正するよりそのほうが早いでしょう。

第3回で作成した”マクロの記録”ボタンをクリックします。

まず、そりのクリップの周りに、ハンドル(白い小さな○)が付いていたときは、一度、ほかの場所をクリックしてハンドルをなくしておきます。

“そり“をクリックして数センチ左へ移動させます。
つぎに、“サンタ”をクリックして左上へ動かします。
つづいて、“ワード”をクリックして画面中央まで、右下方向へ移動させます。
さらに、“ワード”の大きさを、見本を参考にして拡大します。このさい、少しぐらい大きさが違っても問題ありません。

「記録終了」ボタンを押します。これで、マクロの記録は終了です。

出来上がったマクロは次のようなものです。数値が違っていても問題ありません。

Sub Macro1()
' Macro1 Macro
' マクロ記録日 : ユーザー名 :
' Keyboard Shortcut:

ActiveSheet.Shapes("そり").Select
Selection.ShapeRange.IncrementLeft -50.4
Selection.ShapeRange.IncrementTop -14.95

ActiveSheet.Shapes("サンタ").Select
Selection.ShapeRange.IncrementLeft -39.88
Selection.ShapeRange.IncrementTop -28.25

ActiveSheet.Shapes("ワード").Select
Selection.ShapeRange.IncrementLeft 39.88
Selection.ShapeRange.IncrementTop 28.25
Selection.ShapeRange.ScaleWidth1.85,msoFalse, msoScaleFromTopLeft
Selection.ShapeRange.ScaleHeight4.94,msoFalse,msoScaleFromTopLeft

End Sub

ここから説明をしていきます。

この部分は、“そり”を左に移動する部分です。
ActiveSheet.Shapes("そり").Select
Selection.ShapeRange.IncrementLeft -50.4・・・左へ
「Selection.ShapeRange.IncrementTop 14.95」(Top)がある場合は、その行は削除します。

これにより左へ移動します。

つぎの部分は、“ワード”(Merry Christmas)を右下へ移動します。
ActiveSheet.Shapes("ワード").Select
Selection.ShapeRange.IncrementLeft 39.88
Selection.ShapeRange.IncrementTop 28.25

つぎの部分は、“ワード”を拡大する部分です。
Selection.ShapeRange.ScaleWidth1.85,msoFalse, msoScaleFromTopLeft
数値(1.85)は倍率です。

この部分は“ワード”の高さを拡大します。
数値(4.94)は倍率です。
Selection.ShapeRange.ScaleHeight4.94,msoFalse,msoScaleFromTopLeft
  
ただし、今回は倍率は使わず、絶対数で拡大していきます。

それでは、完成コードは次のようになります。

前回までと同じく、できるだけコピーアンドペーストで修正を行いましょう。そのほうが、用語の打ち間違い(英文のつづりの間違い)などが起こらなくて便利です。 (名前に間違いがなければ、そのまま貼り付けても動きます)
数値は、画面を見ながら少しずつ変更して調整してください。

Sub 初期値()
'サンタ1(そりの上)
ActiveSheet.Shapes("サンタ1").Visible = True
ActiveSheet.Shapes("サンタ1").Select
Selection.ShapeRange.Left = 690
Selection.ShapeRange.Top = 325
Selection.ShapeRange.Width = 30

'サンタ2
ActiveSheet.Shapes("サンタ2").Visible = True
ActiveSheet.Shapes("サンタ2").Select
ActiveSheet.Shapes("サンタ2").Select
Selection.ShapeRange.Left = 50
Selection.ShapeRange.Top = 50
Selection.ShapeRange.Width = 50
Selection.ShapeRange.Visible = False

'サンタ3
ActiveSheet.Shapes("サンタ3").Visible = True
ActiveSheet.Shapes("サンタ3").Select
Selection.ShapeRange.Left = 125
Selection.ShapeRange.Top = 110
Selection.ShapeRange.Width = 50
Selection.ShapeRange.Visible = False

'メリークリスマス
ActiveSheet.Shapes("文字").Select
Selection.ShapeRange.Left = 50
Selection.ShapeRange.Top = 100
Selection.ShapeRange.Width = 10

'そり
ActiveSheet.Shapes("そり").Visible = True
ActiveSheet.Shapes("そり").Select
Selection.ShapeRange.Left = 550
Selection.ShapeRange.Top = 330

'プレゼント
For P = 1 To 8
ActiveSheet.Shapes("図" & P).Visible = False
Next

End Sub
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
'そりの行進
Sub Parade()
'Macro
' マクロ記録日 : ユーザー名 :
'
' Keyboard Shortcut:

’音楽を入れる場合(今回は入れません)
'ミュージック
’ActiveSheet.Shapes("Object 69").Select
’Selection.Verb Verb:=xlPrimary

初期値   ’これはマクロ名ですですから、間違わないように。

'そりの行進
For n = 1 To 300  ’もみの木のそばまで
'そり
ActiveSheet.Shapes("そり").Select
Selection.ShapeRange.IncrementLeft -1
DoEvents
'サンタ
ActiveSheet.Shapes("サンタ1").Select
Selection.ShapeRange.IncrementLeft -1
DoEvents
Next

'サンタ上昇
ActiveSheet.Shapes("サンタ1").Select
For n = 1 To 60
Selection.ShapeRange.IncrementLeft -5
DoEvents
Mytimer (0.05)
Selection.ShapeRange.IncrementTop -4
Mytimer (0.05)
DoEvents
Next

'そり反転
ActiveSheet.Shapes("そり").Select
Selection.ShapeRange.Flip msoFlipHorizontal
Selection.ShapeRange.Left = 300

'サンタ切り替え
ActiveSheet.Shapes("サンタ1").Visible = False '小さいサンタを消す
ActiveSheet.Shapes("サンタ2").Visible = True '大きいサンタを出す

'Merry Christmasの縦横比を固定
ActiveSheet.Shapes("文字").Select
Selection.ShapeRange.LockAspectRatio = msoTrue '縦横比固定

'Merry Christmasの文字をだんだん大きく
For n = 1 To 60
ActiveSheet.Shapes("文字").Select
Selection.ShapeRange.Height = n
Selection.ShapeRange.IncrementLeft 1
Selection.ShapeRange.IncrementTop 1.2
DoEvents

'サンタもいっしょに
ActiveSheet.Shapes("サンタ2").Select
Selection.ShapeRange.IncrementLeft 1
Selection.ShapeRange.IncrementTop 1.2
DoEvents
Next

'文字だけ右へ
For n = 1 To 70
ActiveSheet.Shapes("文字").Select
Selection.ShapeRange.IncrementLeft 3
DoEvents
Next

'サンタプレゼント配り
P = 2
ActiveSheet.Shapes("サンタ2").Select
ActiveSheet.Shapes("図1").Visible = True

r = 1: rr = 1
For n = 1 To 330
Selection.ShapeRange.IncrementLeft 1 * r
Selection.ShapeRange.IncrementTop 0.5
Selection.ShapeRange.IncrementRotation 10 * rr
rr = rr * -1
Mytimer (0.1)

On Error Resume Next

If n Mod 40 = 0 Then
ActiveSheet.Shapes("図" & P).Visible = True
P = P + 1
End If
'反転
If Selection.ShapeRange.Left > 250 Or Selection.ShapeRange.Left r = r * -1
End If

Next

'サンタ消滅
Selection.Visible = False
'--------------------------------------------------------------------
'帰り
'小さいサンタに変更
ActiveSheet.Shapes("サンタ3").Visible = True

'そりの帰り
For n = 1 To 350
'サンタ
ActiveSheet.Shapes("サンタ3").Select
Selection.ShapeRange.IncrementLeft 1
DoEvents
'そり
ActiveSheet.Shapes("そり").Select
Selection.ShapeRange.IncrementLeft 1
DoEvents
Next

ActiveSheet.Shapes("そり").Select
Selection.ShapeRange.Flip msoFlipHorizontal '反転

'ツリー点滅

Dim L As Integer
Dim S As Integer

On Error Resume Next 'エラー回避

Mylamp:

L = 1: S = 1

Do While True    'Loopまでを繰り返し

'空の星
ActiveSheet.Shapes("星" & S).Visible = False
DoEvents
Mytimer (0.2)
ActiveSheet.Shapes("星" & S).Visible = True
DoEvents
S = S + 1
If S > 10 Then S = 1
Mynext:
L = L + 1
If L > 11 Then GoTo Mylamp
rep = rep + 1
If rep > 50 Then
初期値
Range("a1").Select
Exit Sub
End If
Loop

End Sub
Sub 終了()
初期値
Range("a1").Select
End
End Sub


最後に、前回作成した ”Sub Mytimer”をコピーして貼り付けて置いてください。

Sub Mytimer(t)
mytime = Timer
Do Until Timer > mytime + t
DoEvents
Loop
End Sub


出来上がったら、”スタート”ボタンと”停止”ボタンをつけて動かしてみましょう。

うまく動きましたか?完成図のようにならない場合は、数値を変更して何回もテストをして決定してください。
手を掛けるほど、真心のこもったカードが出来上がりますよ。
では、今回はこれで終了です。

「Merry Christmas!」 Good Luck!

参考作品
http://yahoo.jp/box/GGyoSQ












エクセルアニメーション第17回(応用編9)お月見

2009-09-30 | Weblog

お月見

今回は、中秋の名月にちなんでお月見といきましょう。
ちなみに、今年の中秋の名月は、10月3日だそうです。

完成図



今回の技法は、回転(Rotation)です。
複数のオブジェクトを同時に回転させる方法の基本も取り入れています。

主役はウサギたちです。

例によって、画面の枠線を消しておきます(前回参照)

つづいて、画面いっぱいに図形ツールバーの”四角”を配置し、1色が青、2色がスカイブルーのグラデーションをつけておきます。空の部分です。

また、前回の島を参考にして遠くの山を描いておきましょう。

そして素材を集めましょう。
必要なのは、もちをつくウサギだけです。ほかのオブジェクトはオートシェイプなどで作成したり、Web上などから適宜集めて並べましょう。

もちをつくウサギは、クリップアートにあります。
[挿入]-[図]-[クリップアート]で、“餅つき”で検索してください。
見つかったらクリックして挿入してください。





挿入したウサギから部品を作成します。

それには、画面を自由線で(矩形ではない)切り取るソフトが必要です。ここでは、”Faststone"というフリーソフトを使いました。インターネット上からダウンロードすることができます。(シェアウエアもあります)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ここで、画面キャプチャに便利なソフトを紹介します。
“Faststone Capture”と言うフリーソフトです。

インターネット上の下記のサイトからダウンロードしてください。
http://www.gigafree.net/tool/capture/faststonecapture.html

このソフトは、画像の任意の場所を、自由な形に切り取ることができます。

起動すると通知領域(画面右下の時計の横)にアイコンが出て、それをクリックすると右上部にツールバーが出ます。

“フリーハンド”ツールをクリックして、図のほしい部分を自由に切り取ることができます。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
起動すると、次のようなツールボックスが開くので、”フリーハンド”をクリックしてください。



さきほどDLしたウサギを、次のように、頭と胴体と臼とに分解します。





頭と胴体をもう一つずつ作ります。(Ctrlを押しながらドラッグ)
コピーした頭と胴体を“図形の調整”から“回転/反転”で反転させます。
そして、臼を中心にして向かい合わせます。



杵が臼のこちら側に来ないように”臼”を右クリックして”順序”で”最前面”にしておきます。
同時に、頭の部分と胴体が不自然にならないように注意して配置してください。細かいところは動かしながら調整をしていきましょう。

つぎに、“月”を作成します。
図形描画ツールバーの”楕円”をクリックして、完成図を参考にしながら真円(Shift キーを押しながら)を描きます。
図形描画ツールバーをつかって、“塗りつぶしの色”=黄色  “線の色”=無しにしておきます。

つぎに、“雲”を作成します。
図形描画ツールバーの[オートシェイプ]-[吹き出し]-[雲形吹き出し]
をクリックして空の分に作成します。

吹き出し口の黄色のひし形を雲の中央に向かってドラッグして見えなくします。

雲を右クリックして、書式設定からグラデーションで”下”を黒、”上”を白にしておきます。

この雲をコピーして3個作ります。完成図を参考にして、それぞれ大きさ、向き、位置を変えて適当に配置しましょう。

つづいて、ウサギの餅つきを月の中でも同時にするために、ウサギの餅つきをそっくり月の中にコピーして入れましょう。

まず、配置の終わった左右のウサギと臼の一対をコピーしましょう。
図形ツールバーの”オブジェクトの選択”(”図形の調整”と”オートシェイプ”の間にある矢印)ツールで一対を完全に(重要)囲むようにドラッグして、ハンドルが付いたら月の中へドラッグ&ドロップします。
その後、大きさを調整して月の中に入れます。

これでできあがりです。

あとは、完成図の左のウサギの親子や、右のススキと団子などは、インターネット上から適当に見つけて配置してください。

つぎに、部品に名前をつけます。
これまでの作品とおなじ要領で名前をつけましょう。つけ方は第15回の星の名前付けの要領です。間違わないように注意してください。

月のウサギの右側の頭・・・みぎ
月のウサギの左側の頭・・・ひだり
大きな方のウサギの右側の頭・・・みぎ大
大きな方のウサギの左側の頭・・・ひだり大

これだけです。

これまでで大切なのは、“杵を持った頭の部分”です。できるだけ忠実に切り取ってください。
からだが自然に動くかどうかはこの部品にかかっています。

いつものように、”スタートボタン”を作りましょう。作成方法は、前回を参照してください。

最後に、マクロコードを記述しておきます。
とくに、名前をしっかりチェックしてください。

Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 :
'
'初期位置
ActiveSheet.Shapes("みぎ").Rotation = 35
ActiveSheet.Shapes("ひだり").Rotation = -37
ActiveSheet.Shapes("みぎ大").Rotation = 35
ActiveSheet.Shapes("ひだり大").Rotation = -37

’もちをつく回数
For i = 1 To 10
’右側がつく
  Migituku
’ついた杵を上げる
Migiage
’左側がつく
Hidarituku
’ついた杵を上げる
Hidariage
Next
Range("a1").Select
End Sub

Sub Migituku()
ActiveSheet.Shapes("みぎ").Select
For n = 1 To 30
Selection.ShapeRange.IncrementRotation -1
DoEvents
Next
ActiveSheet.Shapes("みぎ大").Select
For n = 1 To 30
Selection.ShapeRange.IncrementRotation -1
DoEvents
Next
End Sub

Sub Hidarituku()
ActiveSheet.Shapes("ひだり").Select
For n = 1 To 30
Selection.ShapeRange.IncrementRotation 1
DoEvents
Next
ActiveSheet.Shapes("ひだり大").Select
For n = 1 To 30
Selection.ShapeRange.IncrementRotation 1
DoEvents
Next
End Sub

Sub Hidariage()

ActiveSheet.Shapes("ひだり").Select
For n = 1 To 30
Selection.ShapeRange.IncrementRotation -1
DoEvents
Next
ActiveSheet.Shapes("ひだり大").Select
For n = 1 To 30
Selection.ShapeRange.IncrementRotation -1
DoEvents
Next
End Sub

Sub Migiage()
ActiveSheet.Shapes("みぎ").Select
For n = 1 To 30
Selection.ShapeRange.IncrementRotation 1
DoEvents
Next
ActiveSheet.Shapes("みぎ大").Select
For n = 1 To 30
Selection.ShapeRange.IncrementRotation 1
DoEvents
Next
End Sub
’ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Sub MyTimer(t)
Mytime = Timer
Do Until Timer > t + Mytime
DoEvents
Loop
End Sub

’終了ボタン用
Sub myend()
Range("a1").Select
End
End Sub

(このマクロの部分をコピーして、VBEの”標準モジュール”に貼り付けても動きます。)

うまく地上と月の両方で餅をつきますか?
のんびりとウサギの餅つきを見ながら、名月を楽しんでください。

参考画面
http://yahoo.jp/box/DtrqBc




エクセルアニメーション第16回(応用編8)日の出

2009-06-22 | Weblog

 


今回は、勇壮な日の出のシーンを作って見ましょう。



手法としては、”移動”と”フェードイン”(透明)です。
暗い夜から朝日が出て明るくなる状況がうまく出せれば成功です。

はじめに[ツール]-[メニュー]-[オプション]-[表示]の”ウインドウオプション”の中の”枠線”のチェックをはずし、画面のセルを消しておきます。

次の順序で配置していきます。

1.空

”図形描画”ツールバーの”四角形”で、B1セルから L15セルまでの四角形を作ります。ただし、PCの解像度などによって大きさを調整してください。

  つづいて、四角内で右クリックし、”オートシェイプの書式設定”で [色と線]-[塗りつぶし]-[塗りつぶしの効果]-[グラデーション]として、1色(上)を”黄”、2色(下)を”赤”にして「OK」します。
  ”線”の”色”で”線なし”にします。空の部分です。

2.太陽

”図形描画”ツールバーの”楕円”をつかって直径約3センチの円を作ります。円を描くときにShiftキーを押しながら描くと真円になります。

  つづいて、円内で右クリックし、”オートシェイプの書式設定”で [色と線]-[塗りつぶし]-[塗りつぶしの効果]-[グラデーション]として、1色(上)を”赤”2色(下)を”黄”にして「OK」します。
”線”の”色”で”線なし”にします。



名前を”太陽”として,空の中央に配置しておきます。大体の位置でいいです。

3.海

おなじく、”四角形”で、B15セルからL28セルまで四角を作ります。。空の部分にわずかに重なるように描きます。
  
  つづいて、四角内で右クリックし、”オートシェイプの書式設定”で [色と線]-[塗りつぶし]-[塗りつぶしの効果]-[グラデーション]として、1色を”緑”にして「OK」します。(2色は自動的につきます。)これで海の下の部分が濃い青になります。
”線”の”色”で”線なし”にします。海の部分です。



星は、オートシェイプの”星とリボン”から、”星4”をクリックして海の部分に描きます(空に書くと見にくい)。大きさは一辺を約5ミリにしておいて、塗りつぶしの色を"黄"、”線なし”とします。
これを選択して、Ctrlキーを押しながらドラッグして、10個のコピーを作ります。
名前を”星1”から”星10”までつけておきます。
星をクリックしておいて、名前ボックス(下面の左上)をクリックし、青反転したところで”星1”と入力してEnterします。これを”星10”まで繰り返します。

できあがったら、見本を見ながら空の中に左右、上下、できるだけ順不同でちりばめるように配置してください。

ここで、マクロの原型をを作成しておきましょう。

「ツール」メニュー[マクロ]-[新しいマクロの記録]をクリックします。
そのまま、太陽をクリックして、約1センチ上方へドラッグします。
つづいて、星のうちの一つをクリックして選択(周囲に白丸がついた)状態にして右クリック。オートシェイプの書式設定の”色と線””塗りつぶし””透明”のスライダーを中央(約50%)まで動かしておきます。

「マクロ記録の終了」ボタンを押します。

[ツール]-[マクロ]-[Visual Basic Editor]で確認しておきましょう。

下のようなコードが生成されたと思います。
数字は違っていても問題ありません。赤字の行は不要なのでは削除してください。

Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : ユーザー名
'
ActiveSheet.Shapes("太陽").Select
’ Selection.ShapeRange.IncrementLeft -1.8
Selection.ShapeRange.IncrementTop -7.2


ActiveSheet.Shapes("星7").Select
Selection.ShapeRange.Fill.Visible = msoTrue
Selection.ShapeRange.Fill.Solid
Selection.ShapeRange.Fill.ForeColor.SchemeColor = 13
Selection.ShapeRange.Fill.Transparency = 0.96

' Selection.ShapeRange.Line.Weight = 0.75
' Selection.ShapeRange.Line.DashStyle = msoLineSolid
' Selection.ShapeRange.Line.Style = msoLineSingle
' Selection.ShapeRange.Line.Transparency = 0#
' Selection.ShapeRange.Line.Visible = msoFalse 

End Sub

ツールバーの”表示Microsoft Excel"ボタンを押して、もう一度、エクセル画面に戻ります。

4.つぎに、空の部分と同じ大きさの”四角形”を作成します。(これが今回の技です)これを、空の部分に重ねます。空の部分が真っ白になったと思います。

  四角の中で右クリックし、”オートシェイプの書式設定”の [色と線]-[塗りつぶし]で、「色」を”青”とし、”透明”のスライダーを右いっぱい(100%)に動かしておきます。”線”の”色”で”線なし”にします。これで空が見えてきます。
そのまま(ほかの場所をクリックしないように)"空”として名前をつけておきます。



つぎに、その他の素材つくりをしましょう。

山、波です。

山はオートシェイプの”線”から”フリーハンド”で作成します。
塗りつぶしの色をグラデーションで、上を”緑”、下を”濃い緑”にし、”線なし”にします。名前はいりません。



もう1個コピーして左右に配置します。左の山を”図形の調整の"回転/反転"の”左右反転”で反対向きにして、図のハンドルをドラッグして形を少し変化させます。


最後に波は、オートシェイプの”線”から”フリーハンド”を使って見本を見ながら小さな山形を描いていきます。ひと筆書きですからなれないと難しいかもしれませんがやってみましょう。
これも、星と同じ要領で10個コピーします。色は白のままで、大きさは見本を見ながら適当に伸ばしたり縮めたりしてからランダムに配置します。
名前いりません。

ここまでで、部品がそろいました。

5.ここで、完成図を参考にしながら島と波を最終的に配置してください。

6.最後に外枠部分を”四角形”で作成します。  
  空と海すべてを正しく囲むように作成します。

  ”オートシェイプの書式設定”の [色と線]-[塗りつぶし]で”塗りつぶしなし”を指定します。

  ”線”の”色”から”線のパターン”をクリックし、右下の”ひし形(強調)”をクリックし、”前景”ー黒 ”背景”ー赤に指定します。つづいて”太さ”を「15Pt」にして「OK」します。



これらは、順序を間違うと見えなくなったり、効果が出なくなりますから間違わないようにしてください。

スタート画面
夜明け前の暗い海

終了画面
夏の太陽が昇ったところ

いまは、明るい空の状態で見えるはずです。

それでは、マクロのコードを入れていきましょう。
前回までの要領を参考にしながら間違わないように書いていってください。

先ほど生成されたコードを基本に手直しをしていきます。
なるべく同じコードはコピーをしながら進めると間違いが少なくなると思います。
とくに、名前を間違わないようにしましょう。("'"のついた行は説明です。書かないようにしましょう)

完成コードは次のとおりです。

Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : ユーザー名 :

'太陽の初期位置
ActiveSheet.Shapes("太陽").Select
Selection.ShapeRange.Top = 230
Selection.ShapeRange.Left = 280

’星の順序
star = 1

For n = 0 To 1 Step 0.01

’空をゆっくり明るくする
ActiveSheet.Shapes("空").Select
Selection.ShapeRange.Fill.Transparency = n

'星の瞬き(消去)
For s = 0 To 1 Step 0.01
ActiveSheet.Shapes("星" & star).Select
Selection.ShapeRange.Fill.Transparency = s
DoEvents
Next

’空が明るくなったら星を消す
If n > 0.6 Then
Mytimer (0.6)
GoTo Mynext
End If

’星の瞬き(出現)
For s = 1 To 0 Step -0.01
ActiveSheet.Shapes("星" & star).Select
Selection.ShapeRange.Fill.Transparency = s
DoEvents
Next

Mynext:
’星の10番まで行ったら1番へ戻す
star = star + 1
If star > 10 Then star = 1

’太陽が昇る
ActiveSheet.Shapes("太陽").Select
Selection.ShapeRange.IncrementTop -0.3
Next

Cells(1, 1).Select

End Sub

'------------------------------------------------------------------
'タイマー(手入力してください)

Sub Mytimer(t)
  Mytime = Timer 
  Do Until Timer > Mytime + t
    DoEvents
  Loop
End Sub

'------------------------------------------------------------------

さいごに”スタートボタン”を作成します。
[表示]-[ツールバー]-[フォーム]-[ボタン]で画面の適当な場所をクリックして貼り付けます。

マクロの登録画面で”Macro1”を選択して「OK」します。
そのまま、ボタン内を1回クリックしてテキストを「日の出」と修正します。

これで完成です。

参考画面
http://yahoo.jp/box/CAuA6d


次回は中秋の名月を予定しています。おたのしみに・・・







エクセルアニメーション第15回(応用編7)梅雨-2

2009-06-15 | Weblog

前回の続きとして中央のカエルが柳に飛びつくところを作成します。



今回の素材は"飛び上がったカエル"と、柳の木だけです。
インターネット上から探してきてもいいのですが、前回のカエルに少々手を入れて描いてもいいでしょう。
自分でオートシェイプなどを使って作成するのもエクセルアニメーションの楽しみ方のひとつです。

"飛び上がったカエル”は“カエル上”と言う名前で前回の”Picture 1”と同じフォルダに保存しておきましょう。


ほかの素材も同じフォルダに保存しておきましょう。











つぎに、前回のエクセルを起動して、今回の”カエル上”を取り込みます。
[挿入]-[図]-[ファイルから]で素材の入ったフォルダの”カエル上”を指定します。
場所は画面の中央で適当にしておきましょう。初期位置で指定します。

つづいてVBEを開いて(Alt+F11)前回のモジュールを表示しましょう。


Sub ホップ() '
' ホップ Macro
' マクロ記録日 : ユーザー名
'
ActiveSheet.Shapes("Picture 1").Select
'初期値
Selection.ShapeRange.Left = 0 '画面左端
Selection.ShapeRange.Top = 300 '画面やや下のほう
DoEvents
For m = 1 To 4 ' ホップ回数
v = 3 ' ホップする高さ
For n = 1 To 61 'v の値X20 + 1
'v が3なら61となります
Selection.ShapeRange.IncrementLeft 1 '右への移動量
Selection.ShapeRange.IncrementTop -v '上下移動量
v = v - 0.1 'ジャンプ角度
DoEvents
Next n
'停止時間
tt = Timer
Do Until Timer > tt + 0.5 '0.5秒経過待ち
DoEvents
Loop
Next m

ジャンプ

End Sub

Sub ジャンプ()

ActiveSheet.Shapes("カエル上").Visible = True
ActiveSheet.Shapes("カエル上").Select

'初期値 (位置はパソコンによって最適なところを見つけてください。数値を変えると位置が変わります。)
Selection.ShapeRange.Left = 280 '画面中央
Selection.ShapeRange.Top = 100 '画面やや下のほう

ActiveSheet.Shapes("カエル上").Visible = False

ActiveSheet.Shapes("Picture 1").Visible = True
ActiveSheet.Shapes("Picture 1").Select '前回のカエル

For m = 1 To 3 '飛び上がる回数

v = 10 '高さ
For n = 1 To 51 '高さ×5+1
Selection.ShapeRange.IncrementTop -v '上下移動値
v = v - 0.4
DoEvents

Next n
DoEvents
Next m

ActiveSheet.Shapes("Picture 1").Visible = False

'飛びつき成功
ActiveSheet.Shapes("カエル上").Visible = True '上カエル出現
ActiveSheet.Shapes("カエル上").Select

'降下
For n = 1 To 60
Selection.ShapeRange.IncrementTop 1
DoEvents
Next n

ActiveSheet.Shapes("カエル上").Visible = False
ActiveSheet.Shapes("Picture 1").Visible = True '下のカエル出現

'カエル反転
Selection.ShapeRange.Flip msoFlipHorizontal


'カエル帰る
For m = 1 To 4 ' ホップ回数
v = 3 ' ホップする高さ
For n = 1 To 61 'v の値X20 + 1
'v が3なら61となります
Selection.ShapeRange.IncrementLeft -1 '左への移動量
Selection.ShapeRange.IncrementTop -v '上下移動量
v = v - 0.1 'ジャンプ角度
DoEvents
Next n

'停止時間
tt = Timer
Do Until Timer > tt + 0.5 '0.5秒経過待ち
DoEvents
Loop
Next m

Range("a1").Select

End Sub

Sub Mytimer(t) '待ち時間調整サブルーチン
'停止時間
MyTime = Timer
Do Until Timer > MyTime + t 't 秒経過待ち
DoEvents
Loop
End Sub

これで基本的な動作は完了しましたので、テストをして見ましょう。

前回作ったボタンをクリックすると、かえるが左端から画面中央までホップ、ステップしてきます。中央で止まって上へ3回ジャンプします。4回目に柳の枝につかまったあと、ゆっくりと降りてきます。
左向きに反転してもとの位置へ帰ります。

どうですか?うまく動きましたか。
まったく動かない場合、オブジェクト(カエル)の名前が間違っていませんか。
位置が合わない場合、数値を変更してみましょう。

うまくいったら最後の仕上げをしましょう。

完成図を参考にして、ほかのオブジェクトを挿入してください。

追加するオブジェクトは、カミナリ、稲妻、カタツムリ、言葉2種類です。
ことばは、オートシェイプの吹き出しを使って作ります(名前を間違わないように)。



配置は、完成図を参考にしながら挑戦してみて下さい。
ほかにも好きなものを取り込んで画面を飾ると楽しいものになるでしょう。
ついでに、それらを動かしてみるといいでしょう。(名前をしっかり確認)

完成図


飛びつき成功の場面

さいごに、全体のマクロの一例を紹介しておきます。
不明な点は前回までの解説を参考にしてください。

なお、”Picture 1”は、”カエル左”に変更してあります。


Sub 柳にカエル()
' マクロ記録日 : ユーザー名 :

'初期位置
'カエル上
ActiveSheet.Shapes("カエル上").Visible = True
ActiveSheet.Shapes("カエル上").Select
Selection.ShapeRange.Left = 350
Selection.ShapeRange.Top = 180
Selection.Visible = False

'カエル左
ActiveSheet.Shapes("カエル左").Visible = True
ActiveSheet.Shapes("カエル左").Select
Selection.ShapeRange.Left = 0
Selection.ShapeRange.Top = 330
Selection.ShapeRange.Rotation = 0

'雷
ActiveSheet.Shapes("カミナリ").Select
Selection.ShapeRange.Top = 50
Selection.ShapeRange.Rotation = 0

'カタツムリ
ActiveSheet.Shapes("カタツムリ").Select
Selection.ShapeRange.Top = 330
Selection.ShapeRange.Left = 500
Selection.ShapeRange.Rotation = 0

'言葉(やった~~)
ActiveSheet.Shapes("やった~").Visible = False

'言葉(がんばれ~~)
ActiveSheet.Shapes("がんばれ").Visible = False

'実行
ホップステップ
Mytimer (1)
For r = 1 To 3
Selection.ShapeRange.Rotation = -20
Mytimer (1)
Selection.ShapeRange.Rotation = 0
Mytimer (1)
Next
For h = 1 To 3
ジャンプ
ActiveSheet.Shapes("がんばれ").Visible = True
稲妻
カタツムリ
ActiveSheet.Shapes("がんばれ").Visible = False
Next
ActiveSheet.Shapes("カエル左").Select
For m = 1 To 20
Selection.ShapeRange.IncrementTop -3
Mytimer (0.01)
Next
Mynext:
ActiveSheet.Shapes("カエル左").Visible = False
ActiveSheet.Shapes("カエル上").Visible = True
ActiveSheet.Shapes("やった~").Visible = True
カミナリ
稲妻
'カエル上さがる
ActiveSheet.Shapes("カエル上").Select
For m = 1 To 80
Selection.ShapeRange.IncrementTop 1
Mytimer (0.01)
Next
ActiveSheet.Shapes("カエル上").Visible = False
ActiveSheet.Shapes("カエル左").Visible = True
ActiveSheet.Shapes("カエル左").Top = 330
ActiveSheet.Shapes("やった~").Visible = False
Mytimer (0.5)
'カエル反転
ActiveSheet.Shapes("カエル左").Select
Selection.ShapeRange.Flip msoFlipHorizontal
Mytimer (1)
'カエル帰る
rt = -1
ホップステップ
Selection.ShapeRange.Flip msoFlipHorizontal
Range("a1").Select
End Sub

Sub ホップステップ()
ActiveSheet.Shapes("カエル左").Select
If Selection.ShapeRange.Left rt = 1
Else
rt = -1
End If
For m = 1 To 4 'ホップ回数
v = 4 '高さ
For n = 1 To 16 'v * 5 + 1
Selection.ShapeRange.IncrementLeft 4 * rt '移動量
Selection.ShapeRange.IncrementTop -v
v = v - 0.4 'ホップ角度
Mytimer (0.01)
Next n
'停止時間
Mytimer(.5)
Next m
End Sub

Private Sub ジャンプ()
ActiveSheet.Shapes("カエル左").Select
v = 8
For n = 1 To 41
Selection.ShapeRange.IncrementTop -v
v = v - 0.4 'ホップ角度
Mytimer (0.01)
Next n
End Sub

Private Sub ガンバレ出()
ActiveSheet.Shapes("がんばれ").Visible = True
End Sub

Private Sub ガンバレ消し()
ActiveSheet.Shapes("がんばれ").Visible = False
End Sub

Private Sub カタツムリ()
ActiveSheet.Shapes("カタツムリ").Select
Selection.ShapeRange.IncrementRotation -10
Mytimer (0.5)
Selection.ShapeRange.IncrementRotation 10
Mytimer (0.5)
End Sub

Private Sub カミナリ()
ActiveSheet.Shapes("カミナリ").Select
For i = 1 To 5
Selection.ShapeRange.IncrementRotation 5
Mytimer (0.3)
Selection.ShapeRange.IncrementRotation -5
Mytimer (0.3)
Next
End Sub

Private Sub 稲妻()
ActiveSheet.Shapes("稲妻さん").Visible = True
ActiveSheet.Shapes("稲妻さん").Select
For L = 1 To 3
Selection.ShapeRange.Visible = True
Mytimer (0.5)
Selection.ShapeRange.Visible = False
DoEvents
Next
End Sub

'時間調整
Private Sub Mytimer(t)
Mytime = Timer
Do Until Timer > Mytime + t
DoEvents
Loop
End Sub


かわいい?かえるのジャンプを楽しんでください。見本クリップは下記のURLから見られます。

参考画面
http://yahoo.jp/box/tao0NY


次回は、雄大な海をテーマにする予定です。