アプリ版:「スタンプのみでお礼する」機能のリリースについて

部活動のコーチをしているものです。
トレーニングに利用したく下記のようなものを作りたいと考えています。

部員数は23名で、台の上にパソコンを置き開始キーを押してスタート。
部員は画面を見て高速足踏み(5~8秒程度)。
画面に指示が表示され、指示方向に決められた体勢を瞬時にとる。
これを指定回数行いたいです。
表示は「前・後・左・右・上・下」のいずれか一文字の表示です。
表示の間隔をさらにランダム(5~8秒程度)にできると最高です。
指定回数は部員の能力により調整したいので自由に変更ができると助かります。
部員数が多いため何班かに分けて行いたいので私は他の班の指導をするので
トレーニングはパソコンに頼りたいです。

RAND関数等調べましたが「F9」キー使用などの制限がついてしまい
使い勝手が悪いです。
スタートをクリックすれば指定回数表示後にストップ としたいです。
エクセルは初級者レベルです。
よろしくお願いします。

質問者からの補足コメント

  • すみません。できました。
    gooのURLの7桁ですね。
    お騒がせしました。

    No.15の回答に寄せられた補足コメントです。 補足日時:2017/05/08 11:20
  • HAPPY

    お世話になります。
    今回の質問に対しお礼のタイミングを逸しました。
    最終のお礼は、No.12 のお礼欄に書き込みましたので宜しくお願いします。
    親身なご教授有難うございました。

      補足日時:2017/05/09 16:34

A 回答 (15件中1~10件)

---------------


使用説明
開発環境:Windows10, 32bit, Excel2013
制作:2017/4/30
---------------
全てを標準モジュールに登録して、保存し、再起動すると、メニューも数式バーもリボンもない状態のワークシートが現れます。

緊急避難的なショートカット
・Alt + F11 VBEditor 画面が現れるます。
・Alt +F8 マクロ実行

Start_ShortCutKeySetting
これによって、特別なショートカットが設定されています。
・ESC 中止ボタン (重要)
・F12 起動用のボタン
・F11 設定画面(Sheet2を開く)
 (Ctrl + PageDown)  Excel本来のショートカット

Sheet2 のデフォルト設定
項目 
出力場所  B3
フォントサイズ 80
秒間隔 1
表示時間 0.5
残りの表示場所 D1
カウント 300

マクロ内での設定
・重複を許すかどうか
enabledDOUBLE =True
・スタートまでの間奏時間
betweenTime = Int(Rnd() * 5) + 2 '2から5分まで"\** 0.5=30sec入力可
  ↓
betweenTime =0.5  と直接入力が可能 小数点第一位まで

本編の上下の表示の時間は、あまり正確ではなく、PCの性能に依存するはずです。
◯△の方は、PCの内部時計を利用しています。

----------
'グリッド線を表示
Sub SheetArrange_1()
Dim flg As Variant '元の画面 False, 調整用画面 True
flg = Application.InputBox("フラッシュスクリーン=0 , 通常Excel画面=1", "表示切替")
If VarType(flg) = vbBoolean Then Exit Sub
Worksheets(1).Activate
With ActiveWindow
 .DisplayHeadings = flg
 .DisplayGridlines = flg
End With
End Sub

'画面の切り替え
Sub SheetArrange_2()
Dim flg As Variant '表示用画面 False, 通常画面 True
flg = Application.InputBox("フラッシュスクリーン=0 , 通常Excel画面=1", "表示切替")
If VarType(flg) = vbBoolean Then Exit Sub
'セル幅調整
Sub LocationArrange()
Dim wds As Variant
Dim i As Long
wds = Array(, 13.63, 8.75, 7.5, 8.5) 'セル幅
With Worksheets(1)
  For i = 1 To 4
   .Columns(i).ColumnWidth = wds(i)
  Next
End With
End Sub

'セル幅調整
Sub LocationArrange()
Dim wds As Variant
Dim i As Long
wds = Array(, 13.63, 8.75, 7.5, 8.5)
With Worksheets(1)
  For i = 1 To 4
   .Columns(i).ColumnWidth = wds(i)
  Next
End With
End Sub

'-----使用説明終わり----------
直すのも大変かとは思いますが、よろしくお願いします。
修正点


①.
Sub Auto_Open()
  Worksheets(1).Activate  '←この行を加える
  Call Start_ShortCutKeySetting
End Sub

②.
Private Sub SettingSheet(flg As Boolean)
'シート設定
 With ActiveWindow
  'flg = Not .DisplayHeadings
  .DisplayHeadings = flg
  .DisplayGridlines = flg
  .Zoom = IIf(flg, 100, 300)
  .DisplayWorkbookTabs = flg
 End With
 With Application
  .WindowState = xlMaximized
  .DisplayFormulaBar = flg
  .ExecuteExcel4Macro "Show.ToolBar(""Ribbon""," & flg & ")"  'if構文 を取る
 End With
  '以下を加える
  If flg = False Then
   Range(Worksheets(2).Range("B6").Value).HorizontalAlignment = xlRight
  End If
End Sub

③.
Sub SettingSheet2()
Dim c As Range
Dim i As Long
Dim outPutData As Variant
Dim outputExample As Variant
Worksheets(2).Select  'これを加える
--
For Each c In Range("A2:A7") '←A6 からA7 に替える
 c.Value = outPutData(i)
 c.Offset(, 1).Value = outputExample(i)
 c.Offset(, 3).Value = outputExample(i)
 i = i + 1
Next c

---後は、検索で行ってください。--
Sub FrashExpress() 内
1.
showCharTime = showCharTime * 1000
 betweenTime = Int(Rnd() * 5) + 2 '2から5分まで"\** 0.5=30sec入力可
 ''betweenTime = 0.5 '待ち時間  '加入
2.
  If i = 1 Then '1/2 を出す場合
   i = 2
   expRng.Value = "◯"  '加筆
  Else
   i = 1
   expRng.Value = "△" '加入
  End If
  '  ''i = Int(Rnd() * UBound(SChars)) + 1  全部の記号を出す
   '×  expRng.Value = SChars(i)  '削除
3.
 Lasttime = GetTickCount()
'  Application.ScreenUpdating = True '削除

4.
   expRng.Value = JChars(j)
   If (cnt - i) < 20 Then  ' ここから加入
    expRng.Font.ColorIndex = 3
    DoEvents
   End If          'ここまで
  End If

5.
 i = i + 1
'  If cnt < 20 Then expRng.Font.ColorIndex = 3 '削除
  If cnt <= 0 Then Exit Do
 Loop While UBound(ExpItms) + 1 > i
 expRng.Value = "END"  'ここから加入
 Sleep 1000
 expRng.Clear        'ここまで
    • good
    • 0
この回答へのお礼

WindFaller さん
回答有難うございます。

>全てを標準モジュールに登録して・・・

No.8の

'//
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
から
 Call RandomExpress
End Sub

続けて No.10の

Option Explicit

Option Explicit
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
から
'//
後は設定マクロ

続けて No.11の

'続き
Private Sub SettingSheet()
から
MsgBox "違う場合はB列に設定値を入れてください", vbInformation
End Sub

までを連続してコピーペーストしています。

一応訂正はしましたが、No.10の
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long) でエラー
「コンパイルエラー:End Sub,End FunctionまたはEnd Property以降にはコメントのみが記述できます。」が発生します。

修正は③の
Worksheets(2).Select  'これを加える
--
がちょっと不安です。今は「--」の行を追加しています。
No.12の修正は①と②の修正と解釈しています。

No.12の

'グリッド線を表示
Sub SheetArrange_1()
から
End Sub

'-----使用説明終わり----------

までは未着手です。

エラーの原因がわかりません。 よろしくお願いします。

お礼日時:2017/05/08 10:39

すみません。

このURLは、今、ご覧になっているログ番号数字7桁です。
いままで、ずっと慣例でそうしてきたもので、始めての方にはよく説明するべきでした。
この回答への補足あり
    • good
    • 0
この回答へのお礼

WindFaller さん
回答有難うございます。

すみません。
質問がお恥ずかしいのですが、「今、ご覧になっているログ番号数字7桁」が何処で何なのかわかりません。
ログ番号って何ですか?

お手数をお掛けしますが、宜しくお願いします。

お礼日時:2017/05/08 11:03

まず、修正は大変でしょうから、アップロードしておきましたので、ご都合のよい時にダウンロードしてみてください。



http://bit.ly/2prOcdT

今回は、長めの日数を設定して、ZIPで圧縮してアップロードしてあります。
パスワードは、このURL の7桁の数字です。
解凍した後か、その最中にブロックを外してくれといってきますから、それをはずしてください。たぶん、お気づきだと思いますが、私は、レイアウトがすこぶる苦手なのです。

私は、かなり年齢の過ぎた頃からのVBA入門で、もう少し早く手をつけていればよかったと思っています。VBAの仕様は、何重構造にもなってとても、覚えにくいものだと思います。これも、一種の語学のようなものだと思います。
私は、都の技術学校でOffice を教わりましたが、VBA初日に出された問題。
『数字の合計を出すプログラムを作りなさい』
というものです。今でも思い出します。
    • good
    • 0
この回答へのお礼

WindFaller さん
回答有難うございます。

お礼が遅くなりすみません。先に伝えておけば良かったのですが、GWの間は部活動の遠征の為あちこちと移動していたので時間が取れませんでした。

アップロード有難う御座います。ただ、パスワード「2prOcdT」でダウンロードができません。「パスワードが一致しません」とコメントが出てきてしまいます。原因がわからないのですが・・・。
何か原因が思い当りましたらご連絡宜しくお願いします。

引き続き今までご教授頂いたコードと修正は勉強も兼ねてやってみようと思います。
大変ご迷惑をお掛けしますが、宜しくお願いします。

お礼日時:2017/05/08 08:51

今試してみましたら、起動時の設定の箇所でおかしな所がありますので、すぐに修正をします。



これと、
Sub Auto_Open()
Call Start_ShortCutKeySetting
End Sub

Private Sub SettingSheet()
'シート設定
End Sub

要するに、シートがどれに対してもはたらいてしまいます。
シートを特定しないといけません。
    • good
    • 0
この回答へのお礼

WindFaller さん
ご教授有難うございました。

お礼のタイミングが取れなくてすみません。
このお礼は No.14 と今までの経緯に対してのお礼とさせて頂きます。

この度は色々とご迷惑をお掛けして本当にすみませんでした。
お陰様でほぼ希望通りの表示が出来ました。
見ず知らずの私の様など素人に多大なお時間とご尽力本当に感謝しています。
この後は私もVBAの勉強をして少しづつですが教えて頂いたコードを理解していこうと思います。

最後に、ご回答頂いた中に時折悲しい気持ちになる文面が見られたのですがとても気になっています。
WindFaller さん とのやり取りにおいて私は WindFaller さん の人柄はとても暖かく大好きでした。
心無い言動などがあったものと推測しますが、あまり気にせず WindFaller さん のすばらしい能力を今後とも私の様な未熟者にご教授頂きたいと思っています。

WindFaller さん に今後多大なる幸せがあるものと思い今回のお礼とさせて頂きます。
本当にありがとうございました。

お礼日時:2017/05/09 13:44

'続き


Private Sub SettingSheet()
'シート設定
With ActiveWindow
flg = Not .DisplayHeadings
.DisplayHeadings = flg
.DisplayGridlines = flg
.Zoom = IIf(flg, 100, 300)
.DisplayWorkbookTabs = flg
End With
With Application
.WindowState = xlMaximized
.DisplayFormulaBar = flg
If .ExecuteExcel4Macro("Get.ToolBar(7,""Ribbon"")") Then
.ExecuteExcel4Macro "Show.ToolBar(""Ribbon""," & flg & ")"
End If
End With
End Sub
Sub Start_ShortCutKeySetting()
Dim Msg As String
Call SettingSheet
If flg = False Then
Application.OnKey "{F12}", "CountStart"
Msg = "F12で起動します。" & vbCrLf & "終了は ESC キーです"
Else
Application.OnKey "{F12}"
Msg = "F12の設定を解除しました。"
End If
MsgBox Msg
Application.OnKey "{F11}", "ShChange"
MsgBox "F11でシートの切り替えします"
End Sub
Sub CountStart()
Call RandomExpress
End Sub
Sub ShChange()
'F11でシートの切り替え
If ActiveSheet.Index = 1 Then
ActiveSheet.Next.Select
Else
ActiveSheet.Previous.Select
End If
End Sub
Sub SettingSheet2()
Dim c As Range
Dim i As Long
Dim outPutData As Variant
Dim outputExample As Variant
Worksheets(2).Select
Range("A1").Value = "項目"
Range("D1").Value = "入力例"
i = 0
outPutData = Array("出力場所", "フォントサイズ", "秒間隔", "表示時間", "残りの表示場所", "カウント")
outputExample = Array("B3", "80", "1", "0.5", "D1", "300")
For Each c In Range("A2:A7")
c.Value = outPutData(i)
c.Offset(, 1).Value = outputExample(i)
c.Offset(, 3).Value = outputExample(i)
i = i + 1
Next c
Columns(1).AutoFit
MsgBox "違う場合はB列に設定値を入れてください", vbInformation
End Sub

''このマクロの設定などの説明は追々いたします。もしかしたら、解釈を間違えている部分があるかもしれません。
'------------------

>実は他の掲示板に同様の質問をしていました。
昔はよく批判されましたが、今は、別に構いません。

>ご回答者様に大変失礼な行為だと ご指摘を頂きました。
別に構いません。私は、ここ最近、ここでとても不愉快なことがずっと重なっていて、ついに、今の状態ではとてもやっていられませんので、私は、これを最期に当分の間、ここを去るつもりで書いています。

その人その人のVBAの実力というものは、おわかりにならないと思いますが、あまりに初歩的な内容で、解決していくものにも、問題があると思うのです。そして、今回のようなマクロは、ふだん、ここの掲示板では、即ボツになるものです。理由は、長いからだそうです。

それと、私の予感では、VBAはどんどん衰退していくような気がします。だから、もう特に覚える必要はありませんが、かといって、私自身が新しい環境に移行できるのか分からないのです。なるべく新しい言語と技術は身につけたいと思っています。残った命の長さと手が動く間だけですが。

>さらにご負担をお掛けした事と思いますが、ここまでで質問の取り下げを考えています。

あまり気にしないでください。私を不快と失望に陥らせたのは、そんなことではないからなのです。もっと全体的なことなのです。ここの経営者が変わったということも一つあります。私は、前のハンドルからですと、12年近くここで書いていますが、最近は、がらっと様子が変わってしまったようです。別のカテゴリでは、これはスマフォなどが原因だという指摘もあるようです。

添付画像は、設定画面のSheet2 、Sheet1 はあまり何かを入れたくありませんでした。
「エクセルで 文字を 複数回 数秒間隔で 」の回答画像11
    • good
    • 0
この回答へのお礼

WindFaller さん
回答有難うございます。

すみません。色々な御覚悟や御決断がある中、この様な情け無いゴタゴタに巻き込んでしまいました。
私の様な VBA(パソコン全般)に不慣れで未熟な者には到底理解出来ない経緯があった事だと思います。
その事についてはどうこう言える立場では御座いませんが、何か寂しい気がします。当分の間とあるので、もし WindFaller さん がこちらの掲示板を覗いてみても良いと思えたとき、 WindFaller さん がこのすばらしい技術をご教授しても良いと思える様な環境になっているといいな。と思います。

質問の件ですが、引き続きご教授を頂けるという御返事を頂き本当に有難う御座います。
今はご教授頂いた内容はまったくと言って良いほど内容を理解できていませんが、動き方等は希望の表示に近付いていると思います。
「VBAはどんどん衰退していく」と有りましたが、先日VBAの参考書を買ってきてしまいました。衰退するとしてもやはりVBAの能力はすごいと思います。出来るけどやらないのであれば良いのですけど、出来ないからやらないのではちょっとくやしいので。
参考書等を見ていてお礼が遅れてしまい申し訳ありませんでした。簡単には理解できないのはわかっていますが、時間をかけて勉強していきますのでこの後のご教授宜しくお願いします。

No.10からの動作確認はこの後やってみます。

お礼日時:2017/05/02 09:10

この説明は、次回にさせていただきます。



Option Explicit

Option Explicit
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Private Declare Function GetTickCount Lib "kernel32" () As Long
Dim flg As Boolean
Const enabledDOUBLE As Boolean = True '重複を許さない(F),許す(T)
Sub Auto_Open()
Call Start_ShortCutKeySetting
End Sub
Sub RandomExpress()
Application.EnableCancelKey = xlErrorHandler
On Error GoTo EscapeLine
Dim sh2 As Worksheet
Set sh2 = Worksheets("Sheet2")
Dim JChars As Variant
Dim SChars As Variant
Dim expRng As Range
Dim timeDiff As Double
Dim showCharTime As Double
Dim betweenTime As Single
Dim StartTime As Long
Dim Lasttime As Long
Dim remainRng As Range
Dim cnt As Long
Dim remainCnt As Variant
Dim SetVals As Variant
'************************
JChars = Array("", "前", "後", "左", "右", "上", "下")
SChars = Array("", "△", "◯", "□", "▽", "◇")
SetVals = sh2.Range("B2:B7").Value

Set expRng = Range(SetVals(1, 1)) ' Range("B3") '出力場所
expRng.Font.Size = SetVals(2, 1) '80 'フォントサイズ
timeDiff = SetVals(3, 1) '1 '秒間隔
showCharTime = SetVals(4, 1) '0.5
Set remainRng = Range(SetVals(5, 1)) 'Range("D1")
cnt = SetVals(6, 1) '300
'***********************
expRng.Select
Dim iCnt As Integer
iCnt = cnt / 0.6 '目減りを考慮して数を増やす
ReDim ImpItms(iCnt, 1)
Dim ExpItms()
Dim i As Long, j As Long
Randomize
start:
Worksheets(1).Select
For i = 0 To iCnt
ImpItms(i, 0) = Rnd()
ImpItms(i, 1) = (i - 1) Mod 6 + 1
Next
SortPos ImpItms
j = 0
If enabledDOUBLE = False Then
For i = 0 To UBound(ImpItms) - 1
If ImpItms(i, 1) <> 0 Then
If ImpItms(i, 1) <> ImpItms(i + 1, 1) Then
ReDim Preserve ExpItms(j)
ExpItms(j) = ImpItms(i, 1)
j = j + 1
End If
End If
Next i
Else
ReDim ExpItms(cnt - 1)
For i = 0 To cnt - 1
ExpItms(i) = ImpItms(i, 1)
Next
End If
i = 0
showCharTime = showCharTime * 1000
betweenTime = Int(Rnd() * 5) + 2 '2から5分まで"\** 0.5=30sec入力可
remainCnt = Int(betweenTime * 60) & "秒"
remainRng.Select
StartTime = GetTickCount()
Lasttime = betweenTime * 60 '2017/04/30
Do
If i = 1 Then '1/2 を出す場合
i = 2
Else
i = 1
End If
''i = Int(Rnd() * UBound(SChars)) + 1  全部の記号を出す

expRng.Value = SChars(i)
If Lasttime - StartTime > 0 Then
remainCnt = Int(betweenTime * 60 - (Lasttime - StartTime) / 1000) & "秒"
End If
remainRng.Value = remainCnt

Sleep 1000
expRng.ClearContents
Sleep 300
DoEvents
Lasttime = GetTickCount()
Application.ScreenUpdating = True


Loop Until (Lasttime - StartTime) / 1000 > betweenTime * 60
i = 0
'---end of preparing----
Beep
remainRng.Select
Do
j = ExpItms(i)
If (Int(Rnd() * 9) + 1) Mod 3 = 1 Then 'ランダムに従って、記号が出る
expRng.Value = SChars(Int(Rnd() * 4) + 1)
Else
expRng.Value = JChars(j)
End If
remainRng.Value = cnt - i
Sleep showCharTime
expRng.ClearContents
DoEvents
Sleep Int(timeDiff * 1000) - showCharTime
i = i + 1
If cnt < 20 Then expRng.Font.ColorIndex = 3
If cnt <= 0 Then Exit Do
Loop While UBound(ExpItms) > i
EscapeLine:
If Err.Number <> 0 And Err.Number <> 18 Then
MsgBox Err.Number & ": " & Err.Description
End If
expRng.Clear
Application.EnableCancelKey = xlInterrupt
Application.ScreenUpdating = False
ActiveSheet.UsedRange.ClearContents
Application.ScreenUpdating = True
End Sub
Private Function SortPos(ByRef iArray())
Dim i As Long
Dim j As Long
Dim Temp As Double
Dim Temp2 As Long
For i = UBound(iArray) To LBound(iArray) Step -1
For j = LBound(iArray) + 1 To i
If iArray(j - 1, 0) > iArray(j, 0) Then
Temp = iArray(j - 1, 0)
Temp2 = iArray(j - 1, 1)
iArray(j - 1, 0) = iArray(j, 0)
iArray(j - 1, 1) = iArray(j, 1)
iArray(j, 0) = Temp
iArray(j, 1) = Temp2
End If
Next j
Next i
End Function
'//
後は設定マクロ
    • good
    • 0

最初に、この手の質問は、掲示板では製作依頼は敬遠されがちだということを覚えていてほしいと思います。

やはりトラブルが多いからと、質疑応答としての価値がなくなるのと同時に、あるレベルに達すると、金銭的価値に変わってきてしまうからです。それに、それは、開発依頼となると、想像以上の値段のするものです。個人的な開発でも、数万円から最高10万円は取られます。

ただ、人を上手にノセて動かす力があれば、どんなお金の価値や人の端的な能力よりもずっと優れていると思います。それが、人の器の大きさなのだろうと思います。余計な話をすると、また質問者さんに怒られますが。

さて、今回のコードは、今よりも10年以上前に私が作ったものです。
そして、これは3部作の一つです。元は、マウスで位置が不特定の数字を追いかけるような内容で、動体視力や脳を活性化させるためのものです。チンパンジーの方が、こうした能力は上だとも言います。

そのコードの「300」は、ユーザーが変更しても、ほとんど反映しません。もともと、300にはなりません。それと、本格的には、乱数には若干の偏りが気になります。

現行のコードでは、***** から **** までの設定です。
今回のコードでは、カウント数は、ユーザー設定の部分には設けていません。
別に作らないとできません。

>4 1回目の表示までに時間がほしい。(できれば時間数ランダムで)→ この時間が足踏み

1回目の表示の時間設定そのものは、Excelのメモリがきちんと仮想メモリに収まらないと正しく出てきません。

元のプログラムはカウントダウンが出るようになっていました。

>5 表示と表示の間に時間がほしい。(できれば時間数ランダムで)→ この時間が足踏み
もともと、このマクロは、そろばんのフラッシュ演算を真似て作られたものでコードとしては最低ラインにまで削っていますから、確か可能だったと思います。

>6 指示とは違う表示をしたい
これ自体も、ある程度は想定されています。

>7 残りの表示回数を表示したい。
これも、元にあった機能を削っているだけです。

>8 指示の表示は連続及び重複の表示は大丈夫です。(むしろ推奨)
これは、間に何か入れた場合だと思います。連続表示した場合は、表示のOn/Off の切れ目がある場合に限ります。これは、フラッシュ演算と同じ原理です。なお、フラッシュ演算

>開始キー "F12" を押すと保存を促す画面が出るのですが
それは、設定されていない状態だと思います。
おそらく、私が実際に見ているものとは違う状態を見ているものと思われます。(添付画像が、このマクロの設定で作られたものです。全体がこのように出ています。この操作にはマウスは用いません。)

おそらくは、限られた間ではありますが、なんとか完成にまでは持っていきたいと思います。
「エクセルで 文字を 複数回 数秒間隔で 」の回答画像9
    • good
    • 0
この回答へのお礼

WindFaller さん
回答有難うございます。

最初に WindFaller さん に謝らなければいけない事があります。
実は他の掲示板に同様の質問をしていました。
マルチポストと言うそうです。
これは、ご回答者様に大変失礼な行為だと ご指摘を頂きました。
知らなかった行為とはいえ、ご指摘内容を考えますと許される行為ではないように思います。
今回の回答の冒頭等の内容も考えますと、これ以上 WindFaller さん にご迷惑をお掛けして良いものかと悩んでいます。
最初はエクセル関数(多少は扱えます)によりアドバイス的なご指導で製作できると安易に思い投稿してしまいましたが、VBAやマクロなど手が付けられない状況になってしまい 又 ご回答頂いた内容(コード等)もまったく理解できなくなってしまい、理解できない状況から気持ちだけが先回りしてしまいました。
本当に申し訳ありませんでした。
WindFaller さん のお怒りは当然の事と思います。さらにご負担をお掛けした事と思いますが、ここまでで質問の取り下げを考えています。
ただ、初めから丸投げの意識は有りませんでしたし、コード等がご回答貰えるたびに大変嬉しく、動作確認にて感動していたのは本当です。
大変身勝手なお願いですが WindFaller さん にご判断頂き、もし許して貰えるならば私の能力では完成には及びませんのでこのままご指導をお願いしたいのですが、如何でしょうか?

大変失礼な事をしてしまい申し訳有りませんでした。

お礼日時:2017/04/28 17:46

こんばんは。



ブックを新しくして設定してください。
以下は標準モジュールに貼り付けます。
設定は、今は、VBEditor 上で行います。
Startボタンは、F12 , 止まる場合は、Esc キー
画面の設定は、SettingSheetで行いますから、最初にこれを実行してください。
文字の大きさは、80にして、画面は300%にしていますが、まだ大きくすることは可能だと思います。
起動してから、最初は、しばらくお待ち下さい。出力順序を設定しています。

画面は、数式バーも、メニューも、枠線もすべてなくなります。
VBAマクロを開く場合は、Alt+ F11, マクロの選択は Alt + F8 ですからお忘れなく。

> 2 スロット感覚で画面が始動
 どんなふうにしてよいのかよくわかりません。

> 4 指定回数2・3の繰返し
  ランダムの生成する数は決まっていても、出力数は正確には分かりません。
  重複を取り除くので、だいたい8割ぐらいになります。今のところ、最後まで通してやっていません。たぶん、全てを吐き出せば終わるはずです。

まだ、#7のお礼欄は読んでおりませんので、あしからず。

'//
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Dim flg As Boolean
Sub RandomExpress()
 Application.EnableCancelKey = xlErrorHandler
 On Error GoTo EscapeLine
 Dim JChars As Variant
 Dim expRng As Range
 Dim timeDiff As Double
 Const iCnt As Integer = 300 'ランダムの生成する数
'************************
 JChars = Array("", "前", "後", "左", "右", "上", "下")
 Set expRng = Range("B3") '出力場所
 expRng.Font.Size = 80 'フォントサイズ
 timeDiff = 2 '秒間隔
 '***********************
 Dim ImpItms(iCnt, 1)
 Dim ExpItms()
 Dim i As Long, j As Long
 Randomize
 For i = 0 To iCnt
  ImpItms(i, 0) = Rnd()
  ImpItms(i, 1) = (i - 1) Mod 6 + 1
 Next
 SortPos ImpItms
 j = 0
 For i = 0 To UBound(ImpItms) - 1
  If ImpItms(i, 1) <> 0 Then
  If ImpItms(i, 1) <> ImpItms(i + 1, 1) Then
   ReDim Preserve ExpItms(j)
   ExpItms(j) = ImpItms(i, 1)
   j = j + 1
  End If
  End If
 Next i
 i = 0
 Do
  j = ExpItms(i)
  expRng.Value = JChars(j)
  DoEvents
  Sleep Int(timeDiff * 1000)
  i = i + 1
 Loop While UBound(ExpItms) > i
EscapeLine:
 Application.EnableCancelKey = xlInterrupt
 Application.ScreenUpdating = False
 ActiveSheet.UsedRange.ClearContents
 Application.ScreenUpdating = True
End Sub

Private Function SortPos(ByRef iArray())
 Dim i As Long
 Dim j As Long
 Dim Temp As Double
 Dim Temp2 As Long
 For i = UBound(iArray) To LBound(iArray) Step -1
  For j = LBound(iArray) + 1 To i
   If iArray(j - 1, 0) > iArray(j, 0) Then
    Temp = iArray(j - 1, 0)
    Temp2 = iArray(j - 1, 1)
    iArray(j - 1, 0) = iArray(j, 0)
    iArray(j - 1, 1) = iArray(j, 1)
    iArray(j, 0) = Temp
    iArray(j, 1) = Temp2
   End If
  Next j
 Next i
End Function

Sub SettingSheet()
'画面等の設定
With ActiveWindow
 flg = Not .DisplayHeadings
  .DisplayHeadings = flg
  .DisplayGridlines = flg
  .Zoom = IIf(flg, 100, 300)
End With
With Application
  .DisplayFormulaBar = flg
If .ExecuteExcel4Macro("Get.ToolBar(7,""Ribbon"")") Then
  .ExecuteExcel4Macro "Show.ToolBar(""Ribbon""," & flg & ")"
End If
End With
Call ShortCutKeySetting
End Sub
Sub ShortCutKeySetting()
Dim Msg As String
 If flg = False Then
 Application.OnKey "{F12}", "CountStart"
 Msg = "F12で起動します。" & vbCrLf & "終了は ESC キーです"
 Else
 Application.OnKey "{F12}"
 Msg = "F12の設定を解除しました。"
 End If
 MsgBox Msg
End Sub
Sub CountStart()
 Call RandomExpress
End Sub
    • good
    • 0
この回答へのお礼

WindFaller さん
回答有難うございます。

すごい!本当にすごいです。
ご負担をお掛けした事と思います。申し訳りません。
かなりイメージに近い動作です。わがままな修正希望個所はあるのですが修正可能でしょうか?

希望の修正箇所は
1 開始キーは "F12" で問題ありません。
2 ランダムの生成する数 "300" を "D3" にして "D3" に入力した回数ランダム発生にしたい。
(Range("B3")に変更してみましたがエラーになってしまいました。)
3 表示はすべて "1秒" にしたい。
(timeDiff = 2 '秒間隔 → timeDiff = 1 '秒間隔 で対応しました。)
4 1回目の表示までに時間がほしい。(できれば時間数ランダムで)→ この時間が足踏み
5 表示と表示の間に時間がほしい。(できれば時間数ランダムで)→ この時間が足踏み
6 4と5の時間が非表示ではなく指示とは違う表示をしたい(例:○と△交互など各1秒表示)
(時間のランダム→集中力の強化のため)
(○・△の表示→リズム・タイミングをとる強化のため)
7 残りの表示回数を表示したい。( "D5" に表示 例:"D3"に"3"入力で "3→2→1→0" 表示)
(運動の苦手な生徒は終わりが見えないと頑張れないため 指導が女子の為この傾向が強いです。)
(意地悪したいときは数字の色を変えて見えなくしちゃいます "笑" )
8 指示の表示は連続及び重複の表示は大丈夫です。(むしろ推奨)
以上です。

他力本願すぎるとは思いますが私には "VBA" はかなりレベルが高くなかなか理解が出来ません。
少しづつ勉強してみますが、ご指導お願いしたいです。
ただ、どうせ作るのであれば質の高いものと思っています。部活の指導者として妥協はしたくないので。
あと、開始キー "F12" を押すと保存を促す画面が出るのですがそのまま保存で大丈夫でしょうか?その程度の事もわからない未熟者です。

ご迷惑をお掛けしますが、ご教授宜しくお願いします。

お礼日時:2017/04/27 12:00

外付けアンプという手もあります。

生徒としてはそれの方がやりやすいように思います。
どうしても画面で,と言う場合は以下の通りです。E7セルに上下左右が表示されます(プログラムでright, left, up, downを日本語に書き替えて)。それを拡大表示すれば良いのではないでしょうか。
p.s. ランダムですので,例えば「右,右」のように続く場合もあります。それを避けるには,前の値と新しい乱数の差の絶対値が0.25の場合はランダムを出し直すというプログラムの変更が必要です。それは,勉強してみてください。
    • good
    • 0
この回答へのお礼

presidio さん
回答有難うございます。

もしご迷惑だったり、ご気分を害してしまわれたら大変申し訳ないのですが、応用と変更などがどうしても出来ません。VBAをまったく理解できていないのが原因とはわかっているのですが2日や3日で理解出来そうにもありません。もう一度ゼロからご指導お願い出来ないでしょうか?
大変手前勝手ではありますが起動させたい動作をもう一度記載させてください。

希望条件
スタートはEnterキー希望
画面には「指示表示画面」と「表示回数の入力画面」と「指示回数のカウントダウン画面」
スタートから指示までの時間と指示と指示の間の時間はランダム(3~8秒)各指示時間1秒
指示画面は指示時間1秒
スタートから指示までの時間と指示と指示の間の時間はカウントダウン式で数字以外(例:○と△交互)
指示表示は 前・後・左・右・上・下 をランダムで、ですが項目は増やしたい

以上です。

動作としては
1 「表示回数の入力画面」指示回数の入力(例 3)
2 スタートボタンを押す
3 「指示表示画面」起動
例) 表示回数3入力 3秒後に表示 2秒後に表示 4秒後に表示(表示までの時間はランダム)
指示画面= ○ △ ○ 前 △ ○ 左 △ ○ △ ○ 上 で表示(計12秒)
4 「指示回数のカウントダウン画面」起動
「前」表示まで「3」 「前」表示で「2」 「左」表示で「1」 「上」表示で「0」
5 画面停止

わがままなお願いですがどうか宜しくお願いします。

お礼日時:2017/04/26 17:40

Dimの次に


Randomizeを入れ,
Forの次の行を
Range("f7").Value = Rnd
としてください。
これにより,for~nextの繰り返しの度にF7セルに1以下の乱数が入ります。
シートのE7セルに次式を入れてください。
=IF(F7<0.25,"right",IF(F7<0.5,"left",IF(F7<0.75,"up","down")))
これで,右,左,上,下がランダムに発生されます(英語)
原理は,乱数が0.25未満なら右,それ以外の場合で0.5未満なら左,それら以外の場合で0.75未満なら上,その他は下(の英語)がE7セルにセットされ,それが読まれます。
    • good
    • 0
この回答へのお礼

presidio さん
回答有難うございます。

すみません。
ここまでご教授頂いて大変申し訳ないのですが問題発生です。
使用場所が体育館で、5~10人程度で高速足踏みをしている
ので足音が半端ないです。おそらく音声が聴き取れないかと・・・。
表示方式に変更は出来るのでしょうか?

宜しくお願いします。

お礼日時:2017/04/26 11:53

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