初歩的なことでスミマセン…小4のkunpaです。
 今、トップビュー方式のレースゲームを作ろうと思っているんですが、
キーボードの方向キーを押したら、車が動くと同時に画面がスクロールする
方法、教えてもらえないでしょうか。
 ホントに初歩的なことでご迷惑おかけいたします。すみません。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

以前に画像の移動のサンプルを載せてます。


参考になれば見てください。

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=167464
    • good
    • 0
この回答へのお礼

どうも、同じような質問をしている人がいるとは思いませんでした。
 コードを書いてくれるとは嬉しいです。
 コードは絵を変えればいいだけですね。
これからも宜しくお願いします。

お礼日時:2001/11/28 19:08

こんにちは、honiyonです。



 マップのスクロールの仕方について解答します。
 スクロールには様々な方法がありますが、一番簡単なのは大きなマップを用意し、画面にはその一部分だけ表示する方法です。

 まず、新聞紙を床に広げて見てください。
 そして、右手の人差し指と親指でマルを作ってください。 そしてそのマルの中から新聞紙を見てください。 
 そのマルがパソコンの画面で、新聞紙が背景の画像です。
 そのように大きな画像を用意して、その一部分だけを表示します。 手のマルを右に動かしながら、新聞を見てください。 新聞紙(背景画像)がスクロールしているように見えませんか? 
 この原理を使えばスクロールが出来ます。

 ではこれをちょっとプログラムっぽく説明します。
 1000x1000ドットの背景画像を読み込み、そのうちの (0,0)-(100,100)を画面に表示します。 (0,0)-(100,100)という書き方は、LINE文と一緒です。(X1,Y1)-(X2,Y2)って感じです。

 四角形があるとすると、

(X1,Y1)
↓ココ
□□□□□□
□□□□□□
□□□□□□
□□□□□□
□□□□□□←ココ(X2,Y2)

 です。(こんな説明で分かるかな^^;)

 右にスクロールさせるなら、背景画像の表示させる位置を少しずつ右にずらしていきます。(X1とX2の値を大きくしていく)
 (1,0)-(101,100)
(2,0)-(102,100)
(3,0)-(103,100)
 ...

 同じようにして下なら、Y1と Y2の値を多くしていきます。


 うまく説明できないのですが...(^^; こんな感じになります。


 まずは、車を抜きにして、マップをスクロールさせるだけのサンプルプログラムを作ってみましょう。
 この原理を自分なりにプログラムにしてみてください。

 因みにこの利点は仕組みが簡単なこと、そして欠点は大きな画像を読み込まないといけないので、大きいマップを作ろうとするとメモリをたくさん使ってしまうところです。

 参考になれば幸いです(..
 

この回答への補足

分かりやすいご回答をありがとうございます。
 コードそのもの、または参考URLをつけてもらえれば
もっとうれしいです。(^^;
わがまま言ってすみません・・・

補足日時:2001/11/25 16:53
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QEXCEL VBA ワークシートのコピーについて

seaclearsky8です。

一つのブックに何枚ものワークシートを追加して保存するVBAについて
ご教授、よろしくお願いします。

コピー元 

MASTER Book MASTER Workseets

コピー先

Copy Book copy Worksheets


コピー元にはワークシートがMASTERワークシートの一枚しかありません。

その一枚のワークシートに値をVBAで入れていき処理し

コピー先のコピーBOOKにワークシートをコピーしていきたいです。

しかし、MASTERBOOKの処理が何通りかあり、

コピー元の一枚のワークシートに
処理別にデータを写し

コピー先BOOKに

         ワークシート名
ワークシート1 処理1ワークシート 
ワークシート2 処理2ワークシート
ワークシート3 処理3コピー元ワークシート3

という具合にワークシートを複数コピーしたいのですが

処理ごとにデータを代入し、コピー処理はできるのですが。

コピー先BOOK

ワークシート3 処理3ワークシート

だけしかコピーされてないBOOKが作成されます。
上書きされているのだと思われます。

対処法が調べましたが見つけられていません。

すいませんが対処法及び参考VBA等ご教授宜しくお願いいたします。

seaclearsky8です。

一つのブックに何枚ものワークシートを追加して保存するVBAについて
ご教授、よろしくお願いします。

コピー元 

MASTER Book MASTER Workseets

コピー先

Copy Book copy Worksheets


コピー元にはワークシートがMASTERワークシートの一枚しかありません。

その一枚のワークシートに値をVBAで入れていき処理し

コピー先のコピーBOOKにワークシートをコピーしていきたいです。

しかし、MASTERBOOKの処理が何通りかあり、

コピー元の一枚のワークシートに
処理別にデータを写し

コピ...続きを読む

Aベストアンサー

今どういうコードを書いているのか不明なので、とりあえず
「1つのシートを別のブックに複数回コピーする」ための参考ソースを書きます。
コピー元のブックに下記ソースを貼り付けて実行してもらえば
新規ブックにコピー元のシートが3枚コピーされると思います。
(新規ブックを追加しているのでシート数は3枚より多くなります)

Sub copySheet()
Dim masterWb As Workbook
Dim masterSh As Worksheet
Dim copyWb As Workbook

Set masterWb = ThisWorkbook
Set masterSh = masterWb.Sheets(1)
Set copyWb = Workbooks.Add

'ここからが実際のコピー処理です。
'単純に3回コピーメソッドを呼び出して3回コピーしています。
masterSh.Copy before:=copyWb.Sheets(1)
masterSh.Copy before:=copyWb.Sheets(1)
masterSh.Copy before:=copyWb.Sheets(1)

End Sub

今どういうコードを書いているのか不明なので、とりあえず
「1つのシートを別のブックに複数回コピーする」ための参考ソースを書きます。
コピー元のブックに下記ソースを貼り付けて実行してもらえば
新規ブックにコピー元のシートが3枚コピーされると思います。
(新規ブックを追加しているのでシート数は3枚より多くなります)

Sub copySheet()
Dim masterWb As Workbook
Dim masterSh As Worksheet
Dim copyWb As Workbook

Set masterWb = ThisWorkbook
Set masterSh = masterWb.Sheets(1)
Set copyWb = W...続きを読む

QMSHFlexGrid に関して初歩的な質問でスミマセン

こんにちわ

コード内で ADO レコードセットにデータを取得し、MSHFlexGridのDataSource に設定して表示しています。

このMSHFlexGridの選択されたセルの値を取得する方法ご存知の方いらっしゃいましたら、よろしくお願い致します。

ヘルプなどでさんざん調べたのですが、どーしても見つかりません。
まさか出来ないなんて事無いですよね.....

と言う事で、大変初歩的な質問で申し訳無いのですが、よろしくお願い致します。

Aベストアンサー

.Textまたは.TextMatrix(.Row, .Col)

QEXCEL VBA ワークシートのコピーについて

seaclearsky8です。

一つのブックに何枚ものワークシートを追加して保存するVBAについて
ご教授、よろしくお願いします。

コピー元 

MASTER Book MASTER Workseets

コピー先

Copy Book copy Worksheets


コピー元にはワークシートがMASTERワークシートの一枚しかありません。

その一枚のワークシートに値をVBAで入れていき処理し

コピー先のコピーBOOKにワークシートをコピーしていきたいです。

しかし、MASTERBOOKの処理が何通りかあり、

コピー元の一枚のワークシートに
処理別にデータを写し

コピー先BOOKに

         ワークシート名
ワークシート1 処理1ワークシート 
ワークシート2 処理2ワークシート
ワークシート3 処理3ワークシート

という具合にワークシートを複数コピーしたいのですが

処理ごとにデータを代入し、コピー処理はできるのですが。

コピー先BOOK

ワークシート3 処理3ワークシート

だけしかコピーされてないBOOKが作成されます。
上書きされているのだと思われます。

対処法が調べましたが見つけられていません。

すいませんが対処法及び参考VBA等ご教授宜しくお願いいたします。

seaclearsky8です。

一つのブックに何枚ものワークシートを追加して保存するVBAについて
ご教授、よろしくお願いします。

コピー元 

MASTER Book MASTER Workseets

コピー先

Copy Book copy Worksheets


コピー元にはワークシートがMASTERワークシートの一枚しかありません。

その一枚のワークシートに値をVBAで入れていき処理し

コピー先のコピーBOOKにワークシートをコピーしていきたいです。

しかし、MASTERBOOKの処理が何通りかあり、

コピー元の一枚のワークシートに
処理別にデータを写し

コピ...続きを読む

Aベストアンサー

> 配列にワークシートのオブジェクトを入れることとか可能なのでしょうか?

それは多分できないと思います。


> 複数のセル・シートを何回もコピーする場合にでるらしいです。

多分、メモリをたくさん使っちゃってるせいでしょうね。
まず、メモリ使用を減らすようにしましょうか。

・testwriteの最後にオブジェクト変数のメモリ解放を行う。
 具体的には以下のように書く。もうやってたらすみません。
Set cbook = Nothing
Set mastersheet = Nothing
・testwriteの中でのブックオープンおよび保存をやめる。
 新規ブックのオープンをtestwriteを呼ぶ前に1度だけ行い、
 testwriteの中ではその新規ブックに対してシートを追加していく。
 そしてtestwriteの処理が全部終わったら、
 新規ブックの全シートを1度に「記録シートYYYY/MM/DD.xls」にコピーする。

それでも駄目でしたら、以下の回答No.1を試してみてください。
http://oshiete.goo.ne.jp/qa/1822561.html

> 配列にワークシートのオブジェクトを入れることとか可能なのでしょうか?

それは多分できないと思います。


> 複数のセル・シートを何回もコピーする場合にでるらしいです。

多分、メモリをたくさん使っちゃってるせいでしょうね。
まず、メモリ使用を減らすようにしましょうか。

・testwriteの最後にオブジェクト変数のメモリ解放を行う。
 具体的には以下のように書く。もうやってたらすみません。
Set cbook = Nothing
Set mastersheet = Nothing
・testwriteの中でのブックオープンおよび保存をやめ...続きを読む

Q初歩の初歩

VBAをかじっている者です。
VBについても勉強していきたいと思っているのですが、初歩中の初歩についてよくわかっていません。ご教授下さい。

VBAはエクセル等から実行可能だと思います。
VBってどこで実行させるのでしょうか?
FORTRANなどのようにコンパイルして実行するとかそういう流れなのでしょうか?
それともVBを動かすためのソフトが必要になってくるのでしょうか?

初歩中の初歩で大変申し訳ないのですが、困っております。宜しくお願いいたします。

Aベストアンサー

私と同じくらいのレベルの方とお見受けしました。VBは現在はVisual Stadio 2005 の無料版がマイクロソフトより出ていますのでまず、それをダウンロードしないとVBでプログラムを書くことはできません。VBAはエクセル上でしか動きませんよね。VBはエクセル関係なく動きます。よく入門書なんかには、電卓やカレンダーなんかのプログラムの作成が乗っていますが、それはエクセル関係なくデスクトップ上に表示されます。ただ、VBAとVBは似ているといえば似ていますが、レベルは雲泥の差はかなり違うと思います。私も、かなり沢山の本を買って勉強しています。エクセルでの機能のみを考えたらVBAのほうが、いいかもしれません。もし、Officeとの関連を考えるのであれば、VSTOだと思います。わたしはVSTOを買って勉強中ですが。また使い切れないです。VBAのほうが、超簡単で。でも、VBAは所詮VBAで、たとえば変数をstring型でどうしても、数万回ループさせなければならないときなど、遅くなってしまいます。これが、VBだと
string型を数値にかえてできたりするので、スピードがぜんぜん違うくなったりとか。クラス化できるとか。コントロール(ボタンみたいなもの)の数が全然違うとか、色々あります。ただ、勉強が必要になります。VBAはちょっと勉強すれば、それなりにできますがVBはしっかり勉強しないと自分の意図する目的に合わせてプログラムを作成するまでにはなれないという感じでしょうか。チャレンジ精神旺盛、好奇心旺盛、理数が好き、難しいことになると意欲が沸く、いくら勉強していても飽きない。ようなら、克服できます。私もプログラマーでもないのに魅せられて勉強中です。

私と同じくらいのレベルの方とお見受けしました。VBは現在はVisual Stadio 2005 の無料版がマイクロソフトより出ていますのでまず、それをダウンロードしないとVBでプログラムを書くことはできません。VBAはエクセル上でしか動きませんよね。VBはエクセル関係なく動きます。よく入門書なんかには、電卓やカレンダーなんかのプログラムの作成が乗っていますが、それはエクセル関係なくデスクトップ上に表示されます。ただ、VBAとVBは似ているといえば似ていますが、レベルは雲泥の差はかなり違うと...続きを読む

QEXCELのVBAでシートコピーをしたとき元のマクロを削除するには?

VBAのマクロでシートのコピーをしたいのですが、元のシートにはVBAのコードが含まれています。コピーするのはデータだけのコピーが必要で、マクロ自体は必要ないのですが、それを削除するコードはどのように書いたらいいのでしょうか?
どうしてもコピーしたファイルを開くと「マクロが含まれています」という確認メッセージが出てしまうのですが、それもなくしたいのです。
シートにフォームのボタンが配置されている場合も同様に、そのボタン自体をなくした状態でコピーを行いたいのですが・・・。プログラムで行うのは不可能なのでしょうか?

Aベストアンサー

No2です。
サンプルコードを書いてみました。
「オリジナル」という名前のシートを別ブックとしてコピペ保存します。

Sub サンプル()
Dim sc As Integer
sc = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 1
ThisWorkbook.Sheets("オリジナル").Cells.Copy 'コピー
Workbooks.Add 'ブック追加
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlValues '値貼り付け
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlFormats '書式貼り付け
Sheets("Sheet1").Name = "コピー"
Application.CutCopyMode = False
Application.SheetsInNewWorkbook = sc
ActiveWorkbook.Close
ThisWorkbook.Activate
End Sub

No2です。
サンプルコードを書いてみました。
「オリジナル」という名前のシートを別ブックとしてコピペ保存します。

Sub サンプル()
Dim sc As Integer
sc = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 1
ThisWorkbook.Sheets("オリジナル").Cells.Copy 'コピー
Workbooks.Add 'ブック追加
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlValues '値貼り付け
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlFormats '書式貼り付け...続きを読む

Q階層フレキシブル グリッド コントロール のスクロールバーを表示しない状態でスクロールさせる方法は?

VB6.0で階層フレキシブル グリッド コントロールを
3個をそれぞれ明細部・縦計部・横計部として使用して、
スクロールを連動させて表示したいと思っています。
ただ、グリッドコントロールのそれぞれにスクロールバー
を表示させるのはあまり見栄えがよくないので、
垂直スクロールバーで、明細と横計の上下スクロール、
水平スクロールバーで、明細と縦計の左右スクロールを
制御しようと思い、
とりあえず、グリッドコントロールの
ScrollBarsプロパティーをflexScrollNoneに設定してTopRowプロパティーとLeftColプロパティーの値を
適当に設定してみたのですが、左上のセルは(1,1)
が表示されたままでした。

なんとか、うまくスクロールさせる方法はないでしょうか?

Aベストアンサー

スクロールバーを表示していないと、スクロールできないみたいです。(多分)
(ヘルプにはキーボードでの入力時の事しか書いてありませんでした。)

そこで、下記のようにしてみたらどうでしょう?

Private Sub HScroll1_Change()
  With MSHFlexGrid1(0)
    .Visible = False
    .ScrollBars = flexScrollBarHorizontal
    .LeftCol = HScroll1.Value
    .ScrollBars = flexScrollBarNone
    .Visible = True
  End With
End Sub

一部分だけですが・・・
(1)グリッドを非表示にする。(画面のちらつきが起こらないように)
(2)スクロールバーを表示する。
(3)左上のセルを変更する。
(4)スクロールバーを非表示に戻す。
(5)グリッドを表示する。

説明がなくても分かるとは思いますが念のため。
もっと、簡単な方法(設定)があったらすみません。

スクロールバーを表示していないと、スクロールできないみたいです。(多分)
(ヘルプにはキーボードでの入力時の事しか書いてありませんでした。)

そこで、下記のようにしてみたらどうでしょう?

Private Sub HScroll1_Change()
  With MSHFlexGrid1(0)
    .Visible = False
    .ScrollBars = flexScrollBarHorizontal
    .LeftCol = HScroll1.Value
    .ScrollBars = flexScrollBarNone
    .Visible = True
  End With
End Sub

一部分だけですが・・・
(1...続きを読む

QVBAのワークシートの追加とコピーなんですが。

VBAのワークシートの追加とコピーなんですが。


sheet1の原紙をすべてコピーして、

新しくワークシートを追加してそのシートに貼り付けるプログラムを

教えてください。

Aベストアンサー

With ActiveWorkbook
  aaa = .Sheets("Sheet1").Cells(9, 4).Value 'aaaは社員
  bbb = .Sheets("Sheet1").Cells(9, 5).Value 'bbbは4月
  .Sheets("Sheet1").Copy After:=.Sheets(.Sheets.Count)
End With
ActiveSheet.Name = aaa & bbb

Q初歩的な質問

例えば「001」という文字列があった場合、左側の0を全て取って「1」としたい場合、どのような関数を使ってコードを記述すれば良いのでしょうか?

Aベストアンサー

数値がInteger型で足りるのであれば変換関数「CInt」を使い変換するのがいいのではないでしょうか?
文字列が入ってたらエラーになるのでIsNumericで数値型かどうか判断してエラー回避をちゃんとして下さい。

If (IsNumeric("0015")) Then
intVal = CInt("0015")
End If

こんな具合に。

QEXCEL2002で、ブック内のワークシートを他のブックに(VBA含む丸ごと)コピーして移す方法

 EXCEL2002で、ブック内のワークシートを他のブックに(VBA含む丸ごと)コピーして移す方法
 普通のやり方では、セルの数字、値だけで、通常は、中身の重要な"関数式"であったり、VBA等のプログラムまで、コピーされることは、ありませんので、そこまで、出来る方法を教えて下さい。

Aベストアンサー

コピー元のBookとコピー先Bookをどちらも開いて
Excel画面上に並べます(左右に並べる方が作業しやすいと思います)

Ctrlキーを押しながら、コピーしたいシートのタブ部分を
クリック長押しすると、+マークと▲マークが出てきます。
マークが出てきたら、新しいBookにドラッグ&ドロップ で
シートコピーが出来ます。

全く同じシートがコピーされ、マクロもコピーされます。

Q初歩的な質問

お世話になります。
ユーザーフォームで下記の様にテキストボックスに
品番を入力し、A2セルにその値を表示させていますが、

その後、ユーザーフォームはCloseさせ、
通常の標準モジュールでのVBAの記述に、繋げたい
のですが、どういう様な記述をしたら1回のマクロ実行
で済むのでしょうか?
途切れ途切れでうまく行きませんでした。
ご教示下さいます様、宜しくお願い致します。
 
         記

Private Sub CommandButton1_Click()
Sheets("結果").Range("a2") = TextBox1.Value
End Sub

Aベストアンサー

単純に考えると
Private Sub CommandButton1_Click()
  Sheets("結果").Range("a2") = TextBox1.Value
  Unload Me
  Call Macro1 'Macro1 は標準モジュールに書いたマクロ名
End Sub
...な感じですが
>途切れ途切れでうまく行きませんでした。
これがちょっと気になりますね。
上記でうまくいかない場合は、実際に試したコードを掲載したほうが良いでしょう。


人気Q&Aランキング

おすすめ情報