人に聞けない痔の悩み、これでスッキリ >>

エクセルVBAで、
スタートボタンを押すと値の入ってるセルを自動的に移動していって、ストップボタンを押すと止まる。
そんなルーレットみたいなものって作れますか???

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

A 回答 (7件)

ストップボタンはないけれど、こんなの作ってみました。


まっさらなワークシートで試してみてください。

Sub ルーレット()
Range("B3:K9").Select
With Selection
.Font.Name = "Arial Black"
.Font.Size = 20
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
With .Borders
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
End With
ActiveWorkbook.Names.Add Name:="table", RefersTo:=Selection
n = 0
For Each c In Range("table")
n = n + 1
c.Value = n
Next
For i = 1 To 2
For Each c In Range("table")
c.Select
For m = 20 To 3 Step -1
Selection.Interior.ColorIndex = m
Next m
Range("table").Interior.ColorIndex = 0
Next c
Next i
Randomize
x = Int(Rnd * 70) + 1
For Each c In Range("table")
c.Select
For m = 20 To 3 Step -1
Selection.Interior.ColorIndex = m
Next m
Range("table").Interior.ColorIndex = 0
If c.Value = x Then
Selection.Interior.ColorIndex = 3
Exit Sub
End If
Next c
End Sub
    • good
    • 0

ワークシートSheet1にオートシェイプの中から太い矢印を貼り付けました。


「オートシェイプ 2」という名前でした。
もうひとつ、コマンドボタンを貼り付けました。
Sheet1のコマンドボタンのクリックイベントに
Private Sub CommandButton1_Click()
Worksheets("sheet1").Range("a1").Activate
For i = 2 To 10
t0 = Timer
Do While Timer < t0 + 1
DoEvents
'ActiveSheet.Cells(i - 1, "A") = ""
'Cells(i, "A") = "A"
Worksheets("sheet1").Shapes("オートシェイプ 2").Left = i * 50
Loop
Next i
End Sub
を貼り付けます。
ボタンをクリックするとかくかくと10秒間、矢印が動いていきます。
スムーズにするには1秒をもっと短くする。
太い矢印を、イメージのピクチャなどに変える。
とめるのはとめるフラグを聞いていて、ONならシェイプをDeleteする。コンなのはどうでしょう。やはり道具立ての力不足ですね。
オフィス系などでなく・エクセルVBA以外のプログラム言語に目を向けられることを。
    • good
    • 1

No5です。

こっちのほうがいいかも

Sub ルーレット開始()
Cells(1, 1) = ""
Range("B3:K9").Select
With Selection
.Font.Name = "Arial Black"
.Font.Size = 20
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
With .Borders
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
End With
ActiveWorkbook.Names.Add Name:="table", RefersTo:=Selection
Range("table").Interior.ColorIndex = 0
n = 0
For Each c In Range("table")
n = n + 1
c.Value = n
Next
Do
For Each c In Range("table")
c.Select
If Cells(1, 1) = "stop" Then
Selection.Interior.ColorIndex = 3
Exit Sub
End If
DoEvents
Next c
Loop
End Sub

Sub ルーレットSTOP()
Cells(1, 1) = "stop"
End Sub
    • good
    • 0

No4さんのをそのまま拝借してストップボタンを付けてみました。



Sub ルーレットSTART()
Cells(1, 1) = ""
Range("B3:K9").Select
With Selection
.Font.Name = "Arial Black"
.Font.Size = 20
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
With .Borders
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
End With
ActiveWorkbook.Names.Add Name:="table", RefersTo:=Selection
n = 0
For Each c In Range("table")
n = n + 1
c.Value = n
Next
Do While Cells(1, 1) = ""
For Each c In Range("table")
c.Select
If Cells(1, 1) = "stop" Then
Selection.Interior.ColorIndex = 3
Exit Sub
End If
DoEvents
Range("table").Interior.ColorIndex = 0
Next c
Loop
End Sub

Sub ルーレットSTOP()
Cells(1, 1) = "stop"
End Sub
    • good
    • 0

再びこんにちは。


VBAからワークシートをいじる場合、VBで言うところのタイマーコントロールが使えません。
従って、スタートボタンを押したらループでグルグル回し、その間にストップボタンも受け付け、ストップされたらループから抜けるという処理になるはず。
答えを言えば、ループの中で DoEvents を発行してやれば済むと思います。
しかしスピードの調整等、結構シビアかもしれませんね。
    • good
    • 0

もちろん作れます。


ただちょっとコツがいるかもしれません。
    • good
    • 0
この回答へのお礼

回答有難うございます。
コツとは?

お礼日時:2005/07/22 14:22

可能です。


しかもそう難しくもないでしょう。
    • good
    • 0
この回答へのお礼

回答有難うございます。
実際どうやればいいですか?

お礼日時:2005/07/22 14:21

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

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

Q何かEXCELで『抽選』ができるみたいですが・・・

 何か聞くところによるとEXCELで『抽選(発表などの順序決め)』みたいなことができる、って聞いたんですが本当でしょうか?もし、本当であればやり方をご教授願います。ちなみに小生の使用しているバージョンは2003(SP2)です。
よろしくおねがいします。

Aベストアンサー

No.2の人です。

まず訂正。正確には「0から(N-1)」でした。
Nというのは任意の整数値のことで、例えばN=10だとすると、
=INT(RAND()*10)で、0~9までの間でランダムな数字が出ることになります。
試しにセルに↑を入力して試してみてください。

RAND()とRANK()を使う方法はNo.3さんの方がわかりやすいですね。

QExcel VBAで「プログラム実行」ボタンと「プログラム停止」ボタンをつけたい

ExcelでVBAを使いアプリをつくっています。
プログラムを実行させるボタンはもちろんつくれるのですが、
プログラムを停止させるボタンをつくるにはどうしたら良いのかと悩んでいます。

ボタンに登録できるのはひとつのプロシージャですよね。
とすると「他のプロシージャを止める」プロシージャをつくらねばならないのでしょうか。とするとどうやって・・・?

Aベストアンサー

s_husky です。

状況が判明したので再回答!

Public StopNow As Boolean

Public Sub Test()
  Do Until StopNow
    Sheets(1).Cells(1, 1) = Sheets(1).Cells(1, 1) + 1
    Pause 10
  Loop
  If StopNow Then
    MsgBox "Test の実行をストップしました。"
  End If
End Sub

Public Sub Pause(ByVal PauseTime As Single)
  Dim Finish As Single
  
  Finish = Timer + PauseTime
  Do
    DoEvents
  Loop Until Timer > Finish
End Sub

Private Sub CommandButton2_Click()
  StopNow = True
End Sub

Private Sub CommandButton1_Click()
  Test
End Sub

起動したプロシージャを止める必要があるということはループ処理と理解。
ならば、ループの条件を操作すれば宜しいかと。
CommandButton1 で起動した Test は CommandButton1 で止めれます。

Application.OnTime TimeValue("16:30:00"), "Test"

で起動しようと同じ理屈。

Application.OnTime は、一種の起動ツール。
当然に停止機能もあるが、停止を制御するには上記のような仕掛けが必要と思います。

s_husky です。

状況が判明したので再回答!

Public StopNow As Boolean

Public Sub Test()
  Do Until StopNow
    Sheets(1).Cells(1, 1) = Sheets(1).Cells(1, 1) + 1
    Pause 10
  Loop
  If StopNow Then
    MsgBox "Test の実行をストップしました。"
  End If
End Sub

Public Sub Pause(ByVal PauseTime As Single)
  Dim Finish As Single
  
  Finish = Timer + PauseTime
  Do
    DoEvents
  Loop Until Timer > Finish
End Sub

P...続きを読む

Qエクセル VBA ユーザーフォームを閉じる

ユーザーフォームを開く時は
UserForm1.Showですが
閉じる時は?
UserForm1.Close
だとコンパイルエラーになります。
End
にするしかないですか?

Aベストアンサー

Unload Me とか Unload UserForm1 でユーザーフォームを閉じることができます。

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

Qエクセル指定した範囲からランダムで一つ抽出

エクセルの関数についての質問なのですが、

B1~B5に値がならんでいたとして、B1~B5の中からランダムに一つ抽出したものをA3に表示する関数はありますか?

Aベストアンサー

A3に次の式を入力すればよいでしょう。

=INDEX(B1:B5,RANDBETWEEN(1,5))

QVB上で実行中の無限ループの止め方

今まで、CUIベースのBASICでのプログラムの経験はあるのですが
Visual系のBASICは初心者です。
原因はわかっているのでプログラムの修正はできるのですが
VB上でコンパイルして実行したときに無限ループに陥ってしまって
どうにもプログラムをとめられなくなります。
そんなことがないように、実行前に全てのプロジェクトを保存して
いますので、そんなに実害はないのですが、どうすればとめられるのでしょう・・
今現在は、タスクマネージャーから強制終了させています。

Aベストアンサー

無限ループの一番内側に
DoEvents
を入れておくと、ウィンドウ切替え->デバッガ終了操作が出来ますよ

危なそうなとこにも入れておくと、何かと安心です。

Qパワーポイントのアニメーション設定について

(1)~(10)の番号を隠している画像を,クリックした順番に非表示にするアニメーションを設定したいのですが、実現可能でしょうか?
(順番を決めるくじのようなものを作成したいと思っています)

マクロでないと実現できない場合、ソースを教えていただけると助かります。

よろしくお願いいたします。

Aベストアンサー

mougでも同じような回答をしましたが...

●一般機能の場合
1.
10個の画像すべて選択
→アニメーションの設定
→効果の追加
→終了
→クリア など

2.
下の白くて長い長方形に新しくできた
 10個のアニメーション項目のうち
 まずは最初の画像1の項目をクリック
→右端の▼クリック
→タイミング
→開始のタイミング▼▼クリック
→次のオブジェクトをクリック時に効果を開始 にチェック
→その右から 画像1▼を選択

3.
上の2.を画像2,画像3,..画像10まで繰り返す

●マクロ利用の場合
10個の画像を選択して以下のどちらかのマクロで
[最初のコードはパッと消える、2番目のコードはワイプで消える]

Sub Anim_ExitAppear()
Dim Sld As Slide
Dim Shp As Shape
Set Sld = ActiveWindow.Selection.SlideRange(1)
For Each Shp In ActiveWindow.Selection.ShapeRange
  With Sld.TimeLine.InteractiveSequences.Add.AddEffect( _
        Shape:=Shp, _
        effectId:=msoAnimEffectAppear, _
        Trigger:=msoAnimTriggerOnShapeClick)
    .Timing.TriggerShape = Shp
    .Exit = msoTrue
  End With
Next
End Sub

Sub Anim_ExitWipe()
Dim Sld As Slide
Dim Shp As Shape
Set Sld = ActiveWindow.Selection.SlideRange(1)
For Each Shp In ActiveWindow.Selection.ShapeRange
  With Sld.TimeLine.InteractiveSequences.Add.AddEffect( _
        Shape:=Shp, _
        effectId:=msoAnimEffectWipe, _
        Trigger:=msoAnimTriggerOnShapeClick)
    .Timing.TriggerShape = Shp
    .Exit = msoTrue
    .EffectParameters.Direction = msoAnimDirectionLeft
  End With
Next
End Sub

mougでも同じような回答をしましたが...

●一般機能の場合
1.
10個の画像すべて選択
→アニメーションの設定
→効果の追加
→終了
→クリア など

2.
下の白くて長い長方形に新しくできた
 10個のアニメーション項目のうち
 まずは最初の画像1の項目をクリック
→右端の▼クリック
→タイミング
→開始のタイミング▼▼クリック
→次のオブジェクトをクリック時に効果を開始 にチェック
→その右から 画像1▼を選択

3.
上の2.を画像2,画像3,..画像10まで繰り返す

●マクロ利用の...続きを読む

Qgif画像をエクセルのシートに貼り付けて動かしたい

gif画像をエクセルのシートに貼り付けて動かしたいのですが可能でしょうか?

ぐぐったら
http://home.att.ne.jp/zeta/gen/excel/c04p23.htm
がヒットしたのですが、
これは複数の画像を表示する方法ですよね?

やりたい事はひとつのtest.gifと言うファイルをエクセル上で動かしたいのです。

例えばサンプルとして
http://www.civillink.net/sozai/move.html
のペンギンををダウンロードしてデスクトップに落としましたが
これをエクセル上でブラウザと同じく動的に表示させることは可能でしょうか?

ご回答よろしくお願いします。

Aベストアンサー

PowerPointなら動きますが、ExcelやWordのレイアウト内では
[ブラウザでプレビュー]を使ってブラウザ上に表示する方法や、
[コントロールの選択]で埋め込みのブラウザを作って、その中で
動かすしかありません。
http://hokanko2008.seesaa.net/article/168786983.html

ペンギンのようなGIFアニメの場合は、ブラウザや対応している
画像ビューア、PowerPointのようなアニメーション対応ソフト
でしか基本的に動きません。

Q表(リスト)からランダムに抽出するには?

Excelで次のような表を作りました。(例として書きます)

1. みかん
2. バナナ
3. もも
4. なし
5. 栗   ・・・(以下同様) と続いていきます。

今回、その表から、ランダムにデータを抽出し、別のセルに書き出したいのですがどうやっていいのかわかりません。(理想図を下に書きます。)


2. バナナ
5. 栗
1. みかん  ・・・・・(以下同様)

このようにして、今ある表から、ランダムに並び替えた、 『新たな表』 を作りたいのです。

どのように関数(RAND関数?)を設定したらいいのかよくわかりません。 教えてください。お願いします。

ちなみにOffice2000です。

Aベストアンサー

こんにちは。maruru01です。

作業列を1列だけ使用した、絶対に重複しない数式での方法です。
元データがA1:B5で、C列を作業列に使用して、D:E列に表示するとします。
まず、C1に、

=INT(RAND()*5+1)

と入力します。次に、C2に、

=LARGE(INDEX(NOT(COUNTIF($C$1:C1,ROW($A$1:$A$5)))*ROW($A$1:$A$5),),INT(RAND()*(5-ROW(C1))+1))

と入力して、C5までコピーします。
そうしたら、D1に、

=INDEX(A:A,$C1)

と入力して、E1にコピー。
さらに、D1:E1を5行目までコピー。

やはり、[F9]を押すたびごとに並べ替えられます。

QExcelで事前にセルに入力した言葉をランダムに表示

例えばA1に「いぬ」 A2に「ねこ」 A3に「ぞう」 A4に「たぬき」 A5に「きつね」と入力します
次に
B1~B10に 「いぬ」「ねこ」「ぞう」「たぬき」「きつね」のいずれかを自動にランダムに表示する方法を教えてください
こんな便利な機能があれば良いと思うのですが・・・

Aベストアンサー

=INDIRECT("A"&INT(RAND()/0.2)+1)

INT(RAND()/0.2)+1 で1~5までの整数が得られます。
INT(RAND()/0.1)+1 で1~10までの整数が得られます。
INT(RAND()/0.02)+1 で1~50までの整数が得られます。
INT(RAND()/0.01)+1 で1~100までの整数が得られます。

それでA1からA5、A1からA10、A1~A50、A1~A100のセルの内容を取得しています。A2からなら+2にしてください。
F9キーを押すたびに再計算されて、表示も変わります。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング