重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

こんばんわ。
 
データをエクセル上にリアルタイムにロギングしていくソフトを使用しているのですがデータが上段から下段へ移行していきます。
上段から下段へ移動するのは問題ないのですが
データが入力されるにつれモニター画面を通り越してしまうので最新データを常に見ていることができません。
最新データを常に見れるように最下段に入ったデータを常にモニター画面に表示できるようにできないでしょうか?

因みに私が扱ってるデータは一秒間に5回くらい入力されます。
エクセル2000を使用していますが5万行くらいのデータ量になります。
どうぞご教授のほどよろしくお願いします。

A 回答 (5件)

なるほど。


それではANo.2で回答したマクロを

Private Sub Worksheet_Change(ByVal Target As Range)
 on error resume next
 Target.Offset(1).Select
End Sub

とします。
このマクロは,ロギングが走っているシートごとにシート名タブを右クリックして,コードの表示を選んで現れたシートに貼り付けます。
    • good
    • 0
この回答へのお礼

こんにちは
再レスありがとうございます。

改めていただいた式で試してみたところ
完璧でした!
私の思ったとおりの動作で不具合もありませんでした。

エクセルの操作で解決できるものだと思っていたのすが
VBAは私には敷居の高いもので
恥ずかしながら教えていただいたものを内容を理解することもできずそのままコピペしただけです。
しかしこの機会にVBAを真剣に勉強してみようとおもいます。
まずは頂いた内容の意味を手探りですが解いてみようと思います。

この度はkeithin様他諸先輩方の教えを頂きまして解決できました。
本当にありがとうございました。

お礼日時:2011/02/27 12:57

標準モジュールの出し方。


 Sheet見出し上で右クリック → コードの表示 → VBE画面が出ますので
 その画面で、挿入をクリック → 標準モジュールを選択
 出てきた画面に貼り付けしてください。

マクロの実行方法
 キーボードの[Alt]と[F8]を押します。
 実行したいものを選択します。

コメントを書き加えましたので、読んでください

'ここから
Option Explicit

Private Declare Function GetAsyncKeyState Lib "user32" ( _
ByVal vKey As Long) As Integer

Private 呼び出し回数 As Long

Sub スクロールサブ()
  Dim i As Long
  Const myName = "Sheet1" 'スクロールしたいシートの名前に変更する
  If ActiveSheet.Name = myName Then
    i = Range("A" & Rows.Count).End(xlUp).Row 'A列の最終行をセット。列が違ったら"A"を"B"などに書き換える
    ActiveWindow.ScrollRow = i
    If GetAsyncKeyState(vbKeyEscape) <> 0 Then 'Escを2秒以上押すと実行停止
      呼び出し回数 = 0
      Application.StatusBar = False
      Exit Sub
    End If
    If 呼び出し回数 < 0 Then
      呼び出し回数 = 0
      Exit Sub
    End If
  End If
  '2秒毎に自分自身を呼び出し、スクロールする
  Application.OnTime Now + TimeValue("00:00:02"), "スクロールサブ"
  呼び出し回数 = 呼び出し回数 + 1
  Application.StatusBar = _
     "呼び出し回数... " & 呼び出し回数
End Sub


Sub 繰り返し停止サブ()
  呼び出し回数 = -1000
  Application.StatusBar = False
End Sub
    • good
    • 0
この回答へのお礼

こんにちは
再レスありがとうございます。

コメントをいただいたおかげで私にも使用することができました。
動作も完璧に不具合もなく動作しました!
2秒ごとにロギング画面が更新されるものでした。
ナルホド納得の動作でこれも正解ですね!
いろいろと設定も変えられるので他用途でも使用できそうです。

今回はki-aaa様の教えを頂き解決に至れました。
本当にありがとうございました。

私ごときが諸先輩方の回答に甲乙をつけるなど憚られるのですが
システムの関係上ご容赦ください。

お礼日時:2011/02/27 13:10

こんな方法はどうでしょうか



標準モジュール

Option Explicit

Private Declare Function GetAsyncKeyState Lib "user32" ( _
ByVal vKey As Long) As Integer

Private 呼び出し回数 As Long

Sub スクロールサブ()
  Dim i As Long
  i = ActiveSheet.UsedRange.Rows.Count
  ActiveWindow.ScrollRow = i
  If GetAsyncKeyState(vbKeyEscape) <> 0 Then 'Escapeが現在押されている状態だったら実行停止
    呼び出し回数 = 0
    Application.StatusBar = False
    Exit Sub
  End If
  If 呼び出し回数 < 0 Then
    呼び出し回数 = 0
    Exit Sub
  End If
  Application.OnTime Now + TimeValue("00:00:02"), "スクロールサブ"
  呼び出し回数 = 呼び出し回数 + 1
  Application.StatusBar = _
     "呼び出し回数... " & 呼び出し回数
End Sub


Sub 繰り返し停止サブ()
  呼び出し回数 = -1000
  Application.StatusBar = False
End Sub
    • good
    • 0
この回答へのお礼

こんばんわ。
返信ありがとうございます!

早速試させていただきました。
が・・・
どうやら私の狭小な脳では内容の理解どころか
どうやってこの式を使用するのかさえ分かりませんでした;;
Option ExplicitのところからNo1のtom04様に教えていただいた
のと同じ方法でコピペしたのですが上手く動作していないように見えました。
どのような内容なのかわかりませんが
動作したらとても素敵な動きをするようで楽しみで仕方ありません。
もしよろしければ今一度ご教授いただけたらと思っております。
どうぞよろしくお願いいたします。

お礼日時:2011/02/24 22:01

シート名タブを右クリックしてコードの表示を選び



Private Sub Worksheet_Change(ByVal Target As Range)
Target.Offset(1).Select
End Sub

とかでいいです。
    • good
    • 0
この回答へのお礼

こんばんわ
返信ありがとうございます!

早速試させていただきました
結果は・・・

思ったとおりの動きをしてくれました!
最新データがモニターからはみ出すことなく常に表示されました。

が・・・
『実行エラー'1004'RangeクラスのSelectメソッドが失敗しました』
というエラーがでてしまいます。
デバックを見ると
Target.Offset(1).Select
の部分が黄色く表示されています。

式の内容は全くわからないので現象を追及してみたところ
ロギングをしているシートを見ている状態では問題なく動作しているようですが、
別シートに移動するとエラーがでます。
シートを複数使用していること自体説明してなかった部分ですので
「そんなの聞いてないよ!」って言われたらそれまでです。
申し訳ありません;;
もしもまだお時間があり改善策など思いつくようなことがありましたら
どうぞご教授のほどよろしくお願いいたします。

お礼日時:2011/02/24 21:48

こんばんは!


一例です。

画面左下にある操作したいSheet見出し上で右クリック → コードの表示 → VBE画面が出ますので、
↓のコードをコピー&ペーストしてみてください。

Private Sub Worksheet_Change(ByVal Target As Range) 'この行から
Dim i As Long
i = ActiveSheet.UsedRange.Rows.Count
ActiveWindow.ScrollRow = i
End Sub 'この行まで

尚、最終行が画面の1行目に表示されてしまいますので、仮に最終行を画面の10行目に表示したい場合は

ActiveWindow.ScrollRow = i  の部分を

ActiveWindow.ScrollRow = i-9

のように調整してみてください。
参考になれば良いのですが・・・m(__)m
    • good
    • 0
この回答へのお礼

早速のご返事ありがとうございます!

今日試してみたのですが・・・
この式では刻々と入力される最新のロギングデータを表示するのではなく
そのシートの最下行を表示してしまうようです。
5万行をシートに設定していたら5万行目を表示します。

私の説明が悪いがために勘違いなされたものと推測いたします。
このような書き込みをするのも初めてなもので
上手く伝わらないだろうと思いつつの質問でしたので申し訳ありません。
もしもまだお付き合いくださるようでしたら
今一度教えを乞いたいと思っておりますのでどうぞよろしくお願いします。

お礼日時:2011/02/24 21:01

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