[[20190708095708]] 『セルを1秒ごとに自動で動かす。』(Masa) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『セルを1秒ごとに自動で動かす。』(Masa)

動物の行動を1秒ごとに記録するために、いい方がないか探しています。

選択されているセルが1秒ごとに自動で下に降りていき、新しい行動が出たときに、いったん止めて、その行動を記録し、またセルが自動で下に降りていく動きを再開したいのですが、いい方法はありませんか?よろしくお願いします。

< 使用 Excel:Excel2010、使用 OS:Windows10 >


選択されているセルが1秒毎に勝手に移動していく…、というのは止めた方が良いですよ。 他の用途で同時にExcelを使おうとすると、人間の操作の邪魔をしそうです。

そもそも、行動を記録って、どんな方法、どんなセンサを使うのでしょう? まさか、人間が張り付いて目視し、1秒毎に手入力、ではないですよね? GPS は室内では拾いにくいし、体温とかは行動とは言わないし…。

いずれにせよ、Excelは表計算アプリなので、リアルタイムの処理には向いていないです。 VB.NET(無料版もあるし、業務用アプリを無料版で作成する事も認められています)等のコンパイル言語を使うべきでしょう。
(???) 2019/07/08(月) 10:26


返信ありがとうございます。
追記させてください。
行動は、すでにビデオファイルとして、記録されています。ですから、目視&手入力です。
動物のしっぽが動いたか動かなかったかということを、そのビデオデータから0か1で1秒ごとの数字のデータへの返還をエクセルでしたいのです。
約20-30分のビデオなので、しっぽが動くたびにいちいちエクセルをスクロールダウンしていくのが大変なので、勝手にセルのフォーカスが動いて行ってくれると作業能率が上がるっと思いました。
その、行動の記録を、いくつか計算して統計ソフトに移していく予定です。

(Masa) 2019/07/08(月) 11:53


なるほど、入力は1桁程度ですか。 では、シートとマクロで実現する例なぞ。

シートにActiveXのボタンを2つ貼ってください。 ボタンを貼った部分は、「ウィンドウ枠の固定」でスクロールしないようにしておくと良いでしょう。(開始と停止ボタンですが、ボタンを押そうとしても1秒で最下行に飛んでしまうので…)

 【標準モジュール】
 Public dpNext As Date

 Public Sub sTimer()
    Dim iR As Long

    iR = Cells(Rows.Count, "A").End(xlUp).Row + 1
    Cells(iR, "A").Formula = "=ROW()-1"
    Cells(iR, "B").Activate

    dpNext = DateAdd("s", 1, dpNext)
    Application.OnTime dpNext, "sTimer"
 End Sub

 Public Sub sStop()
    On Error Resume Next
    Application.OnTime dpNext, "sTimer", , False
    On Error GoTo 0
 End Sub

 【シートモジュール】
 Private Sub CommandButton1_Click()
    dpNext = Now
    Call sTimer
 End Sub

 Private Sub CommandButton2_Click()
    Call sStop
 End Sub

 【ThisWorkbook】
 Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Call sStop
 End Sub

シートに直接入力なので、いちいちENTERキーを押す必要があります。 ENTERするのが面倒であれば、ユーザーフォームならキー入力が拾えるし、左右マウスボタン押下も拾えるので、そっちの方が適しているかもです。
(???) 2019/07/08(月) 13:30


返信とプログラミンがありがとうございました。
完全に理解するには時間がかかるやもしれませんが、非常に感謝感激です。
また、わからないことがありましたら、よろしくお願いいたします。
(Masa) 2019/07/09(火) 19:02

すんなりできてしまいました。確かに矢印キーなどが使えませんね。ユーザーフォームでのやり方も気になるので、勉強してみようと思います。ありがとうございます。
(Masa) 2019/07/09(火) 21:21

ユーザーフォームで、マウスの左右クリックを記録していく例なぞ。
シートにはボタンを1つ貼り(前回のブックで試せるよう、CommandButton3 とします)、VBAプロジェクトにユーザーフォームを追加し、ボタンを2つ(開始と停止)貼っておいてください。

 【シートモジュール】
 Private Sub CommandButton3_Click()
    UserForm1.Show vbModeless
 End Sub

 【UserForm1】
 Dim iFlag As Long

 Private Sub CommandButton1_Click()
    Dim tEd As Single
    Dim iR As Long

    tEd = Timer
    iFlag = 0

    While iFlag = 0
        With ActiveSheet
            iR = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
            .Cells(iR, "A").Formula = "=ROW()-1"
            .Cells(iR, "B").Activate
        End With
        DoEvents
        tEd = tEd + 1
        While Timer < tEd
            DoEvents
        Wend
    Wend
 End Sub

 Private Sub CommandButton2_Click()
    iFlag = 1
 End Sub

 Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    ActiveSheet.Cells(ActiveCell.Row, "B").Value = Button - 1
 End Sub

 Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    iFlag = 1
 End Sub

使い方は、シート上のボタンを押すとフォームが表示されるので、開始ボタンを押します。 その後、フォーム上の何も貼っていない灰色部分をマウスの左右ボタンでクリックすると記録されます。(別のボタンを貼って、ボタンを押すと文字列代入、としてもOK)

(???) 2019/07/10(水) 09:20


ちょっと試してみます。
ありがとうございました。
(Masa) 2019/07/11(木) 09:33

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.