こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

▲ExcelのVBA▼困っています

何度もVBAで質問させてもらい助けてもらっています。
懲りずにまた質問ですが…

下のプログラムは"●"が跳ね返るものなのですが…
●の後を■と▲が追うようなプログラムにするには
なにを追加すればいいのでしょうか…?;
どなたか教えて下さい;;お願いします;;

Dim time1 As Integer, time As Integer
Dim X As Integer, Y As Integer
Dim maru As String, yoko As String, tate As String

Sub 描画()
Cells(X, Y).Value = maru
End Sub

Sub 削除()
Cells(X, Y).Value = ""
End Sub

Sub 待機()
For time1 = 0 To 1000
For time2 = 0 To 1000
Next
Next
End Sub

Sub 座標移動()

If yoko = "右" Then
Y = Y + 1
Else
Y = Y - 1
End If

If Y = 30 Then
yoko = "左"
ElseIf Y = 1 Then
yoko = "右"
End If

If tate = "上" Then
X = X + 1
Else
X = X - 1
End If

If X = 20 Then
tate = "下"
ElseIf X = 1 Then
tate = "上"
End If

End Sub

Sub main()

maru = "●"
X = 1
Y = 1
yoko = "右"
tate = "上"

Do
描画
待機
削除
待機
座標移動
Loop

End Sub

大変申し訳ございませんが、この投稿に添付された画像や動画などは、「BIGLOBEなんでも相談室」ではご覧いただくことができません。 OKWAVEよりご覧ください。

マルチメディア機能とは?

投稿日時 - 2009-08-06 22:10:15

QNo.5187630

困ってます

質問者が選んだベストアンサー

Dim time1 As Integer, time As Integer
Dim X As Integer, Y As Integer
Dim X1 As Integer, Y1 As Integer
Dim X2 As Integer, Y2 As Integer
Dim maru As String, yoko As String, tate As String
Dim sankaku As String, shikaku As String

Sub 描画()
Cells(Y2, X2).Value = shikaku
Cells(Y1, X1).Value = sankaku
Cells(Y, X).Value = maru
End Sub

Sub 削除()
Cells(Y2, X2).Value = ""
End Sub

Sub 待機()
For time1 = 0 To 1000
For time2 = 0 To 1000
Next
Next
End Sub

Sub 座標移動()

X2 = X1
Y2 = Y1
X1 = X
Y1 = Y
If yoko = "右" Then
X = X + 1
Else
X = X - 1
End If

If X = 30 Then
yoko = "左"
ElseIf X = 1 Then
yoko = "右"
End If

If tate = "上" Then
Y = Y + 1
Else
Y = Y - 1
End If

If Y = 20 Then
tate = "下"
ElseIf Y = 1 Then
tate = "上"
End If

End Sub

Sub main()

maru = "●"
sankaku = "▲"
shikaku = "■"
X = 1
Y = 1
X1 = 1
Y1 = 1
X2 = 1
Y2 = 1
yoko = "右"
tate = "上"

Do
描画
待機
削除
待機
座標移動
Loop

End Sub

通常「横方向はX、縦方向はYにする」のが普通なので、XとYを入れ替えました。

投稿日時 - 2009-08-06 23:18:43

お礼

わざわざご丁寧にプログラムまで書いて頂き
本当にありがとうございます!!

とても勉強になります

投稿日時 - 2009-08-06 23:42:57

このQ&Aは役に立ちましたか?

5人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

追記。

削除の処理では
・●があった場所は▲で上書きするので、●は消さなくても良い
・▲があった場所は■で上書きするので、▲は消さなくても良い
・■があった場所のみ消せばよい
ので、■があった場所しか削除していません。

投稿日時 - 2009-08-06 23:22:28

お礼

おお。そうですねそうですよね
物凄く納得しました

ありがとうございます!

投稿日時 - 2009-08-06 23:41:52

ANo.2

もしくは
●が移動する前に現在の■のXYを▲のXYに代入、●のXYを■のXYに代入
●移動■移動▲移動
という感じでもいいと思います。

投稿日時 - 2009-08-06 22:45:33

お礼

そんな考え方思いつきませんでした…!
アドバイスありがとうございます!!

投稿日時 - 2009-08-06 23:45:14

ANo.1

■と▲用のXとYを新たに追加して
その座標が●の現在の座標のひとつ&ふたつ前になるようにすればいいですね。

基本的には

■X=X-1
▲X=X-2

とかになりますよね。

投稿日時 - 2009-08-06 22:36:41

お礼

な、なるほどぉ
参考になります。ありがとうございます!

投稿日時 - 2009-08-06 23:46:26

あなたにオススメの質問