<   2005年 12月 ( 25 )   > この月の画像一覧

図形を動かす

今回は遊びで図形を動かしてみることにした。
図形といってもクリップアートを挿入しただけの手抜き作業だ・・・
キー操作(←、→)で図形の動く方向を決めて、スペースキーでこのマクロを中止してみる。
e0080122_12515937.gif

Option Explicit
Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal vkey As Long) As Long

Sub 動く車()
 Dim mycar As Shape
 Dim myflg As Boolean
 Dim x As Integer
  Set mycar = ActiveSheet.Shapes("車")
  myflg = True
  x = 0

  Do While myflg = True
     If GetAsyncKeyState(39) <> 0 Then'右方向キー
       x = 1
     End If

    If GetAsyncKeyState(37) <> 0 Then'左方向キー
      x = -1
    End If

    If GetAsyncKeyState(32) <> 0 Then'スペースキー
       myflg = False
    End If
        mycar.IncrementLeft x
          DoEvents
  Loop
End Sub
[PR]
by slayer0210 | 2005-12-06 13:00 | マクロ

重複データを除く表を作成(関数)

以前に重複データを削除するマクロを載せたが、今回は関数によって表を作成してみた。
まずは予めC列などに最初に出現するデータの行番号を表示させておく
=IF(B2<>B1,ROW(),"")』などと入力すればOKだろう。
次に表示させたい場所を(この場合はE2に『=INDEX($A$1:$A$11,SMALL($C$2:$C$11,ROW()-1))』と入力し
下にコピー。その要領の式をF列にも施せば完成だ。
e0080122_1020698.gif

[PR]
by slayer0210 | 2005-12-06 10:20 | エクセル一般

オートシェイプの真ん中に文字を入れる

オートシェイプに文字を入れる場合は、右クリックして『テキストの追加』を選択する。
しかし下図のように上詰め、左寄せに入ってしまい、後から色々と調整しなければならない。
e0080122_8434575.gif

これをマクロでやるとどうなるのか?ためしにやってみた。
今回はテキスト部分はA1に入力した文字をそのまま使ってみることにした。

Sub ど真ん中に配置()
 Dim 楕円 As Shape
 Set 楕円 = ActiveSheet.Shapes("en") '予めオートシェイプに名前をつけてある
   With 楕円.TextFrame
     .Characters.Text = Range("A1").Value
     .HorizontalAlignment = xlHAlignCenter
     .VerticalAlignment = xlVAlignCenter
   End With
End Sub
e0080122_849792.gif

[PR]
by slayer0210 | 2005-12-06 08:50 | マクロ

行列を入れ替える(関数)

表のデータの行列を入れ替える場合は、通常は『形式を選択して貼り付け』で『行列を入れ替える』を選択する。
今回はちょっと変わった手で、TRANSPOSE関数を使ってみる。
e0080122_21505723.gif

上図のように、予め表示したいセルを選択しておいて、TRANSPOSE関数を挿入する。
これは配列なので、Ctrl+Shift+Enterで確定すると、一気に表示される。
[PR]
by slayer0210 | 2005-12-05 21:53 | エクセル一般

タイマー(未完成)

今回はオートシェイプで時計みたいな図を描き、その針を1秒ごとに動かして3分間計測するものを作ってみた。
使用目的は、自分がラーメンを作る際に利用できないか?的な感じだが。
e0080122_9493.gif

Sub ラーメン時計()
 Dim myobj As Shape
 Dim i As Integer
 Dim j As Integer
 Set myobj = ActiveSheet.Shapes("針")

 With myobj
  For j = 1 To 3
    For i = 1 To 360 Step 6
      Application.Wait (Now + TimeValue("0:00:01"))
        .IncrementRotation 6
     Next
   Application.Speech.Speak j & "分" 'しゃべらす必要はないが
  Next
 End With
   Application.Speech.Speak "ラーメンが出来ました"
   'しゃべらす必要はないがめでたいので・・・
End Sub

構文的にあってるかどうかは別として、目的のものは出来たので良かった。
しかし実際問題、ラーメンは2分半くらいが一番旨い・・・と思う。
[PR]
by slayer0210 | 2005-12-01 09:10 | マクロ