2012年11月26日
ど~しても、仕事をしたくないときの遊び方♪
今日の記事は「何を書こうかな~」と、なかなか決まらなかったので、"仕事に集中できないとき"を想定して記事を書いてみたいと思います。

事務系のお仕事をされている方は、仕事に集中できないと眠気が襲ってきたり、憂鬱な気分になると思います。

そのような仕事に集中できないときに、"ちょっと遊ぶツール"を作ってみました♪(あまり期待しないで下さい・・・)



事務系の仕事では、表計算ソフトのエクセルを日常的に使用すると思いますが、仕事をしているように見せながら(?)、大好きな車の画像で遊ぶことができます。





用意するものは、自分の好きな車の画像になりますが、

前面からのものを1つ
左向きのものを1つ
右向きのものを1つ
後ろ向きのものを1つ


の合計4つの画像が必要になります。


このときに、できるだけ背景が白い画像の方が良いと思います。

※エクセルのシート上で、車が往来するだけですので、作業に取りかかる前に軽く最後まで読んでからの方が良いと思います。


一例として、トヨタの86の画像を4枚用意しますので、この画像でテストしてみても良いと思います(保存するファイル名は何でも構いません)。












この画像を適当なフォルダに保存して、挿入タブの「図」から、4つの画像をエクセルシートに表示させて下さい。

※2007以前のバージョンでは、たしか「挿入⇒図⇒ファイルから」という流れで画像を挿入できたと思います。





このときのシートは「Sheet1」に挿入してください。


画像が挿入されたら、4枚の画像に「名前」を付けます。

左向き:86LEFT
右向き:86RIGHT
前向き:86COME
後向き:86GO


と、間違えないように付けて下さい。

※名前の付け方は、関数を入れるところの左側のところに、直接入力することで付けることができます。



名前が付け終わったら、「Alt + F11」を同時に押し、VBEというエディタを開きます。





そして、『挿入→標準モジュール』と選択し、「Option Explicit」の次の行あたりに、次のコードをコピー&ペーストして貼り付けてみて下さい。





少し長いですが、


'↓↓↓↓↓ ここから ↓↓↓↓↓

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Public ORIGINAL_COME_W As Integer
Public ORIGINAL_GO_W As Integer


'===== ここの数値で調整します。 =====
Public Const LEFT_RIGHT_MAX As Integer = 1000 '横方向・移動範囲の上限値
Public Const COME_GO_MIN As Integer = 30 '前後方向・どの程度小さくするか?
Public Const COME_DEF_LEFT As Integer = 400 '向かってくる車両の左右方向の位置
Public Const COME_DEF_TOP As Integer = 150 '    〃    上下方向の位置
Public Const GO_DEF_LEFT As Integer = 400 '去っていく車両の左右方向の位置
Public Const GO_DEF_TOP As Integer = 150 '    〃   上下方向の位置

Public Const PLAY_LOOP As Integer = 5 '5回登場させる・繰返し回数

'===== ここまで。後は変更する必要ありません。 =====

Public Sub sPlay86()

ORIGINAL_COME_W = Sheets("Sheet1").Pictures("86COME").Width
ORIGINAL_GO_W = Sheets("Sheet1").Pictures("86GO").Width

Call fReset86
Call fHide86 '一度、非表示

Dim intI As Integer
Dim intLoop As Integer

For intLoop = 1 To PLAY_LOOP

Randomize
intI = Int(4 * Rnd() + 1)

Select Case intI

Case 1
Call fLeftDrive
Case 2
Call fRightDrive
Case 3
Call fComeDrive
Case 4
Call fGoDrive

End Select

Next intLoop

Call fReset86 '再表示

End Sub


'画像表示を元に戻します。
Public Function fReset86()

With Sheets("Sheet1").Shapes("86LEFT")
.Left = 0
.Top = 0
.Visible = True
End With

With Sheets("Sheet1").Shapes("86RIGHT")
.Left = 0
.Top = 80
.Visible = True
End With

With Sheets("Sheet1").Shapes("86COME")
.Left = 0
.Top = 160
.Width = ORIGINAL_COME_W
.Visible = True
End With

With Sheets("Sheet1").Shapes("86GO")
.Left = 0
.Top = 300
.Width = ORIGINAL_GO_W
.Visible = True
End With

End Function

Public Function fHide86()

With Sheets("Sheet1").Shapes("86LEFT")
.Visible = False
End With

With Sheets("Sheet1").Shapes("86RIGHT")
.Visible = False
End With

With Sheets("Sheet1").Shapes("86COME")
.Visible = False
End With

With Sheets("Sheet1").Shapes("86GO")
.Visible = False
End With

End Function

'左方向に移動
Public Function fLeftDrive()

Dim intSpeed As Integer

Randomize
intSpeed = Int(5 * Rnd() + 1)

With Sheets("Sheet1").Shapes("86LEFT")

.Left = LEFT_RIGHT_MAX
.Top = 320

.Visible = True

Do Until .Left = 0
.Left = .Left - 1
Sleep intSpeed * 5
DoEvents
Loop

.Visible = False

End With

End Function

'右方向に移動
Public Function fRightDrive()

Dim intSpeed As Integer

Randomize
intSpeed = Int(5 * Rnd() + 1)

With Sheets("Sheet1").Shapes("86RIGHT")

.Left = 0
.Top = 0

.Visible = True

Do Until .Left = LEFT_RIGHT_MAX
.Left = .Left + 1
Sleep intSpeed * 5
DoEvents
Loop

.Visible = False

End With

End Function

Public Function fComeDrive()

Dim intSpeed As Integer

Randomize
intSpeed = Int(5 * Rnd() + 1)

With Sheets("Sheet1").Shapes("86COME")

.Left = COME_DEF_LEFT
.Top = COME_DEF_TOP
.Width = COME_GO_MIN

.Visible = True

Do Until .Width >= ORIGINAL_COME_W
.Width = .Width + 2
.Left = .Left - 1
.Top = .Top - 1
Sleep intSpeed * 5
DoEvents
Loop

.Visible = False

End With

End Function

Public Function fGoDrive()

Dim intSpeed As Integer

Randomize
intSpeed = Int(5 * Rnd() + 1)

With Sheets("Sheet1").Shapes("86GO")

.Left = GO_DEF_LEFT
.Top = GO_DEF_TOP
.Width = ORIGINAL_GO_W

.Visible = True

Do Until .Width = COME_GO_MIN
.Width = .Width - 2
.Left = .Left + 1
.Top = .Top + 1
Sleep intSpeed * 5
DoEvents
Loop

.Visible = False

End With

End Function

'↑↑↑↑↑ ここまで ↑↑↑↑↑


少し長いですが、貼り付けられましたか?

貼り付けが完了したら、エディタは閉じて頂いて構いません。






その後、貼り付けたマクロを実行しますが、「sPlay86」というマクロを実行します。

ここで、マクロの実行方法が分からない!という方でOffice2007以降の方は、ファイルタブをクリックして、「オプション→リボンのユーザー設定」から、[開発]チェックボックスをオンにしてOKで使用できるようになります。

開発タブをクリックしたら、左の方に「マクロ」というのが表示されると思います。そこをクリックして「sPlay86」を選択します。


2007以前でのマクロの実行方法は、「ツール → マクロ → マクロの実行」だったと思います。


画像が表示される位置などは、コードの上の方に設定するところがありますので、環境に合わせて調整してみて下さい。


※動作させている途中で中断したいと思うことがあると思います。
そのときは「Ctrl + BREAK」で「終了」を選択すると止めることができます。


トヨタ86
http://toyota.jp/86/index.html
Posted at 2012/11/26 01:01:42 | コメント(4) | トラックバック(0) | コラム | イベント・キャンペーン